diff options
| author | Stephan T. Lavavej <stl@exchange.microsoft.com> | 2017-02-05 22:48:13 +0000 | 
|---|---|---|
| committer | Stephan T. Lavavej <stl@exchange.microsoft.com> | 2017-02-05 22:48:13 +0000 | 
| commit | ae2798fc53654659c07d082f48284d6bf1085851 (patch) | |
| tree | b616e65deba1e308c0eb923add8cf0fcb70a4410 /libcxx/test/std/utilities | |
| parent | 0d6482f3bb9808c7246305884d18645362cd2f93 (diff) | |
| download | bcm5719-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.cpp | 26 | 
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  }  | 

