diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-01-02 19:18:08 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-01-02 19:18:08 +0000 |
| commit | bab175ec4b075c8076ba14c762900392533f6ee4 (patch) | |
| tree | 01f4f29419a2cb10abe13c1e63cd2a66068b0137 /test/SemaCXX/libstdcxx_pair_swap_hack.cpp | |
| parent | 8b7a8012d223fac5d17d16a66bb39168a9a1dfc0 (diff) | |
Notes
Diffstat (limited to 'test/SemaCXX/libstdcxx_pair_swap_hack.cpp')
| -rw-r--r-- | test/SemaCXX/libstdcxx_pair_swap_hack.cpp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/test/SemaCXX/libstdcxx_pair_swap_hack.cpp b/test/SemaCXX/libstdcxx_pair_swap_hack.cpp index 02431e02e48d..9f9c71a50ce1 100644 --- a/test/SemaCXX/libstdcxx_pair_swap_hack.cpp +++ b/test/SemaCXX/libstdcxx_pair_swap_hack.cpp @@ -8,10 +8,14 @@ // affected are array, pair, priority_queue, stack, and queue. // RUN: %clang_cc1 -fsyntax-only %s -std=c++11 -verify -fexceptions -fcxx-exceptions -DCLASS=array +// RUN: %clang_cc1 -fsyntax-only %s -std=c++11 -verify -fexceptions -fcxx-exceptions -DCLASS=array -DPR28423 // RUN: %clang_cc1 -fsyntax-only %s -std=c++11 -verify -fexceptions -fcxx-exceptions -DCLASS=pair // 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. @@ -21,12 +25,23 @@ #ifdef BE_THE_HEADER #pragma GCC system_header +#ifdef PR28423 +using namespace std; +#endif + namespace std { template<typename T> void swap(T &, T &); template<typename T> void do_swap(T &a, T &b) noexcept(noexcept(swap(a, b))) { 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))); @@ -42,6 +57,10 @@ namespace std { // void swap(vector &other) noexcept(noexcept(do_swap(member, other.member))); // A member; // }; + +#ifdef NAMESPACE + } +#endif } #else @@ -50,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; @@ -64,6 +83,7 @@ namespace sad { template<typename A, typename B> struct CLASS { void swap(CLASS &other) noexcept(noexcept(swap(*this, other))); // expected-error {{too many arguments}} expected-note {{declared here}} + // expected-error@-1{{uses itself}} expected-note@-1{{in instantiation of}} }; CLASS<int, int> pi; |
