diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-10-19 23:47:37 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-10-19 23:47:37 +0000 |
commit | 628954652f59fd3f074fb0a5a1a4432b51b8376e (patch) | |
tree | 3b5da15f129045252cfd4a54199db7ea08ebfdd7 /clang/test/SemaCXX/libstdcxx_pair_swap_hack.cpp | |
parent | 210030ba95df715ec32d1dd2918f2ef8206817f7 (diff) | |
download | bcm5719-llvm-628954652f59fd3f074fb0a5a1a4432b51b8376e.tar.gz bcm5719-llvm-628954652f59fd3f074fb0a5a1a4432b51b8376e.zip |
Extend hack to work around bad exception specifications for 'swap' members to
also cover libstdc++'s std::__debug::array and std::__profile::array.
llvm-svn: 284669
Diffstat (limited to 'clang/test/SemaCXX/libstdcxx_pair_swap_hack.cpp')
-rw-r--r-- | clang/test/SemaCXX/libstdcxx_pair_swap_hack.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/clang/test/SemaCXX/libstdcxx_pair_swap_hack.cpp b/clang/test/SemaCXX/libstdcxx_pair_swap_hack.cpp index 1a92bf98555..9f9c71a50ce 100644 --- a/clang/test/SemaCXX/libstdcxx_pair_swap_hack.cpp +++ b/clang/test/SemaCXX/libstdcxx_pair_swap_hack.cpp @@ -13,6 +13,9 @@ // RUN: %clang_cc1 -fsyntax-only %s -std=c++11 -verify -fexceptions -fcxx-exceptions -DCLASS=priority_queue // RUN: %clang_cc1 -fsyntax-only %s -std=c++11 -verify -fexceptions -fcxx-exceptions -DCLASS=stack // RUN: %clang_cc1 -fsyntax-only %s -std=c++11 -verify -fexceptions -fcxx-exceptions -DCLASS=queue +// +// RUN: %clang_cc1 -fsyntax-only %s -std=c++11 -verify -fexceptions -fcxx-exceptions -DCLASS=array -DNAMESPACE=__debug +// RUN: %clang_cc1 -fsyntax-only %s -std=c++11 -verify -fexceptions -fcxx-exceptions -DCLASS=array -DNAMESPACE=__profile // MSVC's standard library uses a very similar pattern that relies on delayed // parsing of exception specifications. @@ -32,6 +35,13 @@ namespace std { swap(a, b); } +#ifdef NAMESPACE + namespace NAMESPACE { +#define STD_CLASS std::NAMESPACE::CLASS +#else +#define STD_CLASS std::CLASS +#endif + template<typename A, typename B> struct CLASS { #ifdef MSVC void swap(CLASS &other) noexcept(noexcept(do_swap(member, other.member))); @@ -47,6 +57,10 @@ namespace std { // void swap(vector &other) noexcept(noexcept(do_swap(member, other.member))); // A member; // }; + +#ifdef NAMESPACE + } +#endif } #else @@ -55,8 +69,8 @@ namespace std { #include __FILE__ struct X {}; -using PX = std::CLASS<X, X>; -using PI = std::CLASS<int, int>; +using PX = STD_CLASS<X, X>; +using PI = STD_CLASS<int, int>; void swap(X &, X &) noexcept; PX px; PI pi; |