summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/libstdcxx_pair_swap_hack.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2016-10-19 23:47:37 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2016-10-19 23:47:37 +0000
commit628954652f59fd3f074fb0a5a1a4432b51b8376e (patch)
tree3b5da15f129045252cfd4a54199db7ea08ebfdd7 /clang/test/SemaCXX/libstdcxx_pair_swap_hack.cpp
parent210030ba95df715ec32d1dd2918f2ef8206817f7 (diff)
downloadbcm5719-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.cpp18
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;
OpenPOWER on IntegriCloud