summaryrefslogtreecommitdiffstats
path: root/libcxx/test/language.support
diff options
context:
space:
mode:
authorHoward Hinnant <hhinnant@apple.com>2010-05-11 19:42:16 +0000
committerHoward Hinnant <hhinnant@apple.com>2010-05-11 19:42:16 +0000
commit3e519524c118651123eecf60c2bbc5d65ad9bac3 (patch)
treeb2dd4168cfe448920a602cd7d2e40f95da187153 /libcxx/test/language.support
parent9132c59d43b6c590c9bb33496eebf9f192d6857a (diff)
downloadbcm5719-llvm-3e519524c118651123eecf60c2bbc5d65ad9bac3.tar.gz
bcm5719-llvm-3e519524c118651123eecf60c2bbc5d65ad9bac3.zip
libcxx initial import
llvm-svn: 103490
Diffstat (limited to 'libcxx/test/language.support')
-rw-r--r--libcxx/test/language.support/cstdint/cstdint.syn/cstdint.pass.cpp290
-rw-r--r--libcxx/test/language.support/cstdint/version.pass.cpp20
-rw-r--r--libcxx/test/language.support/nothing_to_do.pass.cpp12
-rw-r--r--libcxx/test/language.support/support.dynamic/alloc.errors/bad.alloc/bad_alloc.pass.cpp27
-rw-r--r--libcxx/test/language.support/support.dynamic/alloc.errors/new.badlength/bad_array_new_length.pass.cpp27
-rw-r--r--libcxx/test/language.support/support.dynamic/alloc.errors/new.handler/new_handler.pass.cpp19
-rw-r--r--libcxx/test/language.support/support.dynamic/alloc.errors/nothing_to_do.pass.cpp12
-rw-r--r--libcxx/test/language.support/support.dynamic/alloc.errors/set.new.handler/set_new_handler.pass.cpp22
-rw-r--r--libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array.pass.cpp54
-rw-r--r--libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array_nothrow.pass.cpp51
-rw-r--r--libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array_nothrow_replace.pass.cpp49
-rw-r--r--libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array_replace.pass.cpp49
-rw-r--r--libcxx/test/language.support/support.dynamic/new.delete/new.delete.dataraces/not_testable.pass.cpp12
-rw-r--r--libcxx/test/language.support/support.dynamic/new.delete/new.delete.placement/new.pass.cpp30
-rw-r--r--libcxx/test/language.support/support.dynamic/new.delete/new.delete.placement/new_array.pass.cpp30
-rw-r--r--libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new.pass.cpp54
-rw-r--r--libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new_nothrow.pass.cpp51
-rw-r--r--libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new_nothrow_replace.pass.cpp49
-rw-r--r--libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new_replace.pass.cpp49
-rw-r--r--libcxx/test/language.support/support.dynamic/new.delete/nothing_to_do.pass.cpp12
-rw-r--r--libcxx/test/language.support/support.dynamic/version.pass.cpp20
-rw-r--r--libcxx/test/language.support/support.exception/exception.terminate/nothing_to_do.pass.cpp12
-rw-r--r--libcxx/test/language.support/support.exception/exception.terminate/set.terminate/set_terminate.pass.cpp23
-rw-r--r--libcxx/test/language.support/support.exception/exception.terminate/terminate.handler/terminate_handler.pass.cpp19
-rw-r--r--libcxx/test/language.support/support.exception/exception.terminate/terminate/terminate.pass.cpp26
-rw-r--r--libcxx/test/language.support/support.exception/exception.unexpected/bad.exception/bad_exception.pass.cpp27
-rw-r--r--libcxx/test/language.support/support.exception/exception.unexpected/nothing_to_do.pass.cpp12
-rw-r--r--libcxx/test/language.support/support.exception/exception.unexpected/set.unexpected/set_unexpected.pass.cpp22
-rw-r--r--libcxx/test/language.support/support.exception/exception.unexpected/unexpected.handler/unexpected_handler.pass.cpp19
-rw-r--r--libcxx/test/language.support/support.exception/exception.unexpected/unexpected/unexpected.pass.cpp26
-rw-r--r--libcxx/test/language.support/support.exception/exception/exception.pass.cpp25
-rw-r--r--libcxx/test/language.support/support.exception/propagation/current_exception.pass.cpp269
-rw-r--r--libcxx/test/language.support/support.exception/propagation/exception_ptr.pass.cpp34
-rw-r--r--libcxx/test/language.support/support.exception/propagation/make_exception_ptr.pass.cpp49
-rw-r--r--libcxx/test/language.support/support.exception/propagation/rethrow_exception.pass.cpp57
-rw-r--r--libcxx/test/language.support/support.exception/uncaught/uncaught_exception.pass.cpp36
-rw-r--r--libcxx/test/language.support/support.exception/version.pass.cpp20
-rw-r--r--libcxx/test/language.support/support.general/nothing_to_do.pass.cpp12
-rw-r--r--libcxx/test/language.support/support.initlist/support.initlist.access/access.pass.cpp38
-rw-r--r--libcxx/test/language.support/support.initlist/support.initlist.cons/default.pass.cpp23
-rw-r--r--libcxx/test/language.support/support.initlist/types.pass.cpp35
-rw-r--r--libcxx/test/language.support/support.initlist/version.pass.cpp20
-rw-r--r--libcxx/test/language.support/support.limits/c.limits/cfloat.pass.cpp140
-rw-r--r--libcxx/test/language.support/support.limits/c.limits/climits.pass.cpp92
-rw-r--r--libcxx/test/language.support/support.limits/c.limits/version_cfloat.pass.cpp20
-rw-r--r--libcxx/test/language.support/support.limits/c.limits/version_climits.pass.cpp20
-rw-r--r--libcxx/test/language.support/support.limits/limits/denorm.style/check_values.pass.cpp38
-rw-r--r--libcxx/test/language.support/support.limits/limits/is_specialized.pass.cpp67
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/denorm_min.pass.cpp49
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/digits.pass.cpp49
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/digits10.pass.cpp53
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/epsilon.pass.cpp50
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_denorm.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_denorm_loss.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_infinity.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_quiet_NaN.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_signaling_NaN.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/infinity.pass.cpp54
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_bounded.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_exact.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_iec559.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_integer.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_modulo.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_signed.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/lowest.pass.cpp56
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/max.pass.cpp56
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/max_digits10.pass.cpp49
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/max_exponent.pass.cpp49
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/max_exponent10.pass.cpp49
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/min.pass.cpp56
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/min_exponent.pass.cpp49
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/min_exponent10.pass.cpp49
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/quiet_NaN.pass.cpp69
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/radix.pass.cpp49
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/round_error.pass.cpp50
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/round_style.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/signaling_NaN.pass.cpp69
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/tinyness_before.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/traps.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits/default.pass.cpp83
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.special/nothing_to_do.pass.cpp12
-rw-r--r--libcxx/test/language.support/support.limits/limits/round.style/check_values.pass.cpp34
-rw-r--r--libcxx/test/language.support/support.limits/limits/version.pass.cpp20
-rw-r--r--libcxx/test/language.support/support.limits/nothing_to_do.pass.cpp12
-rw-r--r--libcxx/test/language.support/support.rtti/bad.cast/bad_cast.pass.cpp27
-rw-r--r--libcxx/test/language.support/support.rtti/bad.typeid/bad_typeid.pass.cpp27
-rw-r--r--libcxx/test/language.support/support.rtti/type.info/type_info.pass.cpp26
-rw-r--r--libcxx/test/language.support/support.rtti/type.info/type_info_hash.pass.cpp23
-rw-r--r--libcxx/test/language.support/support.rtti/version.pass.cpp20
-rw-r--r--libcxx/test/language.support/support.runtime/csetjmp.pass.cpp24
-rw-r--r--libcxx/test/language.support/support.runtime/csignal.pass.cpp57
-rw-r--r--libcxx/test/language.support/support.runtime/cstdarg.pass.cpp33
-rw-r--r--libcxx/test/language.support/support.runtime/cstdbool.pass.cpp32
-rw-r--r--libcxx/test/language.support/support.runtime/cstdlib.pass.cpp86
-rw-r--r--libcxx/test/language.support/support.runtime/ctime.pass.cpp40
-rw-r--r--libcxx/test/language.support/support.runtime/version_csetjmp.pass.cpp20
-rw-r--r--libcxx/test/language.support/support.runtime/version_csignal.pass.cpp20
-rw-r--r--libcxx/test/language.support/support.runtime/version_cstdarg.pass.cpp20
-rw-r--r--libcxx/test/language.support/support.runtime/version_cstdbool.pass.cpp20
-rw-r--r--libcxx/test/language.support/support.runtime/version_cstdlib.pass.cpp20
-rw-r--r--libcxx/test/language.support/support.runtime/version_ctime.pass.cpp20
-rw-r--r--libcxx/test/language.support/support.start.term/quick_exit.pass.cpp21
-rw-r--r--libcxx/test/language.support/support.types/max_align_t.pass.cpp34
-rw-r--r--libcxx/test/language.support/support.types/null.pass.cpp18
-rw-r--r--libcxx/test/language.support/support.types/nullptr_t.pass.cpp44
-rw-r--r--libcxx/test/language.support/support.types/offsetof.pass.cpp18
-rw-r--r--libcxx/test/language.support/support.types/ptrdiff_t.pass.cpp27
-rw-r--r--libcxx/test/language.support/support.types/size_t.pass.cpp27
-rw-r--r--libcxx/test/language.support/support.types/version.pass.cpp20
109 files changed, 4582 insertions, 0 deletions
diff --git a/libcxx/test/language.support/cstdint/cstdint.syn/cstdint.pass.cpp b/libcxx/test/language.support/cstdint/cstdint.syn/cstdint.pass.cpp
new file mode 100644
index 00000000000..29bdd312d2d
--- /dev/null
+++ b/libcxx/test/language.support/cstdint/cstdint.syn/cstdint.pass.cpp
@@ -0,0 +1,290 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test <cstdint>
+
+#include <cstdint>
+#include <csignal>
+#include <cwctype>
+#include <climits>
+#include <type_traits>
+#include <limits>
+#include <cassert>
+
+int main()
+{
+ // typedef std::int8_t
+ static_assert(sizeof(std::int8_t)*CHAR_BIT == 8,
+ "sizeof(std::int8_t)*CHAR_BIT == 8");
+ static_assert(std::is_signed<std::int8_t>::value,
+ "std::is_signed<std::int8_t>::value");
+ // typedef std::int16_t
+ static_assert(sizeof(std::int16_t)*CHAR_BIT == 16,
+ "sizeof(std::int16_t)*CHAR_BIT == 16");
+ static_assert(std::is_signed<std::int16_t>::value,
+ "std::is_signed<std::int16_t>::value");
+ // typedef std::int32_t
+ static_assert(sizeof(std::int32_t)*CHAR_BIT == 32,
+ "sizeof(std::int32_t)*CHAR_BIT == 32");
+ static_assert(std::is_signed<std::int32_t>::value,
+ "std::is_signed<std::int32_t>::value");
+ // typedef std::int64_t
+ static_assert(sizeof(std::int64_t)*CHAR_BIT == 64,
+ "sizeof(std::int64_t)*CHAR_BIT == 64");
+ static_assert(std::is_signed<std::int64_t>::value,
+ "std::is_signed<std::int64_t>::value");
+
+ // typedef std::uint8_t
+ static_assert(sizeof(std::uint8_t)*CHAR_BIT == 8,
+ "sizeof(std::uint8_t)*CHAR_BIT == 8");
+ static_assert(std::is_unsigned<std::uint8_t>::value,
+ "std::is_unsigned<std::uint8_t>::value");
+ // typedef std::uint16_t
+ static_assert(sizeof(std::uint16_t)*CHAR_BIT == 16,
+ "sizeof(std::uint16_t)*CHAR_BIT == 16");
+ static_assert(std::is_unsigned<std::uint16_t>::value,
+ "std::is_unsigned<std::uint16_t>::value");
+ // typedef std::uint32_t
+ static_assert(sizeof(std::uint32_t)*CHAR_BIT == 32,
+ "sizeof(std::uint32_t)*CHAR_BIT == 32");
+ static_assert(std::is_unsigned<std::uint32_t>::value,
+ "std::is_unsigned<std::uint32_t>::value");
+ // typedef std::uint64_t
+ static_assert(sizeof(std::uint64_t)*CHAR_BIT == 64,
+ "sizeof(std::uint64_t)*CHAR_BIT == 64");
+ static_assert(std::is_unsigned<std::uint64_t>::value,
+ "std::is_unsigned<std::uint64_t>::value");
+
+ // typedef std::int_least8_t
+ static_assert(sizeof(std::int_least8_t)*CHAR_BIT >= 8,
+ "sizeof(std::int_least8_t)*CHAR_BIT >= 8");
+ static_assert(std::is_signed<std::int_least8_t>::value,
+ "std::is_signed<std::int_least8_t>::value");
+ // typedef std::int_least16_t
+ static_assert(sizeof(std::int_least16_t)*CHAR_BIT >= 16,
+ "sizeof(std::int_least16_t)*CHAR_BIT >= 16");
+ static_assert(std::is_signed<std::int_least16_t>::value,
+ "std::is_signed<std::int_least16_t>::value");
+ // typedef std::int_least32_t
+ static_assert(sizeof(std::int_least32_t)*CHAR_BIT >= 32,
+ "sizeof(std::int_least32_t)*CHAR_BIT >= 32");
+ static_assert(std::is_signed<std::int_least32_t>::value,
+ "std::is_signed<std::int_least32_t>::value");
+ // typedef std::int_least64_t
+ static_assert(sizeof(std::int_least64_t)*CHAR_BIT >= 64,
+ "sizeof(std::int_least64_t)*CHAR_BIT >= 64");
+ static_assert(std::is_signed<std::int_least64_t>::value,
+ "std::is_signed<std::int_least64_t>::value");
+
+ // typedef std::uint_least8_t
+ static_assert(sizeof(std::uint_least8_t)*CHAR_BIT >= 8,
+ "sizeof(std::uint_least8_t)*CHAR_BIT >= 8");
+ static_assert(std::is_unsigned<std::uint_least8_t>::value,
+ "std::is_unsigned<std::uint_least8_t>::value");
+ // typedef std::uint_least16_t
+ static_assert(sizeof(std::uint_least16_t)*CHAR_BIT >= 16,
+ "sizeof(std::uint_least16_t)*CHAR_BIT >= 16");
+ static_assert(std::is_unsigned<std::uint_least16_t>::value,
+ "std::is_unsigned<std::uint_least16_t>::value");
+ // typedef std::uint_least32_t
+ static_assert(sizeof(std::uint_least32_t)*CHAR_BIT >= 32,
+ "sizeof(std::uint_least32_t)*CHAR_BIT >= 32");
+ static_assert(std::is_unsigned<std::uint_least32_t>::value,
+ "std::is_unsigned<std::uint_least32_t>::value");
+ // typedef std::uint_least64_t
+ static_assert(sizeof(std::uint_least64_t)*CHAR_BIT >= 64,
+ "sizeof(std::uint_least64_t)*CHAR_BIT >= 64");
+ static_assert(std::is_unsigned<std::uint_least64_t>::value,
+ "std::is_unsigned<std::uint_least64_t>::value");
+
+ // typedef std::int_fast8_t
+ static_assert(sizeof(std::int_fast8_t)*CHAR_BIT >= 8,
+ "sizeof(std::int_fast8_t)*CHAR_BIT >= 8");
+ static_assert(std::is_signed<std::int_fast8_t>::value,
+ "std::is_signed<std::int_fast8_t>::value");
+ // typedef std::int_fast16_t
+ static_assert(sizeof(std::int_fast16_t)*CHAR_BIT >= 16,
+ "sizeof(std::int_fast16_t)*CHAR_BIT >= 16");
+ static_assert(std::is_signed<std::int_fast16_t>::value,
+ "std::is_signed<std::int_fast16_t>::value");
+ // typedef std::int_fast32_t
+ static_assert(sizeof(std::int_fast32_t)*CHAR_BIT >= 32,
+ "sizeof(std::int_fast32_t)*CHAR_BIT >= 32");
+ static_assert(std::is_signed<std::int_fast32_t>::value,
+ "std::is_signed<std::int_fast32_t>::value");
+ // typedef std::int_fast64_t
+ static_assert(sizeof(std::int_fast64_t)*CHAR_BIT >= 64,
+ "sizeof(std::int_fast64_t)*CHAR_BIT >= 64");
+ static_assert(std::is_signed<std::int_fast64_t>::value,
+ "std::is_signed<std::int_fast64_t>::value");
+
+ // typedef std::uint_fast8_t
+ static_assert(sizeof(std::uint_fast8_t)*CHAR_BIT >= 8,
+ "sizeof(std::uint_fast8_t)*CHAR_BIT >= 8");
+ static_assert(std::is_unsigned<std::uint_fast8_t>::value,
+ "std::is_unsigned<std::uint_fast8_t>::value");
+ // typedef std::uint_fast16_t
+ static_assert(sizeof(std::uint_fast16_t)*CHAR_BIT >= 16,
+ "sizeof(std::uint_fast16_t)*CHAR_BIT >= 16");
+ static_assert(std::is_unsigned<std::uint_fast16_t>::value,
+ "std::is_unsigned<std::uint_fast16_t>::value");
+ // typedef std::uint_fast32_t
+ static_assert(sizeof(std::uint_fast32_t)*CHAR_BIT >= 32,
+ "sizeof(std::uint_fast32_t)*CHAR_BIT >= 32");
+ static_assert(std::is_unsigned<std::uint_fast32_t>::value,
+ "std::is_unsigned<std::uint_fast32_t>::value");
+ // typedef std::uint_fast64_t
+ static_assert(sizeof(std::uint_fast64_t)*CHAR_BIT >= 64,
+ "sizeof(std::uint_fast64_t)*CHAR_BIT >= 64");
+ static_assert(std::is_unsigned<std::uint_fast64_t>::value,
+ "std::is_unsigned<std::uint_fast64_t>::value");
+
+ // typedef std::intptr_t
+ static_assert(sizeof(std::intptr_t) >= sizeof(void*),
+ "sizeof(std::intptr_t) >= sizeof(void*)");
+ static_assert(std::is_signed<std::intptr_t>::value,
+ "std::is_signed<std::intptr_t>::value");
+ // typedef std::uintptr_t
+ static_assert(sizeof(std::uintptr_t) >= sizeof(void*),
+ "sizeof(std::uintptr_t) >= sizeof(void*)");
+ static_assert(std::is_unsigned<std::uintptr_t>::value,
+ "std::is_unsigned<std::uintptr_t>::value");
+
+ // typedef std::intmax_t
+ static_assert(sizeof(std::intmax_t) >= sizeof(long long),
+ "sizeof(std::intmax_t) >= sizeof(long long)");
+ static_assert(std::is_signed<std::intmax_t>::value,
+ "std::is_signed<std::intmax_t>::value");
+ // typedef std::uintmax_t
+ static_assert(sizeof(std::uintmax_t) >= sizeof(unsigned long long),
+ "sizeof(std::uintmax_t) >= sizeof(unsigned long long)");
+ static_assert(std::is_unsigned<std::uintmax_t>::value,
+ "std::is_unsigned<std::uintmax_t>::value");
+
+ // INTN_MIN
+ static_assert(INT8_MIN == -128, "INT8_MIN == -128");
+ static_assert(INT16_MIN == -32768, "INT16_MIN == -32768");
+ static_assert(INT32_MIN == -2147483648U, "INT32_MIN == -2147483648");
+ static_assert(INT64_MIN == -9223372036854775808ULL, "INT64_MIN == -9223372036854775808LL");
+
+ // INTN_MAX
+ static_assert(INT8_MAX == 127, "INT8_MAX == 127");
+ static_assert(INT16_MAX == 32767, "INT16_MAX == 32767");
+ static_assert(INT32_MAX == 2147483647, "INT32_MAX == 2147483647");
+ static_assert(INT64_MAX == 9223372036854775807LL, "INT64_MAX == 9223372036854775807LL");
+
+ // UINTN_MAX
+ static_assert(UINT8_MAX == 255, "UINT8_MAX == 255");
+ static_assert(UINT16_MAX == 65535, "UINT16_MAX == 65535");
+ static_assert(UINT32_MAX == 4294967295U, "UINT32_MAX == 4294967295");
+ static_assert(UINT64_MAX == 18446744073709551615ULL, "UINT64_MAX == 18446744073709551615ULL");
+
+ // INT_FASTN_MIN
+ static_assert(INT_FAST8_MIN <= -128, "INT_FAST8_MIN <= -128");
+ static_assert(INT_FAST16_MIN <= -32768, "INT_FAST16_MIN <= -32768");
+ static_assert(INT_FAST32_MIN <= -2147483648U, "INT_FAST32_MIN <= -2147483648");
+ static_assert(INT_FAST64_MIN <= -9223372036854775808ULL, "INT_FAST64_MIN <= -9223372036854775808LL");
+
+ // INT_FASTN_MAX
+ static_assert(INT_FAST8_MAX >= 127, "INT_FAST8_MAX >= 127");
+ static_assert(INT_FAST16_MAX >= 32767, "INT_FAST16_MAX >= 32767");
+ static_assert(INT_FAST32_MAX >= 2147483647, "INT_FAST32_MAX >= 2147483647");
+ static_assert(INT_FAST64_MAX >= 9223372036854775807LL, "INT_FAST64_MAX >= 9223372036854775807LL");
+
+ // UINT_FASTN_MAX
+ static_assert(UINT_FAST8_MAX >= 255, "UINT_FAST8_MAX >= 255");
+ static_assert(UINT_FAST16_MAX >= 65535, "UINT_FAST16_MAX >= 65535");
+ static_assert(UINT_FAST32_MAX >= 4294967295U, "UINT_FAST32_MAX >= 4294967295");
+ static_assert(UINT_FAST64_MAX >= 18446744073709551615ULL, "UINT_FAST64_MAX >= 18446744073709551615ULL");
+
+ // INTPTR_MIN
+ assert(INTPTR_MIN == std::numeric_limits<std::intptr_t>::min());
+
+ // INTPTR_MAX
+ assert(INTPTR_MAX == std::numeric_limits<std::intptr_t>::max());
+
+ // UINTPTR_MAX
+ assert(UINTPTR_MAX == std::numeric_limits<std::uintptr_t>::max());
+
+ // INTMAX_MIN
+ assert(INTMAX_MIN == std::numeric_limits<std::intmax_t>::min());
+
+ // INTMAX_MAX
+ assert(INTMAX_MAX == std::numeric_limits<std::intmax_t>::max());
+
+ // UINTMAX_MAX
+ assert(UINTMAX_MAX == std::numeric_limits<std::uintmax_t>::max());
+
+ // PTRDIFF_MIN
+ assert(PTRDIFF_MIN == std::numeric_limits<std::ptrdiff_t>::min());
+
+ // PTRDIFF_MAX
+ assert(PTRDIFF_MAX == std::numeric_limits<std::ptrdiff_t>::max());
+
+ // SIG_ATOMIC_MIN
+ assert(SIG_ATOMIC_MIN == std::numeric_limits<std::sig_atomic_t>::min());
+
+ // SIG_ATOMIC_MAX
+ assert(SIG_ATOMIC_MAX == std::numeric_limits<std::sig_atomic_t>::max());
+
+ // SIZE_MAX
+ assert(SIZE_MAX == std::numeric_limits<std::size_t>::max());
+
+ // WCHAR_MIN
+ assert(WCHAR_MIN == std::numeric_limits<wchar_t>::min());
+
+ // WCHAR_MAX
+ assert(WCHAR_MAX == std::numeric_limits<wchar_t>::max());
+
+ // WINT_MIN
+ assert(WINT_MIN == std::numeric_limits<std::wint_t>::min());
+
+ // WINT_MAX
+ assert(WINT_MAX == std::numeric_limits<std::wint_t>::max());
+
+#ifndef INT8_C
+#error INT8_C not defined
+#endif
+
+#ifndef INT16_C
+#error INT16_C not defined
+#endif
+
+#ifndef INT32_C
+#error INT32_C not defined
+#endif
+
+#ifndef INT64_C
+#error INT64_C not defined
+#endif
+
+#ifndef UINT8_C
+#error UINT8_C not defined
+#endif
+
+#ifndef UINT16_C
+#error UINT16_C not defined
+#endif
+
+#ifndef UINT32_C
+#error UINT32_C not defined
+#endif
+
+#ifndef UINT64_C
+#error UINT64_C not defined
+#endif
+
+#ifndef INTMAX_C
+#error INTMAX_C not defined
+#endif
+
+#ifndef UINTMAX_C
+#error UINTMAX_C not defined
+#endif
+}
diff --git a/libcxx/test/language.support/cstdint/version.pass.cpp b/libcxx/test/language.support/cstdint/version.pass.cpp
new file mode 100644
index 00000000000..d8421704dc2
--- /dev/null
+++ b/libcxx/test/language.support/cstdint/version.pass.cpp
@@ -0,0 +1,20 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <cstdint>
+
+#include <cstdint>
+
+#ifndef _LIBCPP_VERSION
+#error _LIBCPP_VERSION not defined
+#endif
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/nothing_to_do.pass.cpp b/libcxx/test/language.support/nothing_to_do.pass.cpp
new file mode 100644
index 00000000000..fa4d462f18d
--- /dev/null
+++ b/libcxx/test/language.support/nothing_to_do.pass.cpp
@@ -0,0 +1,12 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.dynamic/alloc.errors/bad.alloc/bad_alloc.pass.cpp b/libcxx/test/language.support/support.dynamic/alloc.errors/bad.alloc/bad_alloc.pass.cpp
new file mode 100644
index 00000000000..7ca8b800dd9
--- /dev/null
+++ b/libcxx/test/language.support/support.dynamic/alloc.errors/bad.alloc/bad_alloc.pass.cpp
@@ -0,0 +1,27 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test bad_alloc
+
+#include <new>
+#include <type_traits>
+#include <cassert>
+
+int main()
+{
+ static_assert((std::is_base_of<std::exception, std::bad_alloc>::value),
+ "std::is_base_of<std::exception, std::bad_alloc>::value");
+ static_assert(std::is_polymorphic<std::bad_alloc>::value,
+ "std::is_polymorphic<std::bad_alloc>::value");
+ std::bad_alloc b;
+ std::bad_alloc b2 = b;
+ b2 = b;
+ const char* w = b2.what();
+ assert(w);
+}
diff --git a/libcxx/test/language.support/support.dynamic/alloc.errors/new.badlength/bad_array_new_length.pass.cpp b/libcxx/test/language.support/support.dynamic/alloc.errors/new.badlength/bad_array_new_length.pass.cpp
new file mode 100644
index 00000000000..bc4a6cdb4a2
--- /dev/null
+++ b/libcxx/test/language.support/support.dynamic/alloc.errors/new.badlength/bad_array_new_length.pass.cpp
@@ -0,0 +1,27 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test bad_array_new_length
+
+#include <new>
+#include <type_traits>
+#include <cassert>
+
+int main()
+{
+ static_assert((std::is_base_of<std::bad_alloc, std::bad_array_new_length>::value),
+ "std::is_base_of<std::bad_alloc, std::bad_array_new_length>::value");
+ static_assert(std::is_polymorphic<std::bad_array_new_length>::value,
+ "std::is_polymorphic<std::bad_array_new_length>::value");
+ std::bad_array_new_length b;
+ std::bad_array_new_length b2 = b;
+ b2 = b;
+ const char* w = b2.what();
+ assert(w);
+}
diff --git a/libcxx/test/language.support/support.dynamic/alloc.errors/new.handler/new_handler.pass.cpp b/libcxx/test/language.support/support.dynamic/alloc.errors/new.handler/new_handler.pass.cpp
new file mode 100644
index 00000000000..82ea243597d
--- /dev/null
+++ b/libcxx/test/language.support/support.dynamic/alloc.errors/new.handler/new_handler.pass.cpp
@@ -0,0 +1,19 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test new_handler
+
+#include <new>
+
+void f() {}
+
+int main()
+{
+ std::new_handler p = f;
+}
diff --git a/libcxx/test/language.support/support.dynamic/alloc.errors/nothing_to_do.pass.cpp b/libcxx/test/language.support/support.dynamic/alloc.errors/nothing_to_do.pass.cpp
new file mode 100644
index 00000000000..fa4d462f18d
--- /dev/null
+++ b/libcxx/test/language.support/support.dynamic/alloc.errors/nothing_to_do.pass.cpp
@@ -0,0 +1,12 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.dynamic/alloc.errors/set.new.handler/set_new_handler.pass.cpp b/libcxx/test/language.support/support.dynamic/alloc.errors/set.new.handler/set_new_handler.pass.cpp
new file mode 100644
index 00000000000..6b7949d4f98
--- /dev/null
+++ b/libcxx/test/language.support/support.dynamic/alloc.errors/set.new.handler/set_new_handler.pass.cpp
@@ -0,0 +1,22 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test set_new_handler
+
+#include <new>
+#include <cassert>
+
+void f1() {}
+void f2() {}
+
+int main()
+{
+ assert(std::set_new_handler(f1) == 0);
+ assert(std::set_new_handler(f2) == f1);
+}
diff --git a/libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array.pass.cpp b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array.pass.cpp
new file mode 100644
index 00000000000..639607345f4
--- /dev/null
+++ b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array.pass.cpp
@@ -0,0 +1,54 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+ // test operator new[]
+
+#include <new>
+#include <cstddef>
+#include <cassert>
+#include <limits>
+
+int new_handler_called = 0;
+
+void new_handler()
+{
+ ++new_handler_called;
+ std::set_new_handler(0);
+}
+
+int A_constructed = 0;
+
+struct A
+{
+ A() {++A_constructed;}
+ ~A() {--A_constructed;}
+};
+
+int main()
+{
+ std::set_new_handler(new_handler);
+ try
+ {
+ void* vp = operator new[] (std::numeric_limits<std::size_t>::max());
+ assert(false);
+ }
+ catch (std::bad_alloc&)
+ {
+ assert(new_handler_called == 1);
+ }
+ catch (...)
+ {
+ assert(false);
+ }
+ A* ap = new A[3];
+ assert(ap);
+ assert(A_constructed == 3);
+ delete [] ap;
+ assert(A_constructed == 0);
+}
diff --git a/libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array_nothrow.pass.cpp b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array_nothrow.pass.cpp
new file mode 100644
index 00000000000..182de18706a
--- /dev/null
+++ b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array_nothrow.pass.cpp
@@ -0,0 +1,51 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+ // test operator new [] (nothrow)
+
+#include <new>
+#include <cstddef>
+#include <cassert>
+#include <limits>
+
+int new_handler_called = 0;
+
+void new_handler()
+{
+ ++new_handler_called;
+ std::set_new_handler(0);
+}
+
+int A_constructed = 0;
+
+struct A
+{
+ A() {++A_constructed;}
+ ~A() {--A_constructed;}
+};
+
+int main()
+{
+ std::set_new_handler(new_handler);
+ try
+ {
+ void* vp = operator new [] (std::numeric_limits<std::size_t>::max(), std::nothrow);
+ assert(new_handler_called == 1);
+ assert(vp == 0);
+ }
+ catch (...)
+ {
+ assert(false);
+ }
+ A* ap = new(std::nothrow) A[3];
+ assert(ap);
+ assert(A_constructed == 3);
+ delete [] ap;
+ assert(A_constructed == 0);
+}
diff --git a/libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array_nothrow_replace.pass.cpp b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array_nothrow_replace.pass.cpp
new file mode 100644
index 00000000000..d06516c1fa6
--- /dev/null
+++ b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array_nothrow_replace.pass.cpp
@@ -0,0 +1,49 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+ // test operator new [] nothrow by replacing only operator new
+
+#include <new>
+#include <cstddef>
+#include <cstdlib>
+#include <cassert>
+#include <limits>
+
+int new_called = 0;
+
+void* operator new(std::size_t s) throw(std::bad_alloc)
+{
+ ++new_called;
+ return std::malloc(s);
+}
+
+void operator delete(void* p) throw()
+{
+ --new_called;
+ std::free(p);
+}
+
+int A_constructed = 0;
+
+struct A
+{
+ A() {++A_constructed;}
+ ~A() {--A_constructed;}
+};
+
+int main()
+{
+ A* ap = new (std::nothrow) A[3];
+ assert(ap);
+ assert(A_constructed == 3);
+ assert(new_called);
+ delete [] ap;
+ assert(A_constructed == 0);
+ assert(!new_called);
+}
diff --git a/libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array_replace.pass.cpp b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array_replace.pass.cpp
new file mode 100644
index 00000000000..f673e05d0fb
--- /dev/null
+++ b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array_replace.pass.cpp
@@ -0,0 +1,49 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+ // test operator new[] replacement by replacing only operator new
+
+#include <new>
+#include <cstddef>
+#include <cstdlib>
+#include <cassert>
+#include <limits>
+
+int new_called = 0;
+
+void* operator new(std::size_t s) throw(std::bad_alloc)
+{
+ ++new_called;
+ return std::malloc(s);
+}
+
+void operator delete(void* p) throw()
+{
+ --new_called;
+ std::free(p);
+}
+
+int A_constructed = 0;
+
+struct A
+{
+ A() {++A_constructed;}
+ ~A() {--A_constructed;}
+};
+
+int main()
+{
+ A* ap = new A[3];
+ assert(ap);
+ assert(A_constructed == 3);
+ assert(new_called == 1);
+ delete [] ap;
+ assert(A_constructed == 0);
+ assert(new_called == 0);
+}
diff --git a/libcxx/test/language.support/support.dynamic/new.delete/new.delete.dataraces/not_testable.pass.cpp b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.dataraces/not_testable.pass.cpp
new file mode 100644
index 00000000000..fa4d462f18d
--- /dev/null
+++ b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.dataraces/not_testable.pass.cpp
@@ -0,0 +1,12 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.dynamic/new.delete/new.delete.placement/new.pass.cpp b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.placement/new.pass.cpp
new file mode 100644
index 00000000000..075bd39972a
--- /dev/null
+++ b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.placement/new.pass.cpp
@@ -0,0 +1,30 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test placement new
+
+#include <new>
+#include <cassert>
+
+int A_constructed = 0;
+
+struct A
+{
+ A() {++A_constructed;}
+ ~A() {--A_constructed;}
+};
+
+int main()
+{
+ char buf[sizeof(A)];
+
+ A* ap = new(buf) A;
+ assert((char*)ap == buf);
+ assert(A_constructed == 1);
+}
diff --git a/libcxx/test/language.support/support.dynamic/new.delete/new.delete.placement/new_array.pass.cpp b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.placement/new_array.pass.cpp
new file mode 100644
index 00000000000..0179852c00e
--- /dev/null
+++ b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.placement/new_array.pass.cpp
@@ -0,0 +1,30 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test placement new array
+
+#include <new>
+#include <cassert>
+
+int A_constructed = 0;
+
+struct A
+{
+ A() {++A_constructed;}
+ ~A() {--A_constructed;}
+};
+
+int main()
+{
+ char buf[3*sizeof(A)];
+
+ A* ap = new(buf) A[3];
+ assert((char*)ap == buf);
+ assert(A_constructed == 3);
+}
diff --git a/libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new.pass.cpp b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new.pass.cpp
new file mode 100644
index 00000000000..54ac1196b74
--- /dev/null
+++ b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new.pass.cpp
@@ -0,0 +1,54 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+ // test operator new
+
+#include <new>
+#include <cstddef>
+#include <cassert>
+#include <limits>
+
+int new_handler_called = 0;
+
+void new_handler()
+{
+ ++new_handler_called;
+ std::set_new_handler(0);
+}
+
+bool A_constructed = false;
+
+struct A
+{
+ A() {A_constructed = true;}
+ ~A() {A_constructed = false;}
+};
+
+int main()
+{
+ std::set_new_handler(new_handler);
+ try
+ {
+ void* vp = operator new (std::numeric_limits<std::size_t>::max());
+ assert(false);
+ }
+ catch (std::bad_alloc&)
+ {
+ assert(new_handler_called == 1);
+ }
+ catch (...)
+ {
+ assert(false);
+ }
+ A* ap = new A;
+ assert(ap);
+ assert(A_constructed);
+ delete ap;
+ assert(!A_constructed);
+}
diff --git a/libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new_nothrow.pass.cpp b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new_nothrow.pass.cpp
new file mode 100644
index 00000000000..edbd80268e9
--- /dev/null
+++ b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new_nothrow.pass.cpp
@@ -0,0 +1,51 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+ // test operator new (nothrow)
+
+#include <new>
+#include <cstddef>
+#include <cassert>
+#include <limits>
+
+int new_handler_called = 0;
+
+void new_handler()
+{
+ ++new_handler_called;
+ std::set_new_handler(0);
+}
+
+bool A_constructed = false;
+
+struct A
+{
+ A() {A_constructed = true;}
+ ~A() {A_constructed = false;}
+};
+
+int main()
+{
+ std::set_new_handler(new_handler);
+ try
+ {
+ void* vp = operator new (std::numeric_limits<std::size_t>::max(), std::nothrow);
+ assert(new_handler_called == 1);
+ assert(vp == 0);
+ }
+ catch (...)
+ {
+ assert(false);
+ }
+ A* ap = new(std::nothrow) A;
+ assert(ap);
+ assert(A_constructed);
+ delete ap;
+ assert(!A_constructed);
+}
diff --git a/libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new_nothrow_replace.pass.cpp b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new_nothrow_replace.pass.cpp
new file mode 100644
index 00000000000..4ee05d5a27c
--- /dev/null
+++ b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new_nothrow_replace.pass.cpp
@@ -0,0 +1,49 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+ // test operator new nothrow by replacing only operator new
+
+#include <new>
+#include <cstddef>
+#include <cstdlib>
+#include <cassert>
+#include <limits>
+
+int new_called = 0;
+
+void* operator new(std::size_t s) throw(std::bad_alloc)
+{
+ ++new_called;
+ return std::malloc(s);
+}
+
+void operator delete(void* p) throw()
+{
+ --new_called;
+ std::free(p);
+}
+
+bool A_constructed = false;
+
+struct A
+{
+ A() {A_constructed = true;}
+ ~A() {A_constructed = false;}
+};
+
+int main()
+{
+ A* ap = new (std::nothrow) A;
+ assert(ap);
+ assert(A_constructed);
+ assert(new_called);
+ delete ap;
+ assert(!A_constructed);
+ assert(!new_called);
+}
diff --git a/libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new_replace.pass.cpp b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new_replace.pass.cpp
new file mode 100644
index 00000000000..1d35f200f63
--- /dev/null
+++ b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new_replace.pass.cpp
@@ -0,0 +1,49 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+ // test operator new replacement
+
+#include <new>
+#include <cstddef>
+#include <cstdlib>
+#include <cassert>
+#include <limits>
+
+int new_called = 0;
+
+void* operator new(std::size_t s) throw(std::bad_alloc)
+{
+ ++new_called;
+ return std::malloc(s);
+}
+
+void operator delete(void* p) throw()
+{
+ --new_called;
+ std::free(p);
+}
+
+bool A_constructed = false;
+
+struct A
+{
+ A() {A_constructed = true;}
+ ~A() {A_constructed = false;}
+};
+
+int main()
+{
+ A* ap = new A;
+ assert(ap);
+ assert(A_constructed);
+ assert(new_called);
+ delete ap;
+ assert(!A_constructed);
+ assert(!new_called);
+}
diff --git a/libcxx/test/language.support/support.dynamic/new.delete/nothing_to_do.pass.cpp b/libcxx/test/language.support/support.dynamic/new.delete/nothing_to_do.pass.cpp
new file mode 100644
index 00000000000..fa4d462f18d
--- /dev/null
+++ b/libcxx/test/language.support/support.dynamic/new.delete/nothing_to_do.pass.cpp
@@ -0,0 +1,12 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.dynamic/version.pass.cpp b/libcxx/test/language.support/support.dynamic/version.pass.cpp
new file mode 100644
index 00000000000..32273803572
--- /dev/null
+++ b/libcxx/test/language.support/support.dynamic/version.pass.cpp
@@ -0,0 +1,20 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <new>
+
+#include <new>
+
+#ifndef _LIBCPP_VERSION
+#error _LIBCPP_VERSION not defined
+#endif
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.exception/exception.terminate/nothing_to_do.pass.cpp b/libcxx/test/language.support/support.exception/exception.terminate/nothing_to_do.pass.cpp
new file mode 100644
index 00000000000..fa4d462f18d
--- /dev/null
+++ b/libcxx/test/language.support/support.exception/exception.terminate/nothing_to_do.pass.cpp
@@ -0,0 +1,12 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.exception/exception.terminate/set.terminate/set_terminate.pass.cpp b/libcxx/test/language.support/support.exception/exception.terminate/set.terminate/set_terminate.pass.cpp
new file mode 100644
index 00000000000..21de6f285c0
--- /dev/null
+++ b/libcxx/test/language.support/support.exception/exception.terminate/set.terminate/set_terminate.pass.cpp
@@ -0,0 +1,23 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test set_terminate
+
+#include <exception>
+#include <cstdlib>
+#include <cassert>
+
+void f1() {}
+void f2() {}
+
+int main()
+{
+ std::set_terminate(f1);
+ assert(std::set_terminate(f2) == f1);
+}
diff --git a/libcxx/test/language.support/support.exception/exception.terminate/terminate.handler/terminate_handler.pass.cpp b/libcxx/test/language.support/support.exception/exception.terminate/terminate.handler/terminate_handler.pass.cpp
new file mode 100644
index 00000000000..0a3a4573319
--- /dev/null
+++ b/libcxx/test/language.support/support.exception/exception.terminate/terminate.handler/terminate_handler.pass.cpp
@@ -0,0 +1,19 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test terminate_handler
+
+#include <exception>
+
+void f() {}
+
+int main()
+{
+ std::terminate_handler p = f;
+}
diff --git a/libcxx/test/language.support/support.exception/exception.terminate/terminate/terminate.pass.cpp b/libcxx/test/language.support/support.exception/exception.terminate/terminate/terminate.pass.cpp
new file mode 100644
index 00000000000..b34051d9ed6
--- /dev/null
+++ b/libcxx/test/language.support/support.exception/exception.terminate/terminate/terminate.pass.cpp
@@ -0,0 +1,26 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test terminate
+
+#include <exception>
+#include <cstdlib>
+#include <cassert>
+
+void f1()
+{
+ std::exit(0);
+}
+
+int main()
+{
+ std::set_terminate(f1);
+ std::terminate();
+ assert(false);
+}
diff --git a/libcxx/test/language.support/support.exception/exception.unexpected/bad.exception/bad_exception.pass.cpp b/libcxx/test/language.support/support.exception/exception.unexpected/bad.exception/bad_exception.pass.cpp
new file mode 100644
index 00000000000..9f32dac7e75
--- /dev/null
+++ b/libcxx/test/language.support/support.exception/exception.unexpected/bad.exception/bad_exception.pass.cpp
@@ -0,0 +1,27 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test bad_exception
+
+#include <exception>
+#include <type_traits>
+#include <cassert>
+
+int main()
+{
+ static_assert((std::is_base_of<std::exception, std::bad_exception>::value),
+ "std::is_base_of<std::exception, std::bad_exception>::value");
+ static_assert(std::is_polymorphic<std::bad_exception>::value,
+ "std::is_polymorphic<std::bad_exception>::value");
+ std::bad_exception b;
+ std::bad_exception b2 = b;
+ b2 = b;
+ const char* w = b2.what();
+ assert(w);
+}
diff --git a/libcxx/test/language.support/support.exception/exception.unexpected/nothing_to_do.pass.cpp b/libcxx/test/language.support/support.exception/exception.unexpected/nothing_to_do.pass.cpp
new file mode 100644
index 00000000000..fa4d462f18d
--- /dev/null
+++ b/libcxx/test/language.support/support.exception/exception.unexpected/nothing_to_do.pass.cpp
@@ -0,0 +1,12 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.exception/exception.unexpected/set.unexpected/set_unexpected.pass.cpp b/libcxx/test/language.support/support.exception/exception.unexpected/set.unexpected/set_unexpected.pass.cpp
new file mode 100644
index 00000000000..6f52ab772aa
--- /dev/null
+++ b/libcxx/test/language.support/support.exception/exception.unexpected/set.unexpected/set_unexpected.pass.cpp
@@ -0,0 +1,22 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test set_unexpected
+
+#include <exception>
+#include <cassert>
+
+void f1() {}
+void f2() {}
+
+int main()
+{
+ assert(std::set_unexpected(f1) == std::terminate);
+ assert(std::set_unexpected(f2) == f1);
+}
diff --git a/libcxx/test/language.support/support.exception/exception.unexpected/unexpected.handler/unexpected_handler.pass.cpp b/libcxx/test/language.support/support.exception/exception.unexpected/unexpected.handler/unexpected_handler.pass.cpp
new file mode 100644
index 00000000000..dbb56069d48
--- /dev/null
+++ b/libcxx/test/language.support/support.exception/exception.unexpected/unexpected.handler/unexpected_handler.pass.cpp
@@ -0,0 +1,19 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test unexpected_handler
+
+#include <exception>
+
+void f() {}
+
+int main()
+{
+ std::unexpected_handler p = f;
+}
diff --git a/libcxx/test/language.support/support.exception/exception.unexpected/unexpected/unexpected.pass.cpp b/libcxx/test/language.support/support.exception/exception.unexpected/unexpected/unexpected.pass.cpp
new file mode 100644
index 00000000000..0f441e2b6e7
--- /dev/null
+++ b/libcxx/test/language.support/support.exception/exception.unexpected/unexpected/unexpected.pass.cpp
@@ -0,0 +1,26 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test unexpected
+
+#include <exception>
+#include <cstdlib>
+#include <cassert>
+
+void f1()
+{
+ std::exit(0);
+}
+
+int main()
+{
+ std::set_unexpected(f1);
+ std::unexpected();
+ assert(false);
+}
diff --git a/libcxx/test/language.support/support.exception/exception/exception.pass.cpp b/libcxx/test/language.support/support.exception/exception/exception.pass.cpp
new file mode 100644
index 00000000000..d3ad7e4b280
--- /dev/null
+++ b/libcxx/test/language.support/support.exception/exception/exception.pass.cpp
@@ -0,0 +1,25 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test exception
+
+#include <exception>
+#include <type_traits>
+#include <cassert>
+
+int main()
+{
+ static_assert(std::is_polymorphic<std::exception>::value,
+ "std::is_polymorphic<std::exception>::value");
+ std::exception b;
+ std::exception b2 = b;
+ b2 = b;
+ const char* w = b2.what();
+ assert(w);
+}
diff --git a/libcxx/test/language.support/support.exception/propagation/current_exception.pass.cpp b/libcxx/test/language.support/support.exception/propagation/current_exception.pass.cpp
new file mode 100644
index 00000000000..95ba458df49
--- /dev/null
+++ b/libcxx/test/language.support/support.exception/propagation/current_exception.pass.cpp
@@ -0,0 +1,269 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <exception>
+
+// exception_ptr current_exception();
+
+#include <exception>
+#include <cassert>
+
+struct A
+{
+ static int constructed;
+
+ A() {++constructed;}
+ ~A() {--constructed;}
+ A(const A&) {++constructed;}
+};
+
+int A::constructed = 0;
+
+int main()
+{
+ {
+ std::exception_ptr p = std::current_exception();
+ assert(p == nullptr);
+ }
+ {
+ try
+ {
+ assert(A::constructed == 0);
+ throw A();
+ assert(false);
+ }
+ catch (...)
+ {
+ assert(A::constructed == 1);
+ }
+ assert(A::constructed == 0);
+ }
+ assert(A::constructed == 0);
+ {
+ std::exception_ptr p2;
+ try
+ {
+ assert(A::constructed == 0);
+ throw A();
+ assert(false);
+ }
+ catch (...)
+ {
+ std::exception_ptr p = std::current_exception();
+ assert(A::constructed == 1);
+ assert(p != nullptr);
+ p2 = std::current_exception();
+ assert(A::constructed == 1);
+ assert(p == p2);
+ }
+ assert(A::constructed == 1);
+ }
+ assert(A::constructed == 0);
+ {
+ std::exception_ptr p2;
+ try
+ {
+ assert(A::constructed == 0);
+ throw A();
+ assert(false);
+ }
+ catch (A& a)
+ {
+ std::exception_ptr p = std::current_exception();
+ assert(A::constructed == 1);
+ assert(p != nullptr);
+ p2 = std::current_exception();
+ assert(A::constructed == 1);
+ assert(p == p2);
+ }
+ assert(A::constructed == 1);
+ }
+ assert(A::constructed == 0);
+ {
+ std::exception_ptr p2;
+ try
+ {
+ assert(A::constructed == 0);
+ throw A();
+ assert(false);
+ }
+ catch (A a)
+ {
+ std::exception_ptr p = std::current_exception();
+ assert(A::constructed == 2);
+ assert(p != nullptr);
+ p2 = std::current_exception();
+ assert(A::constructed == 2);
+ assert(p == p2);
+ }
+ assert(A::constructed == 1);
+ }
+ assert(A::constructed == 0);
+ {
+ try
+ {
+ assert(A::constructed == 0);
+ throw A();
+ assert(false);
+ }
+ catch (...)
+ {
+ assert(A::constructed == 1);
+ try
+ {
+ assert(A::constructed == 1);
+ throw;
+ assert(false);
+ }
+ catch (...)
+ {
+ assert(A::constructed == 1);
+ }
+ assert(A::constructed == 1);
+ }
+ assert(A::constructed == 0);
+ }
+ assert(A::constructed == 0);
+ {
+ try
+ {
+ assert(A::constructed == 0);
+ throw A();
+ assert(false);
+ }
+ catch (...)
+ {
+ assert(A::constructed == 1);
+ try
+ {
+ std::exception_ptr p = std::current_exception();
+ assert(A::constructed == 1);
+ assert(p != nullptr);
+ throw;
+ assert(false);
+ }
+ catch (...)
+ {
+ assert(A::constructed == 1);
+ }
+ assert(A::constructed == 1);
+ }
+ assert(A::constructed == 0);
+ }
+ assert(A::constructed == 0);
+ {
+ try
+ {
+ assert(A::constructed == 0);
+ throw A();
+ assert(false);
+ }
+ catch (...)
+ {
+ assert(A::constructed == 1);
+ try
+ {
+ assert(A::constructed == 1);
+ throw;
+ assert(false);
+ }
+ catch (...)
+ {
+ std::exception_ptr p = std::current_exception();
+ assert(A::constructed == 1);
+ assert(p != nullptr);
+ }
+ assert(A::constructed == 1);
+ }
+ assert(A::constructed == 0);
+ }
+ assert(A::constructed == 0);
+ {
+ try
+ {
+ assert(A::constructed == 0);
+ throw A();
+ assert(false);
+ }
+ catch (...)
+ {
+ assert(A::constructed == 1);
+ try
+ {
+ assert(A::constructed == 1);
+ throw;
+ assert(false);
+ }
+ catch (...)
+ {
+ assert(A::constructed == 1);
+ }
+ std::exception_ptr p = std::current_exception();
+ assert(A::constructed == 1);
+ assert(p != nullptr);
+ }
+ assert(A::constructed == 0);
+ }
+ assert(A::constructed == 0);
+ {
+ try
+ {
+ assert(A::constructed == 0);
+ throw A();
+ assert(false);
+ }
+ catch (...)
+ {
+ assert(A::constructed == 1);
+ try
+ {
+ assert(A::constructed == 1);
+ throw;
+ assert(false);
+ }
+ catch (...)
+ {
+ assert(A::constructed == 1);
+ }
+ assert(A::constructed == 1);
+ }
+ std::exception_ptr p = std::current_exception();
+ assert(A::constructed == 0);
+ assert(p == nullptr);
+ }
+ assert(A::constructed == 0);
+ {
+ std::exception_ptr p;
+ try
+ {
+ assert(A::constructed == 0);
+ throw A();
+ assert(false);
+ }
+ catch (...)
+ {
+ assert(A::constructed == 1);
+ try
+ {
+ assert(A::constructed == 1);
+ throw;
+ assert(false);
+ }
+ catch (...)
+ {
+ p = std::current_exception();
+ assert(A::constructed == 1);
+ }
+ assert(A::constructed == 1);
+ }
+ assert(A::constructed == 1);
+ assert(p != nullptr);
+ }
+ assert(A::constructed == 0);
+}
diff --git a/libcxx/test/language.support/support.exception/propagation/exception_ptr.pass.cpp b/libcxx/test/language.support/support.exception/propagation/exception_ptr.pass.cpp
new file mode 100644
index 00000000000..6c017688bce
--- /dev/null
+++ b/libcxx/test/language.support/support.exception/propagation/exception_ptr.pass.cpp
@@ -0,0 +1,34 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <exception>
+
+// typedef unspecified exception_ptr;
+
+// exception_ptr shall satisfy the requirements of NullablePointer.
+
+#include <exception>
+#include <cassert>
+
+int main()
+{
+ std::exception_ptr p;
+ assert(p == nullptr);
+ std::exception_ptr p2 = p;
+ assert(nullptr == p);
+ assert(!p);
+ assert(p2 == p);
+ p2 = p;
+ assert(p2 == p);
+ assert(p2 == nullptr);
+ std::exception_ptr p3 = nullptr;
+ assert(p3 == nullptr);
+ p3 = nullptr;
+ assert(p3 == nullptr);
+}
diff --git a/libcxx/test/language.support/support.exception/propagation/make_exception_ptr.pass.cpp b/libcxx/test/language.support/support.exception/propagation/make_exception_ptr.pass.cpp
new file mode 100644
index 00000000000..794199fa567
--- /dev/null
+++ b/libcxx/test/language.support/support.exception/propagation/make_exception_ptr.pass.cpp
@@ -0,0 +1,49 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <exception>
+
+// template<class E> exception_ptr make_exception_ptr(E e);
+
+#include <exception>
+#include <cassert>
+
+struct A
+{
+ static int constructed;
+ int data_;
+
+ A(int data = 0) : data_(data) {++constructed;}
+ ~A() {--constructed;}
+ A(const A& a) : data_(a.data_) {++constructed;}
+};
+
+int A::constructed = 0;
+
+int main()
+{
+ {
+ std::exception_ptr p = std::make_exception_ptr(A(5));
+ try
+ {
+ std::rethrow_exception(p);
+ assert(false);
+ }
+ catch (const A& a)
+ {
+ assert(A::constructed == 1);
+ assert(p != nullptr);
+ p = nullptr;
+ assert(p == nullptr);
+ assert(a.data_ == 5);
+ assert(A::constructed == 1);
+ }
+ assert(A::constructed == 0);
+ }
+}
diff --git a/libcxx/test/language.support/support.exception/propagation/rethrow_exception.pass.cpp b/libcxx/test/language.support/support.exception/propagation/rethrow_exception.pass.cpp
new file mode 100644
index 00000000000..6cb19f709fa
--- /dev/null
+++ b/libcxx/test/language.support/support.exception/propagation/rethrow_exception.pass.cpp
@@ -0,0 +1,57 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <exception>
+
+// void rethrow_exception [[noreturn]] (exception_ptr p);
+
+#include <exception>
+#include <cassert>
+
+struct A
+{
+ static int constructed;
+ int data_;
+
+ A(int data = 0) : data_(data) {++constructed;}
+ ~A() {--constructed;}
+ A(const A& a) : data_(a.data_) {++constructed;}
+};
+
+int A::constructed = 0;
+
+int main()
+{
+ {
+ std::exception_ptr p;
+ try
+ {
+ throw A(3);
+ }
+ catch (...)
+ {
+ p = std::current_exception();
+ }
+ try
+ {
+ std::rethrow_exception(p);
+ assert(false);
+ }
+ catch (const A& a)
+ {
+ assert(A::constructed == 1);
+ assert(p != nullptr);
+ p = nullptr;
+ assert(p == nullptr);
+ assert(a.data_ == 3);
+ assert(A::constructed == 1);
+ }
+ assert(A::constructed == 0);
+ }
+}
diff --git a/libcxx/test/language.support/support.exception/uncaught/uncaught_exception.pass.cpp b/libcxx/test/language.support/support.exception/uncaught/uncaught_exception.pass.cpp
new file mode 100644
index 00000000000..33ee8770464
--- /dev/null
+++ b/libcxx/test/language.support/support.exception/uncaught/uncaught_exception.pass.cpp
@@ -0,0 +1,36 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test uncaught_exception
+
+#include <exception>
+#include <cassert>
+
+struct A
+{
+ ~A()
+ {
+ assert(std::uncaught_exception());
+ }
+};
+
+int main()
+{
+ try
+ {
+ A a;
+ assert(!std::uncaught_exception());
+ throw 1;
+ }
+ catch (...)
+ {
+ assert(!std::uncaught_exception());
+ }
+ assert(!std::uncaught_exception());
+}
diff --git a/libcxx/test/language.support/support.exception/version.pass.cpp b/libcxx/test/language.support/support.exception/version.pass.cpp
new file mode 100644
index 00000000000..db3013e9f11
--- /dev/null
+++ b/libcxx/test/language.support/support.exception/version.pass.cpp
@@ -0,0 +1,20 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <exception>
+
+#include <exception>
+
+#ifndef _LIBCPP_VERSION
+#error _LIBCPP_VERSION not defined
+#endif
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.general/nothing_to_do.pass.cpp b/libcxx/test/language.support/support.general/nothing_to_do.pass.cpp
new file mode 100644
index 00000000000..fa4d462f18d
--- /dev/null
+++ b/libcxx/test/language.support/support.general/nothing_to_do.pass.cpp
@@ -0,0 +1,12 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.initlist/support.initlist.access/access.pass.cpp b/libcxx/test/language.support/support.initlist/support.initlist.access/access.pass.cpp
new file mode 100644
index 00000000000..169d125e283
--- /dev/null
+++ b/libcxx/test/language.support/support.initlist/support.initlist.access/access.pass.cpp
@@ -0,0 +1,38 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// template<class E> class initializer_list;
+
+// const E* begin() const;
+// const E* end() const;
+// size_t size() const;
+
+#include <initializer_list>
+#include <cassert>
+
+struct A
+{
+ A(std::initializer_list<int> il)
+ {
+ const int* b = il.begin();
+ const int* e = il.end();
+ assert(il.size() == 3);
+ assert(e - b == il.size());
+ assert(*b++ == 3);
+ assert(*b++ == 2);
+ assert(*b++ == 1);
+ }
+};
+
+int main()
+{
+#ifdef _LIBCPP_MOVE
+ A test1 = {3, 2, 1};
+#endif
+}
diff --git a/libcxx/test/language.support/support.initlist/support.initlist.cons/default.pass.cpp b/libcxx/test/language.support/support.initlist/support.initlist.cons/default.pass.cpp
new file mode 100644
index 00000000000..f5147b9d1a2
--- /dev/null
+++ b/libcxx/test/language.support/support.initlist/support.initlist.cons/default.pass.cpp
@@ -0,0 +1,23 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// template<class E> class initializer_list;
+
+// initializer_list();
+
+#include <initializer_list>
+#include <cassert>
+
+struct A {};
+
+int main()
+{
+ std::initializer_list<A> il;
+ assert(il.size() == 0);
+}
diff --git a/libcxx/test/language.support/support.initlist/types.pass.cpp b/libcxx/test/language.support/support.initlist/types.pass.cpp
new file mode 100644
index 00000000000..c7af06e2890
--- /dev/null
+++ b/libcxx/test/language.support/support.initlist/types.pass.cpp
@@ -0,0 +1,35 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// template<class E>
+// class initializer_list
+// {
+// public:
+// typedef E value_type;
+// typedef const E& reference;
+// typedef const E& const_reference;
+// typedef size_t size_type;
+//
+// typedef const E* iterator;
+// typedef const E* const_iterator;
+
+#include <initializer_list>
+#include <type_traits>
+
+struct A {};
+
+int main()
+{
+ static_assert((std::is_same<std::initializer_list<A>::value_type, A>::value), "");
+ static_assert((std::is_same<std::initializer_list<A>::reference, const A&>::value), "");
+ static_assert((std::is_same<std::initializer_list<A>::const_reference, const A&>::value), "");
+ static_assert((std::is_same<std::initializer_list<A>::size_type, std::size_t>::value), "");
+ static_assert((std::is_same<std::initializer_list<A>::iterator, const A*>::value), "");
+ static_assert((std::is_same<std::initializer_list<A>::const_iterator, const A*>::value), "");
+}
diff --git a/libcxx/test/language.support/support.initlist/version.pass.cpp b/libcxx/test/language.support/support.initlist/version.pass.cpp
new file mode 100644
index 00000000000..bf36347f7c3
--- /dev/null
+++ b/libcxx/test/language.support/support.initlist/version.pass.cpp
@@ -0,0 +1,20 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <initializer_list>
+
+#include <initializer_list>
+
+#ifndef _LIBCPP_VERSION
+#error _LIBCPP_VERSION not defined
+#endif
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.limits/c.limits/cfloat.pass.cpp b/libcxx/test/language.support/support.limits/c.limits/cfloat.pass.cpp
new file mode 100644
index 00000000000..8ec63374779
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/c.limits/cfloat.pass.cpp
@@ -0,0 +1,140 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+ // test cfloat
+
+#include <cfloat>
+
+#ifndef FLT_ROUNDS
+#error FLT_ROUNDS not defined
+#endif
+
+#ifndef FLT_EVAL_METHOD
+#error FLT_EVAL_METHOD not defined
+#endif
+
+#ifndef FLT_RADIX
+#error FLT_RADIX not defined
+#endif
+
+#ifndef FLT_MANT_DIG
+#error FLT_MANT_DIG not defined
+#endif
+
+#ifndef DBL_MANT_DIG
+#error DBL_MANT_DIG not defined
+#endif
+
+#ifndef LDBL_MANT_DIG
+#error LDBL_MANT_DIG not defined
+#endif
+
+#ifndef DECIMAL_DIG
+#error DECIMAL_DIG not defined
+#endif
+
+#ifndef FLT_DIG
+#error FLT_DIG not defined
+#endif
+
+#ifndef DBL_DIG
+#error DBL_DIG not defined
+#endif
+
+#ifndef LDBL_DIG
+#error LDBL_DIG not defined
+#endif
+
+#ifndef FLT_MIN_EXP
+#error FLT_MIN_EXP not defined
+#endif
+
+#ifndef DBL_MIN_EXP
+#error DBL_MIN_EXP not defined
+#endif
+
+#ifndef LDBL_MIN_EXP
+#error LDBL_MIN_EXP not defined
+#endif
+
+#ifndef FLT_MIN_10_EXP
+#error FLT_MIN_10_EXP not defined
+#endif
+
+#ifndef DBL_MIN_10_EXP
+#error DBL_MIN_10_EXP not defined
+#endif
+
+#ifndef LDBL_MIN_10_EXP
+#error LDBL_MIN_10_EXP not defined
+#endif
+
+#ifndef FLT_MAX_EXP
+#error FLT_MAX_EXP not defined
+#endif
+
+#ifndef DBL_MAX_EXP
+#error DBL_MAX_EXP not defined
+#endif
+
+#ifndef LDBL_MAX_EXP
+#error LDBL_MAX_EXP not defined
+#endif
+
+#ifndef FLT_MAX_10_EXP
+#error FLT_MAX_10_EXP not defined
+#endif
+
+#ifndef DBL_MAX_10_EXP
+#error DBL_MAX_10_EXP not defined
+#endif
+
+#ifndef LDBL_MAX_10_EXP
+#error LDBL_MAX_10_EXP not defined
+#endif
+
+#ifndef FLT_MAX
+#error FLT_MAX not defined
+#endif
+
+#ifndef DBL_MAX
+#error DBL_MAX not defined
+#endif
+
+#ifndef LDBL_MAX
+#error LDBL_MAX not defined
+#endif
+
+#ifndef FLT_EPSILON
+#error FLT_EPSILON not defined
+#endif
+
+#ifndef DBL_EPSILON
+#error DBL_EPSILON not defined
+#endif
+
+#ifndef LDBL_EPSILON
+#error LDBL_EPSILON not defined
+#endif
+
+#ifndef FLT_MIN
+#error FLT_MIN not defined
+#endif
+
+#ifndef DBL_MIN
+#error DBL_MIN not defined
+#endif
+
+#ifndef LDBL_MIN
+#error LDBL_MIN not defined
+#endif
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.limits/c.limits/climits.pass.cpp b/libcxx/test/language.support/support.limits/c.limits/climits.pass.cpp
new file mode 100644
index 00000000000..265f2603cc7
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/c.limits/climits.pass.cpp
@@ -0,0 +1,92 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+ // test climits
+
+#include <climits>
+
+#ifndef CHAR_BIT
+#error CHAR_BIT not defined
+#endif
+
+#ifndef SCHAR_MIN
+#error SCHAR_MIN not defined
+#endif
+
+#ifndef SCHAR_MAX
+#error SCHAR_MAX not defined
+#endif
+
+#ifndef UCHAR_MAX
+#error UCHAR_MAX not defined
+#endif
+
+#ifndef CHAR_MIN
+#error CHAR_MIN not defined
+#endif
+
+#ifndef CHAR_MAX
+#error CHAR_MAX not defined
+#endif
+
+#ifndef MB_LEN_MAX
+#error MB_LEN_MAX not defined
+#endif
+
+#ifndef SHRT_MIN
+#error SHRT_MIN not defined
+#endif
+
+#ifndef SHRT_MAX
+#error SHRT_MAX not defined
+#endif
+
+#ifndef USHRT_MAX
+#error USHRT_MAX not defined
+#endif
+
+#ifndef INT_MIN
+#error INT_MIN not defined
+#endif
+
+#ifndef INT_MAX
+#error INT_MAX not defined
+#endif
+
+#ifndef UINT_MAX
+#error UINT_MAX not defined
+#endif
+
+#ifndef LONG_MIN
+#error LONG_MIN not defined
+#endif
+
+#ifndef LONG_MAX
+#error LONG_MAX not defined
+#endif
+
+#ifndef ULONG_MAX
+#error ULONG_MAX not defined
+#endif
+
+#ifndef LLONG_MIN
+#error LLONG_MIN not defined
+#endif
+
+#ifndef LLONG_MAX
+#error LLONG_MAX not defined
+#endif
+
+#ifndef ULLONG_MAX
+#error ULLONG_MAX not defined
+#endif
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.limits/c.limits/version_cfloat.pass.cpp b/libcxx/test/language.support/support.limits/c.limits/version_cfloat.pass.cpp
new file mode 100644
index 00000000000..c399be5f825
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/c.limits/version_cfloat.pass.cpp
@@ -0,0 +1,20 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <cfloat>
+
+#include <cfloat>
+
+#ifndef _LIBCPP_VERSION
+#error _LIBCPP_VERSION not defined
+#endif
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.limits/c.limits/version_climits.pass.cpp b/libcxx/test/language.support/support.limits/c.limits/version_climits.pass.cpp
new file mode 100644
index 00000000000..3ac5ea2d14c
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/c.limits/version_climits.pass.cpp
@@ -0,0 +1,20 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <climits>
+
+#include <climits>
+
+#ifndef _LIBCPP_VERSION
+#error _LIBCPP_VERSION not defined
+#endif
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.limits/limits/denorm.style/check_values.pass.cpp b/libcxx/test/language.support/support.limits/limits/denorm.style/check_values.pass.cpp
new file mode 100644
index 00000000000..029dfe17dc9
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/denorm.style/check_values.pass.cpp
@@ -0,0 +1,38 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// float_round_style
+
+#include <limits>
+
+typedef char one;
+struct two {one _[2];};
+
+one test(std::float_round_style);
+two test(int);
+
+int main()
+{
+ static_assert(std::round_indeterminate == -1,
+ "std::round_indeterminate == -1");
+ static_assert(std::round_toward_zero == 0,
+ "std::round_toward_zero == 0");
+ static_assert(std::round_to_nearest == 1,
+ "std::round_to_nearest == 1");
+ static_assert(std::round_toward_infinity == 2,
+ "std::round_toward_infinity == 2");
+ static_assert(std::round_toward_neg_infinity == 3,
+ "std::round_toward_neg_infinity == 3");
+ static_assert(sizeof(test(std::round_to_nearest)) == 1,
+ "sizeof(test(std::round_to_nearest)) == 1");
+ static_assert(sizeof(test(1)) == 2,
+ "sizeof(test(1)) == 2");
+}
diff --git a/libcxx/test/language.support/support.limits/limits/is_specialized.pass.cpp b/libcxx/test/language.support/support.limits/limits/is_specialized.pass.cpp
new file mode 100644
index 00000000000..490289e182e
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/is_specialized.pass.cpp
@@ -0,0 +1,67 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// Specializations shall be provided for each arithmetic type, both floating
+// point and integer, including bool. The member is_specialized shall be
+// true for all such specializations of numeric_limits.
+
+// Non-arithmetic standard types, such as complex<T> (26.3.2), shall not
+// have specializations.
+
+// From [numeric.limits]:
+
+// The value of each member of a specialization of numeric_limits on a cv
+// -qualified type cv T shall be equal to the value of the corresponding
+// member of the specialization on the unqualified type T.
+
+// More convenient to test it here.
+
+#include <limits>
+#include <complex>
+
+template <class T>
+void test()
+{
+ static_assert(std::numeric_limits<T>::is_specialized,
+ "std::numeric_limits<T>::is_specialized");
+ static_assert(std::numeric_limits<const T>::is_specialized,
+ "std::numeric_limits<const T>::is_specialized");
+ static_assert(std::numeric_limits<volatile T>::is_specialized,
+ "std::numeric_limits<volatile T>::is_specialized");
+ static_assert(std::numeric_limits<const volatile T>::is_specialized,
+ "std::numeric_limits<const volatile T>::is_specialized");
+}
+
+int main()
+{
+ test<bool>();
+ test<char>();
+ test<wchar_t>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t>();
+ test<char32_t>();
+#endif
+ test<signed char>();
+ test<unsigned char>();
+ test<signed short>();
+ test<unsigned short>();
+ test<signed int>();
+ test<unsigned int>();
+ test<signed long>();
+ test<unsigned long>();
+ test<signed long long>();
+ test<unsigned long long>();
+ test<float>();
+ test<double>();
+ test<long double>();
+ static_assert(!std::numeric_limits<std::complex<double> >::is_specialized,
+ "!std::numeric_limits<std::complex<double> >::is_specialized");
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/denorm_min.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/denorm_min.pass.cpp
new file mode 100644
index 00000000000..101fa757dae
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/denorm_min.pass.cpp
@@ -0,0 +1,49 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// denorm_min()
+
+#include <limits>
+#include <cassert>
+
+template <class T>
+void
+test(T expected)
+{
+ assert(std::numeric_limits<T>::denorm_min() == expected);
+ assert(std::numeric_limits<const T>::denorm_min() == expected);
+ assert(std::numeric_limits<volatile T>::denorm_min() == expected);
+ assert(std::numeric_limits<const volatile T>::denorm_min() == expected);
+}
+
+int main()
+{
+ test<bool>(false);
+ test<char>(0);
+ test<signed char>(0);
+ test<unsigned char>(0);
+ test<wchar_t>(0);
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t>(0);
+ test<char32_t>(0);
+#endif
+ test<short>(0);
+ test<unsigned short>(0);
+ test<int>(0);
+ test<unsigned int>(0);
+ test<long>(0);
+ test<unsigned long>(0);
+ test<long long>(0);
+ test<unsigned long long>(0);
+ test<float>(__FLT_DENORM_MIN__);
+ test<double>(__DBL_DENORM_MIN__);
+ test<long double>(__LDBL_DENORM_MIN__);
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/digits.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/digits.pass.cpp
new file mode 100644
index 00000000000..58337ece5fd
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/digits.pass.cpp
@@ -0,0 +1,49 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// digits
+
+#include <limits>
+#include <cfloat>
+
+template <class T, int expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::digits == expected, "digits test 1");
+ static_assert(std::numeric_limits<const T>::digits == expected, "digits test 2");
+ static_assert(std::numeric_limits<volatile T>::digits == expected, "digits test 3");
+ static_assert(std::numeric_limits<const volatile T>::digits == expected, "digits test 4");
+}
+
+int main()
+{
+ test<bool, 1>();
+ test<char, std::numeric_limits<char>::is_signed ? 7 : 8>();
+ test<signed char, 7>();
+ test<unsigned char, 8>();
+ test<wchar_t, std::numeric_limits<wchar_t>::is_signed ? 31 : 32>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, 16>();
+ test<char32_t, 32>();
+#endif
+ test<short, 15>();
+ test<unsigned short, 16>();
+ test<int, 31>();
+ test<unsigned int, 32>();
+ test<long, sizeof(long) == 4 ? 31 : 63>();
+ test<unsigned long, sizeof(long) == 4 ? 32 : 64>();
+ test<long long, 63>();
+ test<unsigned long long, 64>();
+ test<float, FLT_MANT_DIG>();
+ test<double, DBL_MANT_DIG>();
+ test<long double, LDBL_MANT_DIG>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/digits10.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/digits10.pass.cpp
new file mode 100644
index 00000000000..6012d23cf6e
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/digits10.pass.cpp
@@ -0,0 +1,53 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// digits10
+
+#include <limits>
+#include <cfloat>
+
+template <class T, int expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::digits10 == expected, "digits10 test 1");
+ static_assert(std::numeric_limits<T>::is_bounded, "digits10 test 5");
+ static_assert(std::numeric_limits<const T>::digits10 == expected, "digits10 test 2");
+ static_assert(std::numeric_limits<const T>::is_bounded, "digits10 test 6");
+ static_assert(std::numeric_limits<volatile T>::digits10 == expected, "digits10 test 3");
+ static_assert(std::numeric_limits<volatile T>::is_bounded, "digits10 test 7");
+ static_assert(std::numeric_limits<const volatile T>::digits10 == expected, "digits10 test 4");
+ static_assert(std::numeric_limits<const volatile T>::is_bounded, "digits10 test 8");
+}
+
+int main()
+{
+ test<bool, 0>();
+ test<char, 2>();
+ test<signed char, 2>();
+ test<unsigned char, 2>();
+ test<wchar_t, 9>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, 4>();
+ test<char32_t, 9>();
+#endif
+ test<short, 4>();
+ test<unsigned short, 4>();
+ test<int, 9>();
+ test<unsigned int, 9>();
+ test<long, sizeof(long) == 4 ? 9 : 18>();
+ test<unsigned long, sizeof(long) == 4 ? 9 : 19>();
+ test<long long, 18>();
+ test<unsigned long long, 19>();
+ test<float, FLT_DIG>();
+ test<double, DBL_DIG>();
+ test<long double, LDBL_DIG>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/epsilon.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/epsilon.pass.cpp
new file mode 100644
index 00000000000..0869f88fff2
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/epsilon.pass.cpp
@@ -0,0 +1,50 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// epsilon()
+
+#include <limits>
+#include <cfloat>
+#include <cassert>
+
+template <class T>
+void
+test(T expected)
+{
+ assert(std::numeric_limits<T>::epsilon() == expected);
+ assert(std::numeric_limits<const T>::epsilon() == expected);
+ assert(std::numeric_limits<volatile T>::epsilon() == expected);
+ assert(std::numeric_limits<const volatile T>::epsilon() == expected);
+}
+
+int main()
+{
+ test<bool>(false);
+ test<char>(0);
+ test<signed char>(0);
+ test<unsigned char>(0);
+ test<wchar_t>(0);
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t>(0);
+ test<char32_t>(0);
+#endif
+ test<short>(0);
+ test<unsigned short>(0);
+ test<int>(0);
+ test<unsigned int>(0);
+ test<long>(0);
+ test<unsigned long>(0);
+ test<long long>(0);
+ test<unsigned long long>(0);
+ test<float>(FLT_EPSILON);
+ test<double>(DBL_EPSILON);
+ test<long double>(LDBL_EPSILON);
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_denorm.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_denorm.pass.cpp
new file mode 100644
index 00000000000..59c26267479
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_denorm.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// has_denorm
+
+#include <limits>
+
+template <class T, std::float_denorm_style expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::has_denorm == expected, "has_denorm test 1");
+ static_assert(std::numeric_limits<const T>::has_denorm == expected, "has_denorm test 2");
+ static_assert(std::numeric_limits<volatile T>::has_denorm == expected, "has_denorm test 3");
+ static_assert(std::numeric_limits<const volatile T>::has_denorm == expected, "has_denorm test 4");
+}
+
+int main()
+{
+ test<bool, std::denorm_absent>();
+ test<char, std::denorm_absent>();
+ test<signed char, std::denorm_absent>();
+ test<unsigned char, std::denorm_absent>();
+ test<wchar_t, std::denorm_absent>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, std::denorm_absent>();
+ test<char32_t, std::denorm_absent>();
+#endif
+ test<short, std::denorm_absent>();
+ test<unsigned short, std::denorm_absent>();
+ test<int, std::denorm_absent>();
+ test<unsigned int, std::denorm_absent>();
+ test<long, std::denorm_absent>();
+ test<unsigned long, std::denorm_absent>();
+ test<long long, std::denorm_absent>();
+ test<unsigned long long, std::denorm_absent>();
+ test<float, std::denorm_present>();
+ test<double, std::denorm_present>();
+ test<long double, std::denorm_present>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_denorm_loss.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_denorm_loss.pass.cpp
new file mode 100644
index 00000000000..3e23b95afbe
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_denorm_loss.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// has_denorm_loss
+
+#include <limits>
+
+template <class T, bool expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::has_denorm_loss == expected, "has_denorm_loss test 1");
+ static_assert(std::numeric_limits<const T>::has_denorm_loss == expected, "has_denorm_loss test 2");
+ static_assert(std::numeric_limits<volatile T>::has_denorm_loss == expected, "has_denorm_loss test 3");
+ static_assert(std::numeric_limits<const volatile T>::has_denorm_loss == expected, "has_denorm_loss test 4");
+}
+
+int main()
+{
+ test<bool, false>();
+ test<char, false>();
+ test<signed char, false>();
+ test<unsigned char, false>();
+ test<wchar_t, false>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, false>();
+ test<char32_t, false>();
+#endif
+ test<short, false>();
+ test<unsigned short, false>();
+ test<int, false>();
+ test<unsigned int, false>();
+ test<long, false>();
+ test<unsigned long, false>();
+ test<long long, false>();
+ test<unsigned long long, false>();
+ test<float, false>();
+ test<double, false>();
+ test<long double, false>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_infinity.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_infinity.pass.cpp
new file mode 100644
index 00000000000..caf8ea3e636
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_infinity.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// has_infinity
+
+#include <limits>
+
+template <class T, bool expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::has_infinity == expected, "has_infinity test 1");
+ static_assert(std::numeric_limits<const T>::has_infinity == expected, "has_infinity test 2");
+ static_assert(std::numeric_limits<volatile T>::has_infinity == expected, "has_infinity test 3");
+ static_assert(std::numeric_limits<const volatile T>::has_infinity == expected, "has_infinity test 4");
+}
+
+int main()
+{
+ test<bool, false>();
+ test<char, false>();
+ test<signed char, false>();
+ test<unsigned char, false>();
+ test<wchar_t, false>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, false>();
+ test<char32_t, false>();
+#endif
+ test<short, false>();
+ test<unsigned short, false>();
+ test<int, false>();
+ test<unsigned int, false>();
+ test<long, false>();
+ test<unsigned long, false>();
+ test<long long, false>();
+ test<unsigned long long, false>();
+ test<float, true>();
+ test<double, true>();
+ test<long double, true>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_quiet_NaN.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_quiet_NaN.pass.cpp
new file mode 100644
index 00000000000..b3b2d63ef02
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_quiet_NaN.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// has_quiet_NaN
+
+#include <limits>
+
+template <class T, bool expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::has_quiet_NaN == expected, "has_quiet_NaN test 1");
+ static_assert(std::numeric_limits<const T>::has_quiet_NaN == expected, "has_quiet_NaN test 2");
+ static_assert(std::numeric_limits<volatile T>::has_quiet_NaN == expected, "has_quiet_NaN test 3");
+ static_assert(std::numeric_limits<const volatile T>::has_quiet_NaN == expected, "has_quiet_NaN test 4");
+}
+
+int main()
+{
+ test<bool, false>();
+ test<char, false>();
+ test<signed char, false>();
+ test<unsigned char, false>();
+ test<wchar_t, false>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, false>();
+ test<char32_t, false>();
+#endif
+ test<short, false>();
+ test<unsigned short, false>();
+ test<int, false>();
+ test<unsigned int, false>();
+ test<long, false>();
+ test<unsigned long, false>();
+ test<long long, false>();
+ test<unsigned long long, false>();
+ test<float, true>();
+ test<double, true>();
+ test<long double, true>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_signaling_NaN.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_signaling_NaN.pass.cpp
new file mode 100644
index 00000000000..28beab8d6ac
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_signaling_NaN.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// has_signaling_NaN
+
+#include <limits>
+
+template <class T, bool expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::has_signaling_NaN == expected, "has_signaling_NaN test 1");
+ static_assert(std::numeric_limits<const T>::has_signaling_NaN == expected, "has_signaling_NaN test 2");
+ static_assert(std::numeric_limits<volatile T>::has_signaling_NaN == expected, "has_signaling_NaN test 3");
+ static_assert(std::numeric_limits<const volatile T>::has_signaling_NaN == expected, "has_signaling_NaN test 4");
+}
+
+int main()
+{
+ test<bool, false>();
+ test<char, false>();
+ test<signed char, false>();
+ test<unsigned char, false>();
+ test<wchar_t, false>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, false>();
+ test<char32_t, false>();
+#endif
+ test<short, false>();
+ test<unsigned short, false>();
+ test<int, false>();
+ test<unsigned int, false>();
+ test<long, false>();
+ test<unsigned long, false>();
+ test<long long, false>();
+ test<unsigned long long, false>();
+ test<float, true>();
+ test<double, true>();
+ test<long double, true>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/infinity.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/infinity.pass.cpp
new file mode 100644
index 00000000000..27033662613
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/infinity.pass.cpp
@@ -0,0 +1,54 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// infinity()
+
+#include <limits>
+#include <cfloat>
+#include <cassert>
+
+template <class T>
+void
+test(T expected)
+{
+ assert(std::numeric_limits<T>::infinity() == expected);
+ assert(std::numeric_limits<const T>::infinity() == expected);
+ assert(std::numeric_limits<volatile T>::infinity() == expected);
+ assert(std::numeric_limits<const volatile T>::infinity() == expected);
+}
+
+extern float zero;
+
+int main()
+{
+ test<bool>(false);
+ test<char>(0);
+ test<signed char>(0);
+ test<unsigned char>(0);
+ test<wchar_t>(0);
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t>(0);
+ test<char32_t>(0);
+#endif
+ test<short>(0);
+ test<unsigned short>(0);
+ test<int>(0);
+ test<unsigned int>(0);
+ test<long>(0);
+ test<unsigned long>(0);
+ test<long long>(0);
+ test<unsigned long long>(0);
+ test<float>(1./zero);
+ test<double>(1./zero);
+ test<long double>(1./zero);
+}
+
+float zero = 0;
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_bounded.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_bounded.pass.cpp
new file mode 100644
index 00000000000..e92b6df723a
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_bounded.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// is_bounded
+
+#include <limits>
+
+template <class T, bool expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::is_bounded == expected, "is_bounded test 1");
+ static_assert(std::numeric_limits<const T>::is_bounded == expected, "is_bounded test 2");
+ static_assert(std::numeric_limits<volatile T>::is_bounded == expected, "is_bounded test 3");
+ static_assert(std::numeric_limits<const volatile T>::is_bounded == expected, "is_bounded test 4");
+}
+
+int main()
+{
+ test<bool, true>();
+ test<char, true>();
+ test<signed char, true>();
+ test<unsigned char, true>();
+ test<wchar_t, true>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, true>();
+ test<char32_t, true>();
+#endif
+ test<short, true>();
+ test<unsigned short, true>();
+ test<int, true>();
+ test<unsigned int, true>();
+ test<long, true>();
+ test<unsigned long, true>();
+ test<long long, true>();
+ test<unsigned long long, true>();
+ test<float, true>();
+ test<double, true>();
+ test<long double, true>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_exact.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_exact.pass.cpp
new file mode 100644
index 00000000000..3c41e9b41bd
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_exact.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// is_exact
+
+#include <limits>
+
+template <class T, bool expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::is_exact == expected, "is_exact test 1");
+ static_assert(std::numeric_limits<const T>::is_exact == expected, "is_exact test 2");
+ static_assert(std::numeric_limits<volatile T>::is_exact == expected, "is_exact test 3");
+ static_assert(std::numeric_limits<const volatile T>::is_exact == expected, "is_exact test 4");
+}
+
+int main()
+{
+ test<bool, true>();
+ test<char, true>();
+ test<signed char, true>();
+ test<unsigned char, true>();
+ test<wchar_t, true>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, true>();
+ test<char32_t, true>();
+#endif
+ test<short, true>();
+ test<unsigned short, true>();
+ test<int, true>();
+ test<unsigned int, true>();
+ test<long, true>();
+ test<unsigned long, true>();
+ test<long long, true>();
+ test<unsigned long long, true>();
+ test<float, false>();
+ test<double, false>();
+ test<long double, false>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_iec559.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_iec559.pass.cpp
new file mode 100644
index 00000000000..21574a249ac
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_iec559.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// is_iec559
+
+#include <limits>
+
+template <class T, bool expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::is_iec559 == expected, "is_iec559 test 1");
+ static_assert(std::numeric_limits<const T>::is_iec559 == expected, "is_iec559 test 2");
+ static_assert(std::numeric_limits<volatile T>::is_iec559 == expected, "is_iec559 test 3");
+ static_assert(std::numeric_limits<const volatile T>::is_iec559 == expected, "is_iec559 test 4");
+}
+
+int main()
+{
+ test<bool, false>();
+ test<char, false>();
+ test<signed char, false>();
+ test<unsigned char, false>();
+ test<wchar_t, false>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, false>();
+ test<char32_t, false>();
+#endif
+ test<short, false>();
+ test<unsigned short, false>();
+ test<int, false>();
+ test<unsigned int, false>();
+ test<long, false>();
+ test<unsigned long, false>();
+ test<long long, false>();
+ test<unsigned long long, false>();
+ test<float, true>();
+ test<double, true>();
+ test<long double, true>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_integer.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_integer.pass.cpp
new file mode 100644
index 00000000000..1c44d3fb307
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_integer.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// is_integer
+
+#include <limits>
+
+template <class T, bool expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::is_integer == expected, "is_integer test 1");
+ static_assert(std::numeric_limits<const T>::is_integer == expected, "is_integer test 2");
+ static_assert(std::numeric_limits<volatile T>::is_integer == expected, "is_integer test 3");
+ static_assert(std::numeric_limits<const volatile T>::is_integer == expected, "is_integer test 4");
+}
+
+int main()
+{
+ test<bool, true>();
+ test<char, true>();
+ test<signed char, true>();
+ test<unsigned char, true>();
+ test<wchar_t, true>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, true>();
+ test<char32_t, true>();
+#endif
+ test<short, true>();
+ test<unsigned short, true>();
+ test<int, true>();
+ test<unsigned int, true>();
+ test<long, true>();
+ test<unsigned long, true>();
+ test<long long, true>();
+ test<unsigned long long, true>();
+ test<float, false>();
+ test<double, false>();
+ test<long double, false>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_modulo.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_modulo.pass.cpp
new file mode 100644
index 00000000000..4bb8cae7db9
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_modulo.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// is_modulo
+
+#include <limits>
+
+template <class T, bool expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::is_modulo == expected, "is_modulo test 1");
+ static_assert(std::numeric_limits<const T>::is_modulo == expected, "is_modulo test 2");
+ static_assert(std::numeric_limits<volatile T>::is_modulo == expected, "is_modulo test 3");
+ static_assert(std::numeric_limits<const volatile T>::is_modulo == expected, "is_modulo test 4");
+}
+
+int main()
+{
+ test<bool, false>();
+ test<char, true>();
+ test<signed char, true>();
+ test<unsigned char, true>();
+ test<wchar_t, true>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, true>();
+ test<char32_t, true>();
+#endif
+ test<short, true>();
+ test<unsigned short, true>();
+ test<int, true>();
+ test<unsigned int, true>();
+ test<long, true>();
+ test<unsigned long, true>();
+ test<long long, true>();
+ test<unsigned long long, true>();
+ test<float, false>();
+ test<double, false>();
+ test<long double, false>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_signed.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_signed.pass.cpp
new file mode 100644
index 00000000000..7ef84b0c6b6
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_signed.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// is_signed
+
+#include <limits>
+
+template <class T, bool expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::is_signed == expected, "is_signed test 1");
+ static_assert(std::numeric_limits<const T>::is_signed == expected, "is_signed test 2");
+ static_assert(std::numeric_limits<volatile T>::is_signed == expected, "is_signed test 3");
+ static_assert(std::numeric_limits<const volatile T>::is_signed == expected, "is_signed test 4");
+}
+
+int main()
+{
+ test<bool, false>();
+ test<char, char(-1) < char(0)>();
+ test<signed char, true>();
+ test<unsigned char, false>();
+ test<wchar_t, wchar_t(-1) < wchar_t(0)>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, false>();
+ test<char32_t, false>();
+#endif
+ test<short, true>();
+ test<unsigned short, false>();
+ test<int, true>();
+ test<unsigned int, false>();
+ test<long, true>();
+ test<unsigned long, false>();
+ test<long long, true>();
+ test<unsigned long long, false>();
+ test<float, true>();
+ test<double, true>();
+ test<long double, true>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/lowest.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/lowest.pass.cpp
new file mode 100644
index 00000000000..8a0a3b3a85e
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/lowest.pass.cpp
@@ -0,0 +1,56 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// lowest()
+
+#include <limits>
+#include <climits>
+#include <cwchar>
+#include <cfloat>
+#include <cassert>
+
+template <class T>
+void
+test(T expected)
+{
+ assert(std::numeric_limits<T>::lowest() == expected);
+ assert(std::numeric_limits<T>::is_bounded);
+ assert(std::numeric_limits<const T>::lowest() == expected);
+ assert(std::numeric_limits<const T>::is_bounded);
+ assert(std::numeric_limits<volatile T>::lowest() == expected);
+ assert(std::numeric_limits<volatile T>::is_bounded);
+ assert(std::numeric_limits<const volatile T>::lowest() == expected);
+ assert(std::numeric_limits<const volatile T>::is_bounded);
+}
+
+int main()
+{
+ test<bool>(false);
+ test<char>(CHAR_MIN);
+ test<signed char>(SCHAR_MIN);
+ test<unsigned char>(0);
+ test<wchar_t>(WCHAR_MIN);
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t>(0);
+ test<char32_t>(0);
+#endif
+ test<short>(SHRT_MIN);
+ test<unsigned short>(0);
+ test<int>(INT_MIN);
+ test<unsigned int>(0);
+ test<long>(LONG_MIN);
+ test<unsigned long>(0);
+ test<long long>(LLONG_MIN);
+ test<unsigned long long>(0);
+ test<float>(-FLT_MAX);
+ test<double>(-DBL_MAX);
+ test<long double>(-LDBL_MAX);
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/max.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/max.pass.cpp
new file mode 100644
index 00000000000..2cdbec8f8d7
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/max.pass.cpp
@@ -0,0 +1,56 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// max()
+
+#include <limits>
+#include <climits>
+#include <cwchar>
+#include <cfloat>
+#include <cassert>
+
+template <class T>
+void
+test(T expected)
+{
+ assert(std::numeric_limits<T>::max() == expected);
+ assert(std::numeric_limits<T>::is_bounded);
+ assert(std::numeric_limits<const T>::max() == expected);
+ assert(std::numeric_limits<const T>::is_bounded);
+ assert(std::numeric_limits<volatile T>::max() == expected);
+ assert(std::numeric_limits<volatile T>::is_bounded);
+ assert(std::numeric_limits<const volatile T>::max() == expected);
+ assert(std::numeric_limits<const volatile T>::is_bounded);
+}
+
+int main()
+{
+ test<bool>(true);
+ test<char>(CHAR_MAX);
+ test<signed char>(SCHAR_MAX);
+ test<unsigned char>(UCHAR_MAX);
+ test<wchar_t>(WCHAR_MAX);
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t>(USHRT_MAX);
+ test<char32_t>(UINT_MAX);
+#endif
+ test<short>(SHRT_MAX);
+ test<unsigned short>(USHRT_MAX);
+ test<int>(INT_MAX);
+ test<unsigned int>(UINT_MAX);
+ test<long>(LONG_MAX);
+ test<unsigned long>(ULONG_MAX);
+ test<long long>(LLONG_MAX);
+ test<unsigned long long>(ULLONG_MAX);
+ test<float>(FLT_MAX);
+ test<double>(DBL_MAX);
+ test<long double>(LDBL_MAX);
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/max_digits10.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/max_digits10.pass.cpp
new file mode 100644
index 00000000000..f4faa6b4e95
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/max_digits10.pass.cpp
@@ -0,0 +1,49 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// max_digits10
+
+#include <limits>
+#include <cfloat>
+
+template <class T, int expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::max_digits10 == expected, "max_digits10 test 1");
+ static_assert(std::numeric_limits<const T>::max_digits10 == expected, "max_digits10 test 2");
+ static_assert(std::numeric_limits<volatile T>::max_digits10 == expected, "max_digits10 test 3");
+ static_assert(std::numeric_limits<const volatile T>::max_digits10 == expected, "max_digits10 test 4");
+}
+
+int main()
+{
+ test<bool, 0>();
+ test<char, 0>();
+ test<signed char, 0>();
+ test<unsigned char, 0>();
+ test<wchar_t, 0>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, 0>();
+ test<char32_t, 0>();
+#endif
+ test<short, 0>();
+ test<unsigned short, 0>();
+ test<int, 0>();
+ test<unsigned int, 0>();
+ test<long, 0>();
+ test<unsigned long, 0>();
+ test<long long, 0>();
+ test<unsigned long long, 0>();
+ test<float, 2+(FLT_MANT_DIG * 30103)/100000>();
+ test<double, 2+(DBL_MANT_DIG * 30103)/100000>();
+ test<long double, 2+(LDBL_MANT_DIG * 30103)/100000>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/max_exponent.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/max_exponent.pass.cpp
new file mode 100644
index 00000000000..b6c222b4496
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/max_exponent.pass.cpp
@@ -0,0 +1,49 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// max_exponent
+
+#include <limits>
+#include <cfloat>
+
+template <class T, int expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::max_exponent == expected, "max_exponent test 1");
+ static_assert(std::numeric_limits<const T>::max_exponent == expected, "max_exponent test 2");
+ static_assert(std::numeric_limits<volatile T>::max_exponent == expected, "max_exponent test 3");
+ static_assert(std::numeric_limits<const volatile T>::max_exponent == expected, "max_exponent test 4");
+}
+
+int main()
+{
+ test<bool, 0>();
+ test<char, 0>();
+ test<signed char, 0>();
+ test<unsigned char, 0>();
+ test<wchar_t, 0>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, 0>();
+ test<char32_t, 0>();
+#endif
+ test<short, 0>();
+ test<unsigned short, 0>();
+ test<int, 0>();
+ test<unsigned int, 0>();
+ test<long, 0>();
+ test<unsigned long, 0>();
+ test<long long, 0>();
+ test<unsigned long long, 0>();
+ test<float, FLT_MAX_EXP>();
+ test<double, DBL_MAX_EXP>();
+ test<long double, LDBL_MAX_EXP>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/max_exponent10.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/max_exponent10.pass.cpp
new file mode 100644
index 00000000000..0df080a65c0
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/max_exponent10.pass.cpp
@@ -0,0 +1,49 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// max_exponent10
+
+#include <limits>
+#include <cfloat>
+
+template <class T, int expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::max_exponent10 == expected, "max_exponent10 test 1");
+ static_assert(std::numeric_limits<const T>::max_exponent10 == expected, "max_exponent10 test 2");
+ static_assert(std::numeric_limits<volatile T>::max_exponent10 == expected, "max_exponent10 test 3");
+ static_assert(std::numeric_limits<const volatile T>::max_exponent10 == expected, "max_exponent10 test 4");
+}
+
+int main()
+{
+ test<bool, 0>();
+ test<char, 0>();
+ test<signed char, 0>();
+ test<unsigned char, 0>();
+ test<wchar_t, 0>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, 0>();
+ test<char32_t, 0>();
+#endif
+ test<short, 0>();
+ test<unsigned short, 0>();
+ test<int, 0>();
+ test<unsigned int, 0>();
+ test<long, 0>();
+ test<unsigned long, 0>();
+ test<long long, 0>();
+ test<unsigned long long, 0>();
+ test<float, FLT_MAX_10_EXP>();
+ test<double, DBL_MAX_10_EXP>();
+ test<long double, LDBL_MAX_10_EXP>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/min.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/min.pass.cpp
new file mode 100644
index 00000000000..f67fa9ef167
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/min.pass.cpp
@@ -0,0 +1,56 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// min()
+
+#include <limits>
+#include <climits>
+#include <cwchar>
+#include <cfloat>
+#include <cassert>
+
+template <class T>
+void
+test(T expected)
+{
+ assert(std::numeric_limits<T>::min() == expected);
+ assert(std::numeric_limits<T>::is_bounded || !std::numeric_limits<T>::is_signed);
+ assert(std::numeric_limits<const T>::min() == expected);
+ assert(std::numeric_limits<const T>::is_bounded || !std::numeric_limits<const T>::is_signed);
+ assert(std::numeric_limits<volatile T>::min() == expected);
+ assert(std::numeric_limits<volatile T>::is_bounded || !std::numeric_limits<volatile T>::is_signed);
+ assert(std::numeric_limits<const volatile T>::min() == expected);
+ assert(std::numeric_limits<const volatile T>::is_bounded || !std::numeric_limits<const volatile T>::is_signed);
+}
+
+int main()
+{
+ test<bool>(false);
+ test<char>(CHAR_MIN);
+ test<signed char>(SCHAR_MIN);
+ test<unsigned char>(0);
+ test<wchar_t>(WCHAR_MIN);
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t>(0);
+ test<char32_t>(0);
+#endif
+ test<short>(SHRT_MIN);
+ test<unsigned short>(0);
+ test<int>(INT_MIN);
+ test<unsigned int>(0);
+ test<long>(LONG_MIN);
+ test<unsigned long>(0);
+ test<long long>(LLONG_MIN);
+ test<unsigned long long>(0);
+ test<float>(FLT_MIN);
+ test<double>(DBL_MIN);
+ test<long double>(LDBL_MIN);
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/min_exponent.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/min_exponent.pass.cpp
new file mode 100644
index 00000000000..531d25a5848
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/min_exponent.pass.cpp
@@ -0,0 +1,49 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// min_exponent
+
+#include <limits>
+#include <cfloat>
+
+template <class T, int expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::min_exponent == expected, "min_exponent test 1");
+ static_assert(std::numeric_limits<const T>::min_exponent == expected, "min_exponent test 2");
+ static_assert(std::numeric_limits<volatile T>::min_exponent == expected, "min_exponent test 3");
+ static_assert(std::numeric_limits<const volatile T>::min_exponent == expected, "min_exponent test 4");
+}
+
+int main()
+{
+ test<bool, 0>();
+ test<char, 0>();
+ test<signed char, 0>();
+ test<unsigned char, 0>();
+ test<wchar_t, 0>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, 0>();
+ test<char32_t, 0>();
+#endif
+ test<short, 0>();
+ test<unsigned short, 0>();
+ test<int, 0>();
+ test<unsigned int, 0>();
+ test<long, 0>();
+ test<unsigned long, 0>();
+ test<long long, 0>();
+ test<unsigned long long, 0>();
+ test<float, FLT_MIN_EXP>();
+ test<double, DBL_MIN_EXP>();
+ test<long double, LDBL_MIN_EXP>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/min_exponent10.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/min_exponent10.pass.cpp
new file mode 100644
index 00000000000..5f335fe1e37
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/min_exponent10.pass.cpp
@@ -0,0 +1,49 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// min_exponent10
+
+#include <limits>
+#include <cfloat>
+
+template <class T, int expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::min_exponent10 == expected, "min_exponent10 test 1");
+ static_assert(std::numeric_limits<const T>::min_exponent10 == expected, "min_exponent10 test 2");
+ static_assert(std::numeric_limits<volatile T>::min_exponent10 == expected, "min_exponent10 test 3");
+ static_assert(std::numeric_limits<const volatile T>::min_exponent10 == expected, "min_exponent10 test 4");
+}
+
+int main()
+{
+ test<bool, 0>();
+ test<char, 0>();
+ test<signed char, 0>();
+ test<unsigned char, 0>();
+ test<wchar_t, 0>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, 0>();
+ test<char32_t, 0>();
+#endif
+ test<short, 0>();
+ test<unsigned short, 0>();
+ test<int, 0>();
+ test<unsigned int, 0>();
+ test<long, 0>();
+ test<unsigned long, 0>();
+ test<long long, 0>();
+ test<unsigned long long, 0>();
+ test<float, FLT_MIN_10_EXP>();
+ test<double, DBL_MIN_10_EXP>();
+ test<long double, LDBL_MIN_10_EXP>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/quiet_NaN.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/quiet_NaN.pass.cpp
new file mode 100644
index 00000000000..7ce5130e79e
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/quiet_NaN.pass.cpp
@@ -0,0 +1,69 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// quiet_NaN()
+
+#include <limits>
+#include <cmath>
+#include <type_traits>
+#include <cassert>
+
+template <class T>
+void
+test_imp(std::true_type)
+{
+ assert(std::isnan(std::numeric_limits<T>::quiet_NaN()));
+ assert(std::isnan(std::numeric_limits<const T>::quiet_NaN()));
+ assert(std::isnan(std::numeric_limits<volatile T>::quiet_NaN()));
+ assert(std::isnan(std::numeric_limits<const volatile T>::quiet_NaN()));
+}
+
+template <class T>
+void
+test_imp(std::false_type)
+{
+ assert(std::numeric_limits<T>::quiet_NaN() == T());
+ assert(std::numeric_limits<const T>::quiet_NaN() == T());
+ assert(std::numeric_limits<volatile T>::quiet_NaN() == T());
+ assert(std::numeric_limits<const volatile T>::quiet_NaN() == T());
+}
+
+template <class T>
+inline
+void
+test()
+{
+ test_imp<T>(std::is_floating_point<T>());
+}
+
+int main()
+{
+ test<bool>();
+ test<char>();
+ test<signed char>();
+ test<unsigned char>();
+ test<wchar_t>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t>();
+ test<char32_t>();
+#endif
+ test<short>();
+ test<unsigned short>();
+ test<int>();
+ test<unsigned int>();
+ test<long>();
+ test<unsigned long>();
+ test<long long>();
+ test<unsigned long long>();
+ test<float>();
+ test<double>();
+ test<long double>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/radix.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/radix.pass.cpp
new file mode 100644
index 00000000000..b9f1f0c6e0a
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/radix.pass.cpp
@@ -0,0 +1,49 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// radix
+
+#include <limits>
+#include <cfloat>
+
+template <class T, int expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::radix == expected, "radix test 1");
+ static_assert(std::numeric_limits<const T>::radix == expected, "radix test 2");
+ static_assert(std::numeric_limits<volatile T>::radix == expected, "radix test 3");
+ static_assert(std::numeric_limits<const volatile T>::radix == expected, "radix test 4");
+}
+
+int main()
+{
+ test<bool, 2>();
+ test<char, 2>();
+ test<signed char, 2>();
+ test<unsigned char, 2>();
+ test<wchar_t, 2>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, 2>();
+ test<char32_t, 2>();
+#endif
+ test<short, 2>();
+ test<unsigned short, 2>();
+ test<int, 2>();
+ test<unsigned int, 2>();
+ test<long, 2>();
+ test<unsigned long, 2>();
+ test<long long, 2>();
+ test<unsigned long long, 2>();
+ test<float, FLT_RADIX>();
+ test<double, FLT_RADIX>();
+ test<long double, FLT_RADIX>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/round_error.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/round_error.pass.cpp
new file mode 100644
index 00000000000..19c22b8cfa4
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/round_error.pass.cpp
@@ -0,0 +1,50 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// round_error()
+
+#include <limits>
+#include <cfloat>
+#include <cassert>
+
+template <class T>
+void
+test(T expected)
+{
+ assert(std::numeric_limits<T>::round_error() == expected);
+ assert(std::numeric_limits<const T>::round_error() == expected);
+ assert(std::numeric_limits<volatile T>::round_error() == expected);
+ assert(std::numeric_limits<const volatile T>::round_error() == expected);
+}
+
+int main()
+{
+ test<bool>(false);
+ test<char>(0);
+ test<signed char>(0);
+ test<unsigned char>(0);
+ test<wchar_t>(0);
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t>(0);
+ test<char32_t>(0);
+#endif
+ test<short>(0);
+ test<unsigned short>(0);
+ test<int>(0);
+ test<unsigned int>(0);
+ test<long>(0);
+ test<unsigned long>(0);
+ test<long long>(0);
+ test<unsigned long long>(0);
+ test<float>(0.5);
+ test<double>(0.5);
+ test<long double>(0.5);
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/round_style.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/round_style.pass.cpp
new file mode 100644
index 00000000000..d0c7259fd95
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/round_style.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// round_style
+
+#include <limits>
+
+template <class T, std::float_round_style expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::round_style == expected, "round_style test 1");
+ static_assert(std::numeric_limits<const T>::round_style == expected, "round_style test 2");
+ static_assert(std::numeric_limits<volatile T>::round_style == expected, "round_style test 3");
+ static_assert(std::numeric_limits<const volatile T>::round_style == expected, "round_style test 4");
+}
+
+int main()
+{
+ test<bool, std::round_toward_zero>();
+ test<char, std::round_toward_zero>();
+ test<signed char, std::round_toward_zero>();
+ test<unsigned char, std::round_toward_zero>();
+ test<wchar_t, std::round_toward_zero>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, std::round_toward_zero>();
+ test<char32_t, std::round_toward_zero>();
+#endif
+ test<short, std::round_toward_zero>();
+ test<unsigned short, std::round_toward_zero>();
+ test<int, std::round_toward_zero>();
+ test<unsigned int, std::round_toward_zero>();
+ test<long, std::round_toward_zero>();
+ test<unsigned long, std::round_toward_zero>();
+ test<long long, std::round_toward_zero>();
+ test<unsigned long long, std::round_toward_zero>();
+ test<float, std::round_to_nearest>();
+ test<double, std::round_to_nearest>();
+ test<long double, std::round_to_nearest>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/signaling_NaN.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/signaling_NaN.pass.cpp
new file mode 100644
index 00000000000..8acd6b8baef
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/signaling_NaN.pass.cpp
@@ -0,0 +1,69 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// signaling_NaN()
+
+#include <limits>
+#include <cmath>
+#include <type_traits>
+#include <cassert>
+
+template <class T>
+void
+test_imp(std::true_type)
+{
+ assert(std::isnan(std::numeric_limits<T>::signaling_NaN()));
+ assert(std::isnan(std::numeric_limits<const T>::signaling_NaN()));
+ assert(std::isnan(std::numeric_limits<volatile T>::signaling_NaN()));
+ assert(std::isnan(std::numeric_limits<const volatile T>::signaling_NaN()));
+}
+
+template <class T>
+void
+test_imp(std::false_type)
+{
+ assert(std::numeric_limits<T>::signaling_NaN() == T());
+ assert(std::numeric_limits<const T>::signaling_NaN() == T());
+ assert(std::numeric_limits<volatile T>::signaling_NaN() == T());
+ assert(std::numeric_limits<const volatile T>::signaling_NaN() == T());
+}
+
+template <class T>
+inline
+void
+test()
+{
+ test_imp<T>(std::is_floating_point<T>());
+}
+
+int main()
+{
+ test<bool>();
+ test<char>();
+ test<signed char>();
+ test<unsigned char>();
+ test<wchar_t>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t>();
+ test<char32_t>();
+#endif
+ test<short>();
+ test<unsigned short>();
+ test<int>();
+ test<unsigned int>();
+ test<long>();
+ test<unsigned long>();
+ test<long long>();
+ test<unsigned long long>();
+ test<float>();
+ test<double>();
+ test<long double>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/tinyness_before.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/tinyness_before.pass.cpp
new file mode 100644
index 00000000000..8c3fbd0f40f
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/tinyness_before.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// tinyness_before
+
+#include <limits>
+
+template <class T, bool expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::tinyness_before == expected, "tinyness_before test 1");
+ static_assert(std::numeric_limits<const T>::tinyness_before == expected, "tinyness_before test 2");
+ static_assert(std::numeric_limits<volatile T>::tinyness_before == expected, "tinyness_before test 3");
+ static_assert(std::numeric_limits<const volatile T>::tinyness_before == expected, "tinyness_before test 4");
+}
+
+int main()
+{
+ test<bool, false>();
+ test<char, false>();
+ test<signed char, false>();
+ test<unsigned char, false>();
+ test<wchar_t, false>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, false>();
+ test<char32_t, false>();
+#endif
+ test<short, false>();
+ test<unsigned short, false>();
+ test<int, false>();
+ test<unsigned int, false>();
+ test<long, false>();
+ test<unsigned long, false>();
+ test<long long, false>();
+ test<unsigned long long, false>();
+ test<float, false>();
+ test<double, false>();
+ test<long double, false>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/traps.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/traps.pass.cpp
new file mode 100644
index 00000000000..2b8d167906c
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/traps.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// traps
+
+#include <limits>
+
+template <class T, bool expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::traps == expected, "traps test 1");
+ static_assert(std::numeric_limits<const T>::traps == expected, "traps test 2");
+ static_assert(std::numeric_limits<volatile T>::traps == expected, "traps test 3");
+ static_assert(std::numeric_limits<const volatile T>::traps == expected, "traps test 4");
+}
+
+int main()
+{
+ test<bool, false>();
+ test<char, true>();
+ test<signed char, true>();
+ test<unsigned char, true>();
+ test<wchar_t, true>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, true>();
+ test<char32_t, true>();
+#endif
+ test<short, true>();
+ test<unsigned short, true>();
+ test<int, true>();
+ test<unsigned int, true>();
+ test<long, true>();
+ test<unsigned long, true>();
+ test<long long, true>();
+ test<unsigned long long, true>();
+ test<float, false>();
+ test<double, false>();
+ test<long double, false>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits/default.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits/default.pass.cpp
new file mode 100644
index 00000000000..c9d07de1182
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits/default.pass.cpp
@@ -0,0 +1,83 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// The default numeric_limits<T> template shall have all members, but with
+// 0 or false values.
+
+#include <limits>
+#include <cassert>
+
+struct A
+{
+ A(int i = 0) : data_(i) {}
+ int data_;
+};
+
+bool operator == (const A& x, const A& y) {return x.data_ == y.data_;}
+
+int main()
+{
+ static_assert(std::numeric_limits<A>::is_specialized == false,
+ "std::numeric_limits<A>::is_specialized == false");
+ assert(std::numeric_limits<A>::min() == A());
+ assert(std::numeric_limits<A>::max() == A());
+ assert(std::numeric_limits<A>::lowest() == A());
+ static_assert(std::numeric_limits<A>::digits == 0,
+ "std::numeric_limits<A>::digits == 0");
+ static_assert(std::numeric_limits<A>::digits10 == 0,
+ "std::numeric_limits<A>::digits10 == 0");
+ static_assert(std::numeric_limits<A>::max_digits10 == 0,
+ "std::numeric_limits<A>::max_digits10 == 0");
+ static_assert(std::numeric_limits<A>::is_signed == false,
+ "std::numeric_limits<A>::is_signed == false");
+ static_assert(std::numeric_limits<A>::is_integer == false,
+ "std::numeric_limits<A>::is_integer == false");
+ static_assert(std::numeric_limits<A>::is_exact == false,
+ "std::numeric_limits<A>::is_exact == false");
+ static_assert(std::numeric_limits<A>::radix == 0,
+ "std::numeric_limits<A>::radix == 0");
+ assert(std::numeric_limits<A>::epsilon() == A());
+ assert(std::numeric_limits<A>::round_error() == A());
+ static_assert(std::numeric_limits<A>::min_exponent == 0,
+ "std::numeric_limits<A>::min_exponent == 0");
+ static_assert(std::numeric_limits<A>::min_exponent10 == 0,
+ "std::numeric_limits<A>::min_exponent10 == 0");
+ static_assert(std::numeric_limits<A>::max_exponent == 0,
+ "std::numeric_limits<A>::max_exponent == 0");
+ static_assert(std::numeric_limits<A>::max_exponent10 == 0,
+ "std::numeric_limits<A>::max_exponent10 == 0");
+ static_assert(std::numeric_limits<A>::has_infinity == false,
+ "std::numeric_limits<A>::has_infinity == false");
+ static_assert(std::numeric_limits<A>::has_quiet_NaN == false,
+ "std::numeric_limits<A>::has_quiet_NaN == false");
+ static_assert(std::numeric_limits<A>::has_signaling_NaN == false,
+ "std::numeric_limits<A>::has_signaling_NaN == false");
+ static_assert(std::numeric_limits<A>::has_denorm == std::denorm_absent,
+ "std::numeric_limits<A>::has_denorm == std::denorm_absent");
+ static_assert(std::numeric_limits<A>::has_denorm_loss == false,
+ "std::numeric_limits<A>::has_denorm_loss == false");
+ assert(std::numeric_limits<A>::infinity() == A());
+ assert(std::numeric_limits<A>::quiet_NaN() == A());
+ assert(std::numeric_limits<A>::signaling_NaN() == A());
+ assert(std::numeric_limits<A>::denorm_min() == A());
+ static_assert(std::numeric_limits<A>::is_iec559 == false,
+ "std::numeric_limits<A>::is_iec559 == false");
+ static_assert(std::numeric_limits<A>::is_bounded == false,
+ "std::numeric_limits<A>::is_bounded == false");
+ static_assert(std::numeric_limits<A>::is_modulo == false,
+ "std::numeric_limits<A>::is_modulo == false");
+ static_assert(std::numeric_limits<A>::traps == false,
+ "std::numeric_limits<A>::traps == false");
+ static_assert(std::numeric_limits<A>::tinyness_before == false,
+ "std::numeric_limits<A>::tinyness_before == false");
+ static_assert(std::numeric_limits<A>::round_style == std::round_toward_zero,
+ "std::numeric_limits<A>::round_style == std::round_toward_zero");
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.special/nothing_to_do.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.special/nothing_to_do.pass.cpp
new file mode 100644
index 00000000000..fa4d462f18d
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.special/nothing_to_do.pass.cpp
@@ -0,0 +1,12 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.limits/limits/round.style/check_values.pass.cpp b/libcxx/test/language.support/support.limits/limits/round.style/check_values.pass.cpp
new file mode 100644
index 00000000000..36299d7c07e
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/round.style/check_values.pass.cpp
@@ -0,0 +1,34 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// float_denorm_style
+
+#include <limits>
+
+typedef char one;
+struct two {one _[2];};
+
+one test(std::float_denorm_style);
+two test(int);
+
+int main()
+{
+ static_assert(std::denorm_indeterminate == -1,
+ "std::denorm_indeterminate == -1");
+ static_assert(std::denorm_absent == 0,
+ "std::denorm_absent == 0");
+ static_assert(std::denorm_present == 1,
+ "std::denorm_present == 1");
+ static_assert(sizeof(test(std::denorm_present)) == 1,
+ "sizeof(test(std::denorm_present)) == 1");
+ static_assert(sizeof(test(1)) == 2,
+ "sizeof(test(1)) == 2");
+}
diff --git a/libcxx/test/language.support/support.limits/limits/version.pass.cpp b/libcxx/test/language.support/support.limits/limits/version.pass.cpp
new file mode 100644
index 00000000000..5aa25cd9fd9
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/version.pass.cpp
@@ -0,0 +1,20 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <limits>
+
+#include <limits>
+
+#ifndef _LIBCPP_VERSION
+#error _LIBCPP_VERSION not defined
+#endif
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.limits/nothing_to_do.pass.cpp b/libcxx/test/language.support/support.limits/nothing_to_do.pass.cpp
new file mode 100644
index 00000000000..fa4d462f18d
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/nothing_to_do.pass.cpp
@@ -0,0 +1,12 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.rtti/bad.cast/bad_cast.pass.cpp b/libcxx/test/language.support/support.rtti/bad.cast/bad_cast.pass.cpp
new file mode 100644
index 00000000000..a4ce4180402
--- /dev/null
+++ b/libcxx/test/language.support/support.rtti/bad.cast/bad_cast.pass.cpp
@@ -0,0 +1,27 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test bad_cast
+
+#include <typeinfo>
+#include <type_traits>
+#include <cassert>
+
+int main()
+{
+ static_assert((std::is_base_of<std::exception, std::bad_cast>::value),
+ "std::is_base_of<std::exception, std::bad_cast>::value");
+ static_assert(std::is_polymorphic<std::bad_cast>::value,
+ "std::is_polymorphic<std::bad_cast>::value");
+ std::bad_cast b;
+ std::bad_cast b2 = b;
+ b2 = b;
+ const char* w = b2.what();
+ assert(w);
+}
diff --git a/libcxx/test/language.support/support.rtti/bad.typeid/bad_typeid.pass.cpp b/libcxx/test/language.support/support.rtti/bad.typeid/bad_typeid.pass.cpp
new file mode 100644
index 00000000000..7f4f818aa5b
--- /dev/null
+++ b/libcxx/test/language.support/support.rtti/bad.typeid/bad_typeid.pass.cpp
@@ -0,0 +1,27 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test bad_typeid
+
+#include <typeinfo>
+#include <type_traits>
+#include <cassert>
+
+int main()
+{
+ static_assert((std::is_base_of<std::exception, std::bad_typeid>::value),
+ "std::is_base_of<std::exception, std::bad_typeid>::value");
+ static_assert(std::is_polymorphic<std::bad_typeid>::value,
+ "std::is_polymorphic<std::bad_typeid>::value");
+ std::bad_typeid b;
+ std::bad_typeid b2 = b;
+ b2 = b;
+ const char* w = b2.what();
+ assert(w);
+}
diff --git a/libcxx/test/language.support/support.rtti/type.info/type_info.pass.cpp b/libcxx/test/language.support/support.rtti/type.info/type_info.pass.cpp
new file mode 100644
index 00000000000..d20f5243ac1
--- /dev/null
+++ b/libcxx/test/language.support/support.rtti/type.info/type_info.pass.cpp
@@ -0,0 +1,26 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test type_info
+
+#include <typeinfo>
+#include <cstring>
+#include <cassert>
+
+int main()
+{
+ const std::type_info& t1 = typeid(int);
+ const std::type_info& t2 = typeid(int);
+ assert(t1 == t2);
+ const std::type_info& t3 = typeid(short);
+ assert(t1 != t3);
+ assert(!t1.before(t2));
+ assert(strcmp(t1.name(), t2.name()) == 0);
+ assert(strcmp(t1.name(), t3.name()) != 0);
+}
diff --git a/libcxx/test/language.support/support.rtti/type.info/type_info_hash.pass.cpp b/libcxx/test/language.support/support.rtti/type.info/type_info_hash.pass.cpp
new file mode 100644
index 00000000000..00178e1c719
--- /dev/null
+++ b/libcxx/test/language.support/support.rtti/type.info/type_info_hash.pass.cpp
@@ -0,0 +1,23 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test type_info
+
+#include <typeinfo>
+#include <cstring>
+#include <cassert>
+
+int main()
+{
+ const std::type_info& t1 = typeid(int);
+ const std::type_info& t2 = typeid(int);
+ const std::type_info& t3 = typeid(short);
+ assert(t1.hash_code() == t2.hash_code());
+ assert(t1.hash_code() != t3.hash_code());
+}
diff --git a/libcxx/test/language.support/support.rtti/version.pass.cpp b/libcxx/test/language.support/support.rtti/version.pass.cpp
new file mode 100644
index 00000000000..cd8fdaf259d
--- /dev/null
+++ b/libcxx/test/language.support/support.rtti/version.pass.cpp
@@ -0,0 +1,20 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <typeinfo>
+
+#include <typeinfo>
+
+#ifndef _LIBCPP_VERSION
+#error _LIBCPP_VERSION not defined
+#endif
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.runtime/csetjmp.pass.cpp b/libcxx/test/language.support/support.runtime/csetjmp.pass.cpp
new file mode 100644
index 00000000000..c57bab986a3
--- /dev/null
+++ b/libcxx/test/language.support/support.runtime/csetjmp.pass.cpp
@@ -0,0 +1,24 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test <csetjmp>
+
+#include <csetjmp>
+#include <type_traits>
+
+#ifndef setjmp
+#error setjmp not defined
+#endif
+
+int main()
+{
+ std::jmp_buf jb;
+ static_assert((std::is_same<__typeof__(std::longjmp(jb, 0)), void>::value),
+ "std::is_same<__typeof__(std::longjmp(jb, 0)), void>::value");
+}
diff --git a/libcxx/test/language.support/support.runtime/csignal.pass.cpp b/libcxx/test/language.support/support.runtime/csignal.pass.cpp
new file mode 100644
index 00000000000..0dcabb0e53e
--- /dev/null
+++ b/libcxx/test/language.support/support.runtime/csignal.pass.cpp
@@ -0,0 +1,57 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test <csignal>
+
+#include <csignal>
+#include <type_traits>
+
+#ifndef SIG_DFL
+#error SIG_DFL not defined
+#endif
+
+#ifndef SIG_ERR
+#error SIG_ERR not defined
+#endif
+
+#ifndef SIG_IGN
+#error SIG_IGN not defined
+#endif
+
+#ifndef SIGABRT
+#error SIGABRT not defined
+#endif
+
+#ifndef SIGFPE
+#error SIGFPE not defined
+#endif
+
+#ifndef SIGILL
+#error SIGILL not defined
+#endif
+
+#ifndef SIGINT
+#error SIGINT not defined
+#endif
+
+#ifndef SIGSEGV
+#error SIGSEGV not defined
+#endif
+
+#ifndef SIGTERM
+#error SIGTERM not defined
+#endif
+
+int main()
+{
+ std::sig_atomic_t sig;
+ typedef void (*func)(int);
+ static_assert((std::is_same<decltype(std::signal(0, (func)0)), func>::value), "");
+ static_assert((std::is_same<decltype(std::raise(0)), int>::value), "");
+}
diff --git a/libcxx/test/language.support/support.runtime/cstdarg.pass.cpp b/libcxx/test/language.support/support.runtime/cstdarg.pass.cpp
new file mode 100644
index 00000000000..f25bdb6a82d
--- /dev/null
+++ b/libcxx/test/language.support/support.runtime/cstdarg.pass.cpp
@@ -0,0 +1,33 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test <cstdarg>
+
+#include <cstdarg>
+
+#ifndef va_arg
+#error va_arg not defined
+#endif
+
+#ifndef va_copy
+#error va_copy not defined
+#endif
+
+#ifndef va_end
+#error va_end not defined
+#endif
+
+#ifndef va_start
+#error va_start not defined
+#endif
+
+int main()
+{
+ std::va_list va;
+}
diff --git a/libcxx/test/language.support/support.runtime/cstdbool.pass.cpp b/libcxx/test/language.support/support.runtime/cstdbool.pass.cpp
new file mode 100644
index 00000000000..7d4dcd25a71
--- /dev/null
+++ b/libcxx/test/language.support/support.runtime/cstdbool.pass.cpp
@@ -0,0 +1,32 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test <cstdbool>
+
+#include <cstdbool>
+
+#ifndef __bool_true_false_are_defined
+#error __bool_true_false_are_defined not defined
+#endif
+
+#ifdef bool
+#error bool should not be defined
+#endif
+
+#ifdef true
+#error true should not be defined
+#endif
+
+#ifdef false
+#error false should not be defined
+#endif
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.runtime/cstdlib.pass.cpp b/libcxx/test/language.support/support.runtime/cstdlib.pass.cpp
new file mode 100644
index 00000000000..3e42f8c8fc9
--- /dev/null
+++ b/libcxx/test/language.support/support.runtime/cstdlib.pass.cpp
@@ -0,0 +1,86 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test <cstdlib>
+
+#include <cstdlib>
+#include <type_traits>
+
+#ifndef EXIT_FAILURE
+#error EXIT_FAILURE not defined
+#endif
+
+#ifndef EXIT_SUCCESS
+#error EXIT_SUCCESS not defined
+#endif
+
+#ifndef MB_CUR_MAX
+#error MB_CUR_MAX not defined
+#endif
+
+#ifndef NULL
+#error NULL not defined
+#endif
+
+#ifndef RAND_MAX
+#error RAND_MAX not defined
+#endif
+
+int main()
+{
+ std::size_t s = 0;
+ std::div_t d;
+ std::ldiv_t ld;
+ std::lldiv_t lld;
+ char** endptr = 0;
+ static_assert((std::is_same<decltype(std::atof("")), double>::value), "");
+ static_assert((std::is_same<decltype(std::atoi("")), int>::value), "");
+ static_assert((std::is_same<decltype(std::atol("")), long>::value), "");
+ static_assert((std::is_same<decltype(std::atoll("")), long long>::value), "");
+ static_assert((std::is_same<decltype(std::getenv("")), char*>::value), "");
+ static_assert((std::is_same<decltype(std::strtod("", endptr)), double>::value), "");
+ static_assert((std::is_same<decltype(std::strtof("", endptr)), float>::value), "");
+ static_assert((std::is_same<decltype(std::strtold("", endptr)), long double>::value), "");
+ static_assert((std::is_same<decltype(std::strtol("", endptr,0)), long>::value), "");
+ static_assert((std::is_same<decltype(std::strtoll("", endptr,0)), long long>::value), "");
+ static_assert((std::is_same<decltype(std::strtoul("", endptr,0)), unsigned long>::value), "");
+ static_assert((std::is_same<decltype(std::strtoull("", endptr,0)), unsigned long long>::value), "");
+ static_assert((std::is_same<decltype(std::rand()), int>::value), "");
+ static_assert((std::is_same<decltype(std::srand(0)), void>::value), "");
+ static_assert((std::is_same<decltype(std::calloc(0,0)), void*>::value), "");
+ static_assert((std::is_same<decltype(std::free(0)), void>::value), "");
+ static_assert((std::is_same<decltype(std::malloc(0)), void*>::value), "");
+ static_assert((std::is_same<decltype(std::realloc(0,0)), void*>::value), "");
+ static_assert((std::is_same<decltype(std::abort()), void>::value), "");
+ static_assert((std::is_same<decltype(std::atexit(0)), int>::value), "");
+ static_assert((std::is_same<decltype(std::exit(0)), void>::value), "");
+ static_assert((std::is_same<decltype(std::_Exit(0)), void>::value), "");
+ static_assert((std::is_same<decltype(std::getenv("")), char*>::value), "");
+ static_assert((std::is_same<decltype(std::system("")), int>::value), "");
+ static_assert((std::is_same<decltype(std::bsearch(0,0,0,0,0)), void*>::value), "");
+ static_assert((std::is_same<decltype(std::qsort(0,0,0,0)), void>::value), "");
+ static_assert((std::is_same<decltype(std::abs(0)), int>::value), "");
+ static_assert((std::is_same<decltype(std::abs((long)0)), long>::value), "");
+ static_assert((std::is_same<decltype(std::abs((long long)0)), long long>::value), "");
+ static_assert((std::is_same<decltype(std::labs((long)0)), long>::value), "");
+ static_assert((std::is_same<decltype(std::llabs((long long)0)), long long>::value), "");
+ static_assert((std::is_same<decltype(std::div(0,0)), std::div_t>::value), "");
+ static_assert((std::is_same<decltype(std::div(0L,0L)), std::ldiv_t>::value), "");
+ static_assert((std::is_same<decltype(std::div(0LL,0LL)), std::lldiv_t>::value), "");
+ static_assert((std::is_same<decltype(std::ldiv(0L,0L)), std::ldiv_t>::value), "");
+ static_assert((std::is_same<decltype(std::lldiv(0LL,0LL)), std::lldiv_t>::value), "");
+ static_assert((std::is_same<decltype(std::mblen("",0)), int>::value), "");
+ wchar_t* pw = 0;
+ const wchar_t* pwc = 0;
+ char* pc = 0;
+ static_assert((std::is_same<decltype(std::mbtowc(pw,"",0)), int>::value), "");
+ static_assert((std::is_same<decltype(std::wctomb(pc,L' ')), int>::value), "");
+ static_assert((std::is_same<decltype(std::mbstowcs(pw,"",0)), std::size_t>::value), "");
+ static_assert((std::is_same<decltype(std::wcstombs(pc,pwc,0)), std::size_t>::value), "");
+}
diff --git a/libcxx/test/language.support/support.runtime/ctime.pass.cpp b/libcxx/test/language.support/support.runtime/ctime.pass.cpp
new file mode 100644
index 00000000000..4b205762ecc
--- /dev/null
+++ b/libcxx/test/language.support/support.runtime/ctime.pass.cpp
@@ -0,0 +1,40 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test <ctime>
+
+#include <ctime>
+#include <type_traits>
+
+#ifndef NULL
+#error NULL not defined
+#endif
+
+#ifndef CLOCKS_PER_SEC
+#error CLOCKS_PER_SEC not defined
+#endif
+
+int main()
+{
+ std::clock_t c = 0;
+ std::size_t s = 0;
+ std::time_t t = 0;
+ std::tm tm = {0};
+ static_assert((std::is_same<decltype(std::clock()), std::clock_t>::value), "");
+ static_assert((std::is_same<decltype(std::difftime(t,t)), double>::value), "");
+ static_assert((std::is_same<decltype(std::mktime(&tm)), std::time_t>::value), "");
+ static_assert((std::is_same<decltype(std::time(&t)), std::time_t>::value), "");
+ static_assert((std::is_same<decltype(std::asctime(&tm)), char*>::value), "");
+ static_assert((std::is_same<decltype(std::ctime(&t)), char*>::value), "");
+ static_assert((std::is_same<decltype(std::gmtime(&t)), std::tm*>::value), "");
+ static_assert((std::is_same<decltype(std::localtime(&t)), std::tm*>::value), "");
+ char* c1 = 0;
+ const char* c2 = 0;
+ static_assert((std::is_same<decltype(std::strftime(c1,s,c2,&tm)), std::size_t>::value), "");
+}
diff --git a/libcxx/test/language.support/support.runtime/version_csetjmp.pass.cpp b/libcxx/test/language.support/support.runtime/version_csetjmp.pass.cpp
new file mode 100644
index 00000000000..6607f7d5bac
--- /dev/null
+++ b/libcxx/test/language.support/support.runtime/version_csetjmp.pass.cpp
@@ -0,0 +1,20 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <csetjmp>
+
+#include <csetjmp>
+
+#ifndef _LIBCPP_VERSION
+#error _LIBCPP_VERSION not defined
+#endif
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.runtime/version_csignal.pass.cpp b/libcxx/test/language.support/support.runtime/version_csignal.pass.cpp
new file mode 100644
index 00000000000..5d4a38eb9bd
--- /dev/null
+++ b/libcxx/test/language.support/support.runtime/version_csignal.pass.cpp
@@ -0,0 +1,20 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <csignal>
+
+#include <csignal>
+
+#ifndef _LIBCPP_VERSION
+#error _LIBCPP_VERSION not defined
+#endif
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.runtime/version_cstdarg.pass.cpp b/libcxx/test/language.support/support.runtime/version_cstdarg.pass.cpp
new file mode 100644
index 00000000000..16e2e9e099e
--- /dev/null
+++ b/libcxx/test/language.support/support.runtime/version_cstdarg.pass.cpp
@@ -0,0 +1,20 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <cstdarg>
+
+#include <cstdarg>
+
+#ifndef _LIBCPP_VERSION
+#error _LIBCPP_VERSION not defined
+#endif
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.runtime/version_cstdbool.pass.cpp b/libcxx/test/language.support/support.runtime/version_cstdbool.pass.cpp
new file mode 100644
index 00000000000..2eab23b4436
--- /dev/null
+++ b/libcxx/test/language.support/support.runtime/version_cstdbool.pass.cpp
@@ -0,0 +1,20 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <cstdbool>
+
+#include <cstdbool>
+
+#ifndef _LIBCPP_VERSION
+#error _LIBCPP_VERSION not defined
+#endif
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.runtime/version_cstdlib.pass.cpp b/libcxx/test/language.support/support.runtime/version_cstdlib.pass.cpp
new file mode 100644
index 00000000000..7de716942fc
--- /dev/null
+++ b/libcxx/test/language.support/support.runtime/version_cstdlib.pass.cpp
@@ -0,0 +1,20 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <cstdlib>
+
+#include <cstdlib>
+
+#ifndef _LIBCPP_VERSION
+#error _LIBCPP_VERSION not defined
+#endif
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.runtime/version_ctime.pass.cpp b/libcxx/test/language.support/support.runtime/version_ctime.pass.cpp
new file mode 100644
index 00000000000..659d85e8be3
--- /dev/null
+++ b/libcxx/test/language.support/support.runtime/version_ctime.pass.cpp
@@ -0,0 +1,20 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <ctime>
+
+#include <ctime>
+
+#ifndef _LIBCPP_VERSION
+#error _LIBCPP_VERSION not defined
+#endif
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.start.term/quick_exit.pass.cpp b/libcxx/test/language.support/support.start.term/quick_exit.pass.cpp
new file mode 100644
index 00000000000..aa474c17e6e
--- /dev/null
+++ b/libcxx/test/language.support/support.start.term/quick_exit.pass.cpp
@@ -0,0 +1,21 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test quick_exit and at_quick_exit
+
+#include <cstdlib>
+#include <type_traits>
+
+void f();
+
+int main()
+{
+ std::at_quick_exit(f);
+ quick_exit(0);
+}
diff --git a/libcxx/test/language.support/support.types/max_align_t.pass.cpp b/libcxx/test/language.support/support.types/max_align_t.pass.cpp
new file mode 100644
index 00000000000..d9a0d980251
--- /dev/null
+++ b/libcxx/test/language.support/support.types/max_align_t.pass.cpp
@@ -0,0 +1,34 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include <cstddef>
+#include <type_traits>
+
+// max_align_t is a POD type whose alignment requirement is at least as
+// great as that of every scalar type
+
+#include <stdio.h>
+
+int main()
+{
+ static_assert(std::is_pod<std::max_align_t>::value,
+ "std::is_pod<std::max_align_t>::value");
+ static_assert((std::alignment_of<std::max_align_t>::value >=
+ std::alignment_of<long long>::value),
+ "std::alignment_of<std::max_align_t>::value >= "
+ "std::alignment_of<long long>::value");
+ static_assert(std::alignment_of<std::max_align_t>::value >=
+ std::alignment_of<long double>::value,
+ "std::alignment_of<std::max_align_t>::value >= "
+ "std::alignment_of<long double>::value");
+ static_assert(std::alignment_of<std::max_align_t>::value >=
+ std::alignment_of<void*>::value,
+ "std::alignment_of<std::max_align_t>::value >= "
+ "std::alignment_of<void*>::value");
+}
diff --git a/libcxx/test/language.support/support.types/null.pass.cpp b/libcxx/test/language.support/support.types/null.pass.cpp
new file mode 100644
index 00000000000..563b61685cb
--- /dev/null
+++ b/libcxx/test/language.support/support.types/null.pass.cpp
@@ -0,0 +1,18 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include <cstddef>
+
+#ifndef NULL
+#error NULL not defined
+#endif
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.types/nullptr_t.pass.cpp b/libcxx/test/language.support/support.types/nullptr_t.pass.cpp
new file mode 100644
index 00000000000..ec1059b26d1
--- /dev/null
+++ b/libcxx/test/language.support/support.types/nullptr_t.pass.cpp
@@ -0,0 +1,44 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include <cstddef>
+#include <type_traits>
+#include <cassert>
+
+// typedef decltype(nullptr) nullptr_t;
+
+struct A
+{
+ A(std::nullptr_t) {}
+};
+
+int main()
+{
+ static_assert(sizeof(std::nullptr_t) == sizeof(void*),
+ "sizeof(std::nullptr_t) == sizeof(void*)");
+ A* p = 0;
+ assert(p == nullptr);
+ void (A::*pmf)() = 0;
+#ifdef __clang__
+ // GCC 4.2 can't handle this
+ assert(pmf == nullptr);
+#endif
+ int A::*pmd = 0;
+ assert(pmd == nullptr);
+ A a1(nullptr);
+ A a2(0);
+ bool b = nullptr;
+ assert(!b);
+ assert(nullptr == nullptr);
+ assert(nullptr <= nullptr);
+ assert(nullptr >= nullptr);
+ assert(!(nullptr != nullptr));
+ assert(!(nullptr < nullptr));
+ assert(!(nullptr > nullptr));
+}
diff --git a/libcxx/test/language.support/support.types/offsetof.pass.cpp b/libcxx/test/language.support/support.types/offsetof.pass.cpp
new file mode 100644
index 00000000000..b551ea5dec1
--- /dev/null
+++ b/libcxx/test/language.support/support.types/offsetof.pass.cpp
@@ -0,0 +1,18 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include <cstddef>
+
+#ifndef offsetof
+#error offsetof not defined
+#endif
+
+int main()
+{
+}
diff --git a/libcxx/test/language.support/support.types/ptrdiff_t.pass.cpp b/libcxx/test/language.support/support.types/ptrdiff_t.pass.cpp
new file mode 100644
index 00000000000..cffef945378
--- /dev/null
+++ b/libcxx/test/language.support/support.types/ptrdiff_t.pass.cpp
@@ -0,0 +1,27 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include <cstddef>
+#include <type_traits>
+
+// ptrdiff_t should:
+
+// 1. be in namespace std.
+// 2. be the same sizeof as void*.
+// 3. be a signed integral.
+
+int main()
+{
+ static_assert(sizeof(std::ptrdiff_t) == sizeof(void*),
+ "sizeof(std::ptrdiff_t) == sizeof(void*)");
+ static_assert(std::is_signed<std::ptrdiff_t>::value,
+ "std::is_signed<std::ptrdiff_t>::value");
+ static_assert(std::is_integral<std::ptrdiff_t>::value,
+ "std::is_integral<std::ptrdiff_t>::value");
+}
diff --git a/libcxx/test/language.support/support.types/size_t.pass.cpp b/libcxx/test/language.support/support.types/size_t.pass.cpp
new file mode 100644
index 00000000000..d8de688fccd
--- /dev/null
+++ b/libcxx/test/language.support/support.types/size_t.pass.cpp
@@ -0,0 +1,27 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include <cstddef>
+#include <type_traits>
+
+// size_t should:
+
+// 1. be in namespace std.
+// 2. be the same sizeof as void*.
+// 3. be an unsigned integral.
+
+int main()
+{
+ static_assert(sizeof(std::size_t) == sizeof(void*),
+ "sizeof(std::size_t) == sizeof(void*)");
+ static_assert(std::is_unsigned<std::size_t>::value,
+ "std::is_unsigned<std::size_t>::value");
+ static_assert(std::is_integral<std::size_t>::value,
+ "std::is_integral<std::size_t>::value");
+}
diff --git a/libcxx/test/language.support/support.types/version.pass.cpp b/libcxx/test/language.support/support.types/version.pass.cpp
new file mode 100644
index 00000000000..8eb0a1c62e2
--- /dev/null
+++ b/libcxx/test/language.support/support.types/version.pass.cpp
@@ -0,0 +1,20 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <cstddef>
+
+#include <cstddef>
+
+#ifndef _LIBCPP_VERSION
+#error _LIBCPP_VERSION not defined
+#endif
+
+int main()
+{
+}
OpenPOWER on IntegriCloud