summaryrefslogtreecommitdiffstats
path: root/libcxx/test/std/utilities
diff options
context:
space:
mode:
authorStephan T. Lavavej <stl@exchange.microsoft.com>2017-02-05 22:48:13 +0000
committerStephan T. Lavavej <stl@exchange.microsoft.com>2017-02-05 22:48:13 +0000
commitae2798fc53654659c07d082f48284d6bf1085851 (patch)
treeb616e65deba1e308c0eb923add8cf0fcb70a4410 /libcxx/test/std/utilities
parent0d6482f3bb9808c7246305884d18645362cd2f93 (diff)
downloadbcm5719-llvm-ae2798fc53654659c07d082f48284d6bf1085851.tar.gz
bcm5719-llvm-ae2798fc53654659c07d082f48284d6bf1085851.zip
[libcxx] [test] Avoid MSVC's non-Standard ABI in underlying_type.pass.cpp.
When compiled with Clang for Windows, this was emitting "enumerator value evaluates to 4294967295, which cannot be narrowed to type 'int' [-Wc++11-narrowing]". The test should more strenuously avoid poking this ABI deficiency (and it already has coverage for explicitly specified underlying types). Fixes D29140. llvm-svn: 294159
Diffstat (limited to 'libcxx/test/std/utilities')
-rw-r--r--libcxx/test/std/utilities/meta/meta.trans/meta.trans.other/underlying_type.pass.cpp26
1 files changed, 17 insertions, 9 deletions
diff --git a/libcxx/test/std/utilities/meta/meta.trans/meta.trans.other/underlying_type.pass.cpp b/libcxx/test/std/utilities/meta/meta.trans/meta.trans.other/underlying_type.pass.cpp
index 410e47e03bc..b00798b7224 100644
--- a/libcxx/test/std/utilities/meta/meta.trans/meta.trans.other/underlying_type.pass.cpp
+++ b/libcxx/test/std/utilities/meta/meta.trans/meta.trans.other/underlying_type.pass.cpp
@@ -17,24 +17,32 @@
#include "test_macros.h"
enum E { V = INT_MIN };
-enum F { W = UINT_MAX };
-int main()
-{
#if !defined(_WIN32) || defined(__MINGW32__)
- typedef unsigned ExpectUnsigned;
+ #define TEST_UNSIGNED_UNDERLYING_TYPE 1
#else
- typedef int ExpectUnsigned; // MSVC's ABI doesn't follow the Standard
+ #define TEST_UNSIGNED_UNDERLYING_TYPE 0 // MSVC's ABI doesn't follow the Standard
#endif
+
+#if TEST_UNSIGNED_UNDERLYING_TYPE
+enum F { W = UINT_MAX };
+#endif // TEST_UNSIGNED_UNDERLYING_TYPE
+
+int main()
+{
static_assert((std::is_same<std::underlying_type<E>::type, int>::value),
"E has the wrong underlying type");
- static_assert((std::is_same<std::underlying_type<F>::type, ExpectUnsigned>::value),
+#if TEST_UNSIGNED_UNDERLYING_TYPE
+ static_assert((std::is_same<std::underlying_type<F>::type, unsigned>::value),
"F has the wrong underlying type");
+#endif // TEST_UNSIGNED_UNDERLYING_TYPE
#if TEST_STD_VER > 11
static_assert((std::is_same<std::underlying_type_t<E>, int>::value), "");
- static_assert((std::is_same<std::underlying_type_t<F>, ExpectUnsigned>::value), "");
-#endif
+#if TEST_UNSIGNED_UNDERLYING_TYPE
+ static_assert((std::is_same<std::underlying_type_t<F>, unsigned>::value), "");
+#endif // TEST_UNSIGNED_UNDERLYING_TYPE
+#endif // TEST_STD_VER > 11
#if TEST_STD_VER >= 11
enum G : char { };
@@ -43,6 +51,6 @@ int main()
"G has the wrong underlying type");
#if TEST_STD_VER > 11
static_assert((std::is_same<std::underlying_type_t<G>, char>::value), "");
-#endif
+#endif // TEST_STD_VER > 11
#endif // TEST_STD_VER >= 11
}
OpenPOWER on IntegriCloud