From 628954652f59fd3f074fb0a5a1a4432b51b8376e Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Wed, 19 Oct 2016 23:47:37 +0000 Subject: 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 --- clang/test/SemaCXX/libstdcxx_pair_swap_hack.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'clang/test/SemaCXX/libstdcxx_pair_swap_hack.cpp') 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 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; -using PI = std::CLASS; +using PX = STD_CLASS; +using PI = STD_CLASS; void swap(X &, X &) noexcept; PX px; PI pi; -- cgit v1.2.3