diff --git a/clang/test/CXX/drs/dr0xx.cpp b/clang/test/CXX/drs/dr0xx.cpp --- a/clang/test/CXX/drs/dr0xx.cpp +++ b/clang/test/CXX/drs/dr0xx.cpp @@ -5,7 +5,8 @@ // RUN: %clang_cc1 -std=c++20 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -triple %itanium_abi_triple // RUN: %clang_cc1 -std=c++23 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -triple %itanium_abi_triple -namespace dr1 { // dr1: no +//--- dr1: no +namespace dr1 { namespace X { extern "C" void dr1_f(int a = 1); } namespace Y { extern "C" void dr1_f(int a = 1); } using X::dr1_f; using Y::dr1_f; @@ -48,14 +49,16 @@ } } -namespace dr3 { // dr3: yes +//--- dr3: yes +namespace dr3 { template struct A {}; template void f(T) { A a; } // expected-note {{implicit instantiation}} template void f(int); template<> struct A {}; // expected-error {{explicit specialization of 'dr3::A' after instantiation}} } -namespace dr4 { // dr4: yes +//--- dr4: yes +namespace dr4 { extern "C" { static void dr4_f(int) {} static void dr4_f(float) {} @@ -64,7 +67,8 @@ } } -namespace dr5 { // dr5: yes +//--- dr5: yes +namespace dr5 { struct A {} a; struct B { B(const A&); @@ -78,7 +82,8 @@ const C c = e; } -namespace dr7 { // dr7: yes +//--- dr7: yes +namespace dr7 { class A { public: ~A(); }; class B : virtual private A {}; // expected-note 2 {{declared private here}} class C : public B {} c; // expected-error 2 {{inherited virtual base class 'A' has private destructor}} \ @@ -102,7 +107,8 @@ } } -namespace dr8 { // dr8: dup 45 +//--- dr8: dup 45 +namespace dr8 { class A { struct U; static const int k = 5; @@ -114,7 +120,8 @@ A::T *A::g() { return 0; } } -namespace dr9 { // dr9: yes +//--- dr9: yes +namespace dr9 { struct B { protected: int m; // expected-note {{here}} @@ -127,7 +134,8 @@ int R2() { return n.m; } } -namespace dr10 { // dr10: dup 45 +//--- dr10: dup 45 +namespace dr10 { class A { struct B { A::B *p; @@ -135,7 +143,8 @@ }; } -namespace dr11 { // dr11: yes +//--- dr11: yes +namespace dr11 { template struct A : T { using typename T::U; U u; @@ -148,7 +157,8 @@ A ax; } -namespace dr12 { // dr12: sup 239 +//--- dr12: sup 239 +namespace dr12 { enum E { e }; E &f(E, E = e); void g() { @@ -160,7 +170,8 @@ } } -namespace dr13 { // dr13: no +//--- dr13: no +namespace dr13 { extern "C" void f(int); void g(char); @@ -175,7 +186,8 @@ int a4 = h(g); } -namespace dr14 { // dr14: yes +//--- dr14: yes +namespace dr14 { namespace X { extern "C" int dr14_f(); } namespace Y { extern "C" int dr14_f(); } using namespace X; @@ -196,12 +208,14 @@ U u; // expected-error {{ambiguous}} } -namespace dr15 { // dr15: yes +//--- dr15: yes +namespace dr15 { template void f(int); // expected-note {{previous}} template void f(int = 0); // expected-error {{default arguments cannot be added}} } -namespace dr16 { // dr16: yes +//--- dr16: yes +namespace dr16 { class A { // expected-note {{here}} void f(); // expected-note {{here}} friend class C; @@ -215,7 +229,8 @@ }; } -namespace dr17 { // dr17: yes +//--- dr17: yes +namespace dr17 { class A { int n; int f(); @@ -230,7 +245,8 @@ // dr18: sup 577 -namespace dr19 { // dr19: yes +//--- dr19: yes +namespace dr19 { struct A { int n; // expected-note {{here}} }; @@ -243,7 +259,8 @@ }; } -namespace dr20 { // dr20: yes +//--- dr20: yes +namespace dr20 { class X { public: X(); @@ -254,7 +271,8 @@ X x = f(); // expected-error {{private}} } -namespace dr21 { // dr21: yes +//--- dr21: yes +namespace dr21 { template struct A; struct X { template friend struct A; // expected-error {{default template argument not permitted on a friend template}} @@ -262,13 +280,15 @@ }; } -namespace dr22 { // dr22: sup 481 +//--- dr22: sup 481 +namespace dr22 { template struct X; // expected-error {{unknown type name 'dr22_T'}} typedef int T; template struct Y; } -namespace dr23 { // dr23: yes +//--- dr23: yes +namespace dr23 { template void f(T, T); // expected-note {{candidate}} template void f(T, int); // expected-note {{candidate}} void g() { f(0, 0); } // expected-error {{ambiguous}} @@ -276,7 +296,8 @@ // dr24: na -namespace dr25 { // dr25: yes +//--- dr25: yes +namespace dr25 { struct A { void f() throw(int); // expected-error 0-1{{ISO C++17 does not allow}} expected-note 0-1{{use 'noexcept}} }; @@ -315,7 +336,8 @@ } } -namespace dr26 { // dr26: yes +//--- dr26: yes +namespace dr26 { struct A { A(A, const A & = A()); }; // expected-error {{must pass its first argument by reference}} struct B { B(); @@ -331,14 +353,16 @@ }; } -namespace dr27 { // dr27: yes +//--- dr27: yes +namespace dr27 { enum E { e } n; E &m = true ? n : n; } // dr28: na lib -namespace dr29 { // dr29: 3.4 +//--- dr29: 3.4 +namespace dr29 { void dr29_f0(); // expected-note {{here}} void g0() { void dr29_f0(); } extern "C++" void g0_cxx() { void dr29_f0(); } @@ -383,7 +407,8 @@ } } -namespace dr30 { // dr30: sup 468 c++11 +//--- dr30: sup 468 c++11 +namespace dr30 { struct A { template static int f(); } a, *p = &a; @@ -398,7 +423,8 @@ #endif } -namespace dr31 { // dr31: yes +//--- dr31: yes +namespace dr31 { class X { private: void operator delete(void*); // expected-note {{here}} @@ -410,7 +436,8 @@ // dr32: na -namespace dr33 { // dr33: yes +//--- dr33: yes +namespace dr33 { namespace X { struct S; void f(void (*)(S)); } // expected-note {{candidate}} namespace Y { struct T; void f(void (*)(T)); } // expected-note {{candidate}} void g(X::S); @@ -451,7 +478,8 @@ // dr34: na // dr35: dup 178 -namespace dr36 { // dr36: yes +//--- dr36: yes +namespace dr36 { namespace example1 { namespace A { int i; @@ -540,13 +568,15 @@ // dr37: sup 475 -namespace dr38 { // dr38: yes +//--- dr38: yes +namespace dr38 { template struct X {}; template X operator+(X a, X b) { return a; } template X operator+(X, X); } -namespace dr39 { // dr39: no +//--- dr39: no +namespace dr39 { namespace example1 { struct A { int &f(int); }; struct B : A { @@ -609,25 +639,29 @@ // dr40: na -namespace dr41 { // dr41: yes +//--- dr41: yes +namespace dr41 { struct S f(S); } -namespace dr42 { // dr42: yes +//--- dr42: yes +namespace dr42 { struct A { static const int k = 0; }; struct B : A { static const int k = A::k; }; } // dr43: na -namespace dr44 { // dr44: sup 727 +//--- dr44: sup 727 +namespace dr44 { struct A { template void f(); template<> void f<0>(); }; } -namespace dr45 { // dr45: yes +//--- dr45: yes +namespace dr45 { class A { class B {}; class C : B {}; @@ -635,12 +669,14 @@ }; } -namespace dr46 { // dr46: yes +//--- dr46: yes +namespace dr46 { template struct A { template struct B {}; }; template template struct A::B; // expected-error {{expected unqualified-id}} } -namespace dr47 { // dr47: sup 329 +//--- dr47: sup 329 +namespace dr47 { template struct A { friend void f() { T t; } // expected-error {{redefinition}} expected-note {{previous}} }; @@ -651,7 +687,8 @@ void g() { f(); } } -namespace dr48 { // dr48: yes +//--- dr48: yes +namespace dr48 { namespace { struct S { static const int m = 0; @@ -667,7 +704,8 @@ const int &c = S::o; } -namespace dr49 { // dr49: yes +//--- dr49: yes +namespace dr49 { template struct A {}; // expected-note 0-2{{here}} int k; #if __has_feature(cxx_constexpr) @@ -693,7 +731,8 @@ #endif } -namespace dr50 { // dr50: yes +//--- dr50: yes +namespace dr50 { struct X; // expected-note {{forward}} extern X *p; X *q = (X*)p; @@ -703,7 +742,8 @@ X *u = dynamic_cast(p); // expected-error {{incomplete}} } -namespace dr51 { // dr51: yes +//--- dr51: yes +namespace dr51 { struct A {}; struct B : A {}; struct S { @@ -713,7 +753,8 @@ A &a = s; } -namespace dr52 { // dr52: yes +//--- dr52: yes +namespace dr52 { struct A { int n; }; // expected-note {{here}} struct B : private A {} b; // expected-note 2{{private}} // FIXME: This first diagnostic is very strangely worded, and seems to be bogus. @@ -721,12 +762,14 @@ // expected-error@-1 {{cannot cast 'struct B' to its private base}} } -namespace dr53 { // dr53: yes +//--- dr53: yes +namespace dr53 { int n = 0; enum E { e } x = static_cast(n); } -namespace dr54 { // dr54: yes +//--- dr54: yes +namespace dr54 { struct A { int a; } a; struct V { int v; } v; struct B : private A, virtual V { int b; } b; // expected-note 6{{private here}} @@ -760,12 +803,14 @@ int B::*cmbv = (int B::*)(&V::v); // expected-error {{virtual base}} } -namespace dr55 { // dr55: yes +//--- dr55: yes +namespace dr55 { enum E { e = 5 }; int test[(e + 1 == 6) ? 1 : -1]; } -namespace dr56 { // dr56: yes +//--- dr56: yes +namespace dr56 { struct A { typedef int T; // expected-note {{previous}} typedef int T; // expected-error {{redefinition}} @@ -777,7 +822,8 @@ }; } -namespace dr58 { // dr58: yes +//--- dr58: yes +namespace dr58 { // FIXME: Ideally, we should have a CodeGen test for this. #if __cplusplus >= 201103L enum E1 { E1_0 = 0, E1_1 = 1 }; @@ -788,7 +834,8 @@ #endif } -namespace dr59 { // dr59: yes +//--- dr59: yes +namespace dr59 { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-volatile" template struct convert_to { operator T() const; }; @@ -827,14 +874,16 @@ #pragma clang diagnostic pop } -namespace dr60 { // dr60: yes +//--- dr60: yes +namespace dr60 { void f(int &); int &f(...); const int k = 0; int &n = f(k); } -namespace dr61 { // dr61: yes +//--- dr61: yes +namespace dr61 { struct X { static void f(); } x; @@ -849,7 +898,8 @@ void (*r)() = y.f; // expected-error {{cannot create a non-constant pointer to member function}} } -namespace dr62 { // dr62: yes +//--- dr62: yes +namespace dr62 { struct A { struct { int n; } b; }; @@ -904,13 +954,15 @@ } } -namespace dr63 { // dr63: yes +//--- dr63: yes +namespace dr63 { template struct S { typename T::error e; }; extern S *p; void *q = p; } -namespace dr64 { // dr64: yes +//--- dr64: yes +namespace dr64 { template void f(T); template void f(T*); template<> void f(int*); @@ -920,7 +972,8 @@ // dr65: na -namespace dr66 { // dr66: no +//--- dr66: no +namespace dr66 { namespace X { int f(int n); // expected-note 2{{candidate}} } @@ -937,7 +990,8 @@ // dr67: na -namespace dr68 { // dr68: yes +//--- dr68: yes +namespace dr68 { template struct X {}; struct ::dr68::X x1; struct ::dr68::template X x2; @@ -962,7 +1016,8 @@ }; } -namespace dr69 { // dr69: yes +//--- dr69: yes +namespace dr69 { template static void f() {} // #dr69-f // FIXME: Should we warn here? inline void g() { f(); } @@ -977,7 +1032,8 @@ #endif } -namespace dr70 { // dr70: yes +//--- dr70: yes +namespace dr70 { template struct A {}; template int f(int (&)[I + J], A, A); int arr[7]; @@ -988,37 +1044,43 @@ // dr72: dup 69 #if __cplusplus >= 201103L -namespace dr73 { // dr73: sup 1652 +//--- dr73: sup 1652 +namespace dr73 { int a, b; static_assert(&a + 1 != &b, ""); // expected-error {{not an integral constant expression}} // expected-note@-1 {{comparison against pointer '&a + 1' that points past the end of a complete object}} } #endif -namespace dr74 { // dr74: yes +//--- dr74: yes +namespace dr74 { enum E { k = 5 }; int (*p)[k] = new int[k][k]; } -namespace dr75 { // dr75: yes +//--- dr75: yes +namespace dr75 { struct S { static int n = 0; // expected-error {{non-const}} }; } -namespace dr76 { // dr76: yes +//--- dr76: yes +namespace dr76 { const volatile int n = 1; int arr[n]; // expected-error +{{variable length array}} expected-note {{read of volatile}} } -namespace dr77 { // dr77: yes +//--- dr77: yes +namespace dr77 { struct A { struct B {}; friend struct B; }; } -namespace dr78 { // dr78: sup ???? +//--- dr78: sup ???? +namespace dr78 { // Under DR78, this is valid, because 'k' has static storage duration, so is // zero-initialized. const int k; // expected-error {{default initialization of an object of const}} @@ -1026,7 +1088,8 @@ // dr79: na -namespace dr80 { // dr80: yes +//--- dr80: yes +namespace dr80 { struct A { int A; }; @@ -1046,13 +1109,15 @@ // dr81: na // dr82: dup 48 -namespace dr83 { // dr83: yes +//--- dr83: yes +namespace dr83 { int &f(const char*); char &f(char *); int &k = f("foo"); } -namespace dr84 { // dr84: yes +//--- dr84: yes +namespace dr84 { struct B; struct A { operator B() const; }; struct C {}; @@ -1070,7 +1135,8 @@ #endif } -namespace dr85 { // dr85: yes +//--- dr85: yes +namespace dr85 { struct A { struct B; struct B {}; // expected-note{{previous declaration is here}} @@ -1100,7 +1166,8 @@ // dr86: dup 446 -namespace dr87 { // dr87: no +//--- dr87: no +namespace dr87 { // FIXME: Superseded by dr1975 template struct X {}; // FIXME: This is invalid. @@ -1109,7 +1176,8 @@ X y; } -namespace dr88 { // dr88: yes +//--- dr88: yes +namespace dr88 { template struct S { static const int a = 1; // expected-note {{previous}} static const int b; @@ -1120,7 +1188,8 @@ // dr89: na -namespace dr90 { // dr90: yes +//--- dr90: yes +namespace dr90 { struct A { template friend void dr90_f(T); }; @@ -1149,12 +1218,14 @@ } } -namespace dr91 { // dr91: yes +//--- dr91: yes +namespace dr91 { union U { friend int f(U); }; int k = f(U()); } -namespace dr92 { // dr92: 4 c++17 +//--- dr92: 4 c++17 +namespace dr92 { void f() throw(int, float); // expected-error 0-1{{ISO C++17 does not allow}} expected-note 0-1{{use 'noexcept}} void (*p)() throw(int) = &f; // expected-error 0-1{{ISO C++17 does not allow}} expected-note 0-1{{use 'noexcept}} #if __cplusplus <= 201402L @@ -1192,12 +1263,14 @@ // dr93: na -namespace dr94 { // dr94: yes +//--- dr94: yes +namespace dr94 { struct A { static const int n = 5; }; int arr[A::n]; } -namespace dr95 { // dr95: yes +//--- dr95: yes +namespace dr95 { struct A; struct B; namespace N { @@ -1212,7 +1285,8 @@ struct B { void f() { N::C::f(); } }; // expected-error {{private}} } -namespace dr96 { // dr96: no +//--- dr96: no +namespace dr96 { struct A { void f(int); template int f(T); @@ -1232,14 +1306,16 @@ } } -namespace dr97 { // dr97: yes +//--- dr97: yes +namespace dr97 { struct A { static const int a = false; static const int b = !a; }; } -namespace dr98 { // dr98: yes +//--- dr98: yes +namespace dr98 { void test(int n) { switch (n) { try { // expected-note 2{{bypasses}} @@ -1259,7 +1335,8 @@ } } -namespace dr99 { // dr99: sup 214 +//--- dr99: sup 214 +namespace dr99 { template void f(T&); template int &f(const T&); const int n = 0; diff --git a/clang/test/CXX/drs/dr10xx.cpp b/clang/test/CXX/drs/dr10xx.cpp --- a/clang/test/CXX/drs/dr10xx.cpp +++ b/clang/test/CXX/drs/dr10xx.cpp @@ -14,7 +14,8 @@ }; } -namespace dr1004 { // dr1004: 5 +//--- dr1004: 5 +namespace dr1004 { template struct A {}; template struct B1 {}; template class> struct B2 {}; @@ -37,7 +38,8 @@ Third > t; // expected-note {{in instantiation of default argument}} } -namespace dr1042 { // dr1042: 3.5 +//--- dr1042: 3.5 +namespace dr1042 { #if __cplusplus >= 201402L // C++14 added an attribute that we can test the semantics of. using foo [[deprecated]] = int; // expected-note {{'foo' has been explicitly marked deprecated here}} @@ -50,7 +52,8 @@ #endif } -namespace dr1048 { // dr1048: 3.6 +//--- dr1048: 3.6 +namespace dr1048 { struct A {}; const A f(); A g(); @@ -68,7 +71,8 @@ #endif } -namespace dr1054 { // dr1054: no +//--- dr1054: no +namespace dr1054 { // FIXME: Test is incomplete. struct A {} volatile a; void f() { @@ -80,7 +84,8 @@ } } -namespace dr1070 { // dr1070: 3.5 +//--- dr1070: 3.5 +namespace dr1070 { #if __cplusplus >= 201103L struct A { A(std::initializer_list); diff --git a/clang/test/CXX/drs/dr11xx.cpp b/clang/test/CXX/drs/dr11xx.cpp --- a/clang/test/CXX/drs/dr11xx.cpp +++ b/clang/test/CXX/drs/dr11xx.cpp @@ -4,7 +4,8 @@ // RUN: %clang_cc1 -std=c++17 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors // RUN: %clang_cc1 -std=c++2a %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -namespace dr1111 { // dr1111: yes +//--- dr1111: yes +namespace dr1111 { namespace example1 { template struct set; @@ -44,7 +45,8 @@ } // namespace example2 } // namespace dr1111 -namespace dr1113 { // dr1113: partial +//--- dr1113: partial +namespace dr1113 { namespace named { extern int a; // expected-note {{previous}} static int a; // expected-error {{static declaration of 'a' follows non-static}} diff --git a/clang/test/CXX/drs/dr12xx.cpp b/clang/test/CXX/drs/dr12xx.cpp --- a/clang/test/CXX/drs/dr12xx.cpp +++ b/clang/test/CXX/drs/dr12xx.cpp @@ -7,7 +7,8 @@ // dr1200: na -namespace dr1213 { // dr1213: 7 +//--- dr1213: 7 +namespace dr1213 { #if __cplusplus >= 201103L using T = int[3]; int &&r = T{}[1]; @@ -32,7 +33,8 @@ } #if __cplusplus >= 201103L -namespace dr1223 { // dr1227: yes open +//--- dr1227: yes open +namespace dr1223 { struct M; template struct V; @@ -81,7 +83,8 @@ #endif #if __cplusplus >= 201103L -namespace dr1227 { // dr1227: yes +//--- dr1227: yes +namespace dr1227 { template struct A { using X = typename T::X; }; // expected-error {{type 'int' cannot be used prior to '::' because it has no members}} template typename T::X f(typename A::X); template void f(...) { } @@ -95,7 +98,8 @@ } #endif -namespace dr1250 { // dr1250: 3.9 +//--- dr1250: 3.9 +namespace dr1250 { struct Incomplete; struct Base { @@ -107,7 +111,8 @@ }; } -namespace dr1265 { // dr1265: 5 +//--- dr1265: 5 +namespace dr1265 { #if __cplusplus >= 201103L auto a = 0, b() -> int; // expected-error {{declaration with trailing return type must be the only declaration in its group}} auto b() -> int, d = 0; // expected-error {{declaration with trailing return type must be the only declaration in its group}} @@ -123,7 +128,8 @@ // dr1291: na -namespace dr1295 { // dr1295: 4 +//--- dr1295: 4 +namespace dr1295 { struct X { unsigned bitfield : 4; }; diff --git a/clang/test/CXX/drs/dr13xx.cpp b/clang/test/CXX/drs/dr13xx.cpp --- a/clang/test/CXX/drs/dr13xx.cpp +++ b/clang/test/CXX/drs/dr13xx.cpp @@ -14,7 +14,8 @@ } #if __cplusplus >= 201103L -namespace dr1305 { // dr1305: yes +//--- dr1305: yes +namespace dr1305 { struct Incomplete; // expected-note {{forward declaration of 'dr1305::Incomplete'}} struct Complete {}; @@ -23,7 +24,8 @@ } #endif -namespace dr1307 { // dr1307: 14 +//--- dr1307: 14 +namespace dr1307 { #if __cplusplus >= 201103L void f(int const (&)[2]); void f(int const (&)[3]); @@ -35,7 +37,8 @@ #endif // __cplusplus >= 201103L } // namespace dr1307 -namespace dr1310 { // dr1310: 5 +//--- dr1310: 5 +namespace dr1310 { struct S {} * sp = new S::S; // expected-error {{qualified reference to 'S' is a constructor name}} void f() { S::S(a); // expected-error {{qualified reference to 'S' is a constructor name}} @@ -115,7 +118,8 @@ template void wt_test_good >(); } -namespace dr1315 { // dr1315: partial +//--- dr1315: partial +namespace dr1315 { template struct A {}; template // expected-note {{non-deducible template parameter 'I'}} struct A {}; // expected-error {{contains a template parameter that cannot be deduced}} @@ -143,7 +147,8 @@ // expected-error@-1 {{type of specialized non-type template argument depends on a template parameter of the partial specialization}} } -namespace dr1330 { // dr1330: 4 c++11 +//--- dr1330: 4 c++11 +namespace dr1330 { // exception-specifications are parsed in a context where the class is complete. struct A { void f() throw(T) {} // expected-error 0-1{{C++17}} expected-note 0-1{{noexcept}} @@ -254,7 +259,8 @@ #endif } -namespace dr1346 { // dr1346: 3.5 +//--- dr1346: 3.5 +namespace dr1346 { auto a(1); // expected-error 0-1{{extension}} auto b(1, 2); // expected-error {{multiple expressions}} expected-error 0-1{{extension}} #if __cplusplus >= 201103L @@ -280,7 +286,8 @@ #endif } -namespace dr1347 { // dr1347: yes +//--- dr1347: yes +namespace dr1347 { auto x = 5, *y = &x; // expected-error 0-1{{extension}} auto z = y, *q = y; // expected-error {{'auto' deduced as 'int *' in declaration of 'z' and deduced as 'int' in declaration of 'q'}} expected-error 0-1{{extension}} #if __cplusplus >= 201103L @@ -289,7 +296,8 @@ #endif } -namespace dr1358 { // dr1358: yes +//--- dr1358: yes +namespace dr1358 { #if __cplusplus >= 201103L struct Lit { constexpr operator int() const { return 0; } }; struct NonLit { NonLit(); operator int(); }; // expected-note 2{{no constexpr constructors}} @@ -325,7 +333,8 @@ #endif } -namespace dr1359 { // dr1359: 3.5 +//--- dr1359: 3.5 +namespace dr1359 { #if __cplusplus >= 201103L union A { constexpr A() = default; }; union B { constexpr B() = default; int a; }; // expected-error {{not constexpr}} expected-note 2{{candidate}} @@ -341,7 +350,8 @@ #endif } -namespace dr1388 { // dr1388: 4 +//--- dr1388: 4 +namespace dr1388 { template void f(T..., A); // expected-note 1+{{candidate}} expected-error 0-1{{C++11}} template void g(T..., int); // expected-note 1+{{candidate}} expected-error 0-1{{C++11}} template void h(T..., A); // expected-note 1+{{candidate}} expected-error 0-1{{C++11}} @@ -384,7 +394,8 @@ } } -namespace dr1391 { // dr1391: partial +//--- dr1391: partial +namespace dr1391 { struct A {}; struct B : A {}; template struct C { C(int); typename T::error error; }; // expected-error 2{{'::'}} template struct D {}; @@ -462,14 +473,16 @@ } } -namespace dr1394 { // dr1394: 15 +//--- dr1394: 15 +namespace dr1394 { #if __cplusplus >= 201103L struct Incomplete; Incomplete f(Incomplete) = delete; // well-formed #endif } -namespace dr1395 { // dr1395: 16 +//--- dr1395: 16 +namespace dr1395 { #if __cplusplus >= 201103L template void f(T, U...); template void f(T); @@ -480,7 +493,8 @@ #endif } -namespace dr1399 { // dr1399: dup 1388 +//--- dr1399: dup 1388 +namespace dr1399 { template void f(T..., int, T...) {} // expected-note {{candidate}} expected-error 0-1{{C++11}} void g() { f(0); diff --git a/clang/test/CXX/drs/dr14xx.cpp b/clang/test/CXX/drs/dr14xx.cpp --- a/clang/test/CXX/drs/dr14xx.cpp +++ b/clang/test/CXX/drs/dr14xx.cpp @@ -4,7 +4,8 @@ // RUN: %clang_cc1 -std=c++17 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors // RUN: %clang_cc1 -std=c++2a %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -namespace dr1413 { // dr1413: 12 +//--- dr1413: 12 +namespace dr1413 { template struct Check { typedef int type; }; @@ -27,7 +28,8 @@ }; } -namespace dr1423 { // dr1423: 11 +//--- dr1423: 11 +namespace dr1423 { #if __cplusplus >= 201103L bool b1 = nullptr; // expected-error {{cannot initialize}} bool b2(nullptr); // expected-warning {{implicit conversion of nullptr constant to 'bool'}} @@ -38,7 +40,8 @@ // dr1425: na abi -namespace dr1432 { // dr1432: 16 +//--- dr1432: 16 +namespace dr1432 { #if __cplusplus >= 201103L template T declval(); @@ -59,14 +62,16 @@ #endif } -namespace dr1443 { // dr1443: yes +//--- dr1443: yes +namespace dr1443 { struct A { int i; A() { void foo(int=i); } // expected-error {{default argument references 'this'}} }; } -namespace dr1460 { // dr1460: 3.5 +//--- dr1460: 3.5 +namespace dr1460 { #if __cplusplus >= 201103L namespace DRExample { union A { @@ -484,12 +489,14 @@ #endif } // dr1467 -namespace dr1479 { // dr1479: yes +//--- dr1479: yes +namespace dr1479 { int operator"" _a(const char*, std::size_t = 0); // expected-error {{literal operator cannot have a default argument}} } -namespace dr1482 { // dr1482: yes - // NB: sup 2516, test reused there +//--- dr1482: yes +// NB: sup 2516, test reused there +namespace dr1482 { #if __cplusplus >= 201103L template struct S { typedef char I; @@ -506,7 +513,8 @@ std::initializer_list{"abc"}; // expected-error {{expected unqualified-id}}} } // dr1490 -namespace dr1495 { // dr1495: 4 +//--- dr1495: 4 +namespace dr1495 { // Deduction succeeds in both directions. template struct A {}; // expected-note {{template is declared here}} template struct A {}; // expected-error {{class template partial specialization is not more specialized}} @@ -534,7 +542,8 @@ #endif } -namespace dr1496 { // dr1496: no +//--- dr1496: no +namespace dr1496 { #if __cplusplus >= 201103L struct A { A() = delete; diff --git a/clang/test/CXX/drs/dr15xx.cpp b/clang/test/CXX/drs/dr15xx.cpp --- a/clang/test/CXX/drs/dr15xx.cpp +++ b/clang/test/CXX/drs/dr15xx.cpp @@ -3,7 +3,8 @@ // RUN: %clang_cc1 -std=c++14 -triple x86_64-unknown-unknown %s -verify=expected,cxx14_17 -fexceptions -fcxx-exceptions -pedantic-errors // RUN: %clang_cc1 -std=c++17 -triple x86_64-unknown-unknown %s -verify=expected,cxx17 -fexceptions -fcxx-exceptions -pedantic-errors -namespace dr1512 { // dr1512: 4 +//--- dr1512: 4 +namespace dr1512 { void f(char *p) { if (p > 0) {} // expected-error {{ordered comparison between pointer and zero}} #if __cplusplus >= 201103L @@ -135,7 +136,8 @@ #endif } -namespace dr1514 { // dr1514: 11 +//--- dr1514: 11 +namespace dr1514 { #if __cplusplus >= 201103L struct S { enum E : int {}; // expected-note {{previous}} @@ -147,7 +149,8 @@ #endif } -namespace dr1518 { // dr1518: 4 +//--- dr1518: 4 +namespace dr1518 { #if __cplusplus >= 201103L struct Z0 { // expected-note 0+ {{candidate}} explicit Z0() = default; // expected-note 0+ {{here}} @@ -233,13 +236,15 @@ #endif // __cplusplus >= 201103L } -namespace dr1550 { // dr1550: yes +//--- dr1550: yes +namespace dr1550 { int f(bool b, int n) { return (b ? (throw 0) : n) + (b ? n : (throw 0)); } } -namespace dr1558 { // dr1558: 12 +//--- dr1558: 12 +namespace dr1558 { #if __cplusplus >= 201103L template using first_of = T; template first_of f(int); // expected-note {{'int' cannot be used prior to '::'}} @@ -253,7 +258,8 @@ #endif } -namespace dr1560 { // dr1560: 3.5 +//--- dr1560: 3.5 +namespace dr1560 { void f(bool b, int n) { (b ? throw 0 : n) = (b ? n : throw 0) = 0; } @@ -262,7 +268,8 @@ const X &x = true ? get() : throw 0; } -namespace dr1563 { // dr1563: yes +//--- dr1563: yes +namespace dr1563 { #if __cplusplus >= 201103L double bar(double) { return 0.0; } float bar(float) { return 0.0f; } @@ -272,7 +279,8 @@ #endif } -namespace dr1573 { // dr1573: 3.9 +//--- dr1573: 3.9 +namespace dr1573 { #if __cplusplus >= 201103L // ellipsis is inherited (p0136r1 supersedes this part). struct A { A(); A(int, char, ...); }; @@ -337,7 +345,8 @@ } // std -namespace dr1579 { // dr1579: 3.9 +//--- dr1579: 3.9 +namespace dr1579 { template struct GenericMoveOnly { GenericMoveOnly(); diff --git a/clang/test/CXX/drs/dr16xx.cpp b/clang/test/CXX/drs/dr16xx.cpp --- a/clang/test/CXX/drs/dr16xx.cpp +++ b/clang/test/CXX/drs/dr16xx.cpp @@ -23,7 +23,8 @@ } // std #endif -namespace dr1601 { // dr1601: 10 +//--- dr1601: 10 +namespace dr1601 { enum E : char { e }; #if __cplusplus < 201103L // expected-error@-2 {{enumeration types with a fixed underlying type are a C++11 extension}} @@ -35,7 +36,8 @@ } } // namespace dr1601 -namespace dr1611 { // dr1611: dup 1658 +//--- dr1611: dup 1658 +namespace dr1611 { struct A { A(int); }; struct B : virtual A { virtual void f() = 0; }; struct C : B { C() : A(0) {} void f(); }; @@ -68,7 +70,8 @@ #endif } -namespace dr1638 { // dr1638: yes +//--- dr1638: yes +namespace dr1638 { #if __cplusplus >= 201103L template struct A { enum class E; // expected-note {{previous}} @@ -97,7 +100,8 @@ #endif } -namespace dr1645 { // dr1645: 3.9 +//--- dr1645: 3.9 +namespace dr1645 { #if __cplusplus >= 201103L struct A { constexpr A(int, float = 0); // expected-note {{candidate}} @@ -114,13 +118,15 @@ #endif } -namespace dr1652 { // dr1652: 3.6 +//--- dr1652: 3.6 +namespace dr1652 { int a, b; int arr[&a + 1 == &b ? 1 : 2]; // expected-error 2{{variable length array}} // expected-note@-1 {{points past the end}} } -namespace dr1653 { // dr1653: 4 c++17 +//--- dr1653: 4 c++17 +namespace dr1653 { void f(bool b) { ++b; b++; @@ -136,7 +142,8 @@ } } -namespace dr1658 { // dr1658: 5 +//--- dr1658: 5 +namespace dr1658 { namespace DefCtor { class A { A(); }; // expected-note 0-2{{here}} class B { ~B(); }; // expected-note 0-2{{here}} @@ -247,7 +254,8 @@ // assignment case is superseded by dr2180 } -namespace dr1672 { // dr1672: 7 +//--- dr1672: 7 +namespace dr1672 { struct Empty {}; struct A : Empty {}; struct B { Empty e; }; @@ -272,7 +280,8 @@ static_assert(!__is_standard_layout(Y), ""); } -namespace dr1684 { // dr1684: 3.6 +//--- dr1684: 3.6 +namespace dr1684 { #if __cplusplus >= 201103L struct NonLiteral { // expected-note {{because}} NonLiteral(); @@ -283,7 +292,8 @@ #endif } -namespace dr1687 { // dr1687: 7 +//--- dr1687: 7 +namespace dr1687 { template struct To { operator T(); // expected-note 2{{first operand was implicitly converted to type 'int *'}} // expected-note@-1 {{second operand was implicitly converted to type 'double'}} @@ -302,7 +312,8 @@ #endif } -namespace dr1690 { // dr1690: 9 +//--- dr1690: 9 +namespace dr1690 { // See also the various tests in "CXX/basic/basic.lookup/basic.lookup.argdep". #if __cplusplus >= 201103L namespace N { @@ -317,7 +328,8 @@ #endif } -namespace dr1691 { // dr1691: 9 +//--- dr1691: 9 +namespace dr1691 { #if __cplusplus >= 201103L namespace N { namespace M { @@ -335,7 +347,8 @@ #endif } -namespace dr1692 { // dr1692: 9 +//--- dr1692: 9 +namespace dr1692 { namespace N { struct A { struct B { @@ -350,7 +363,8 @@ } } -namespace dr1696 { // dr1696: 7 +//--- dr1696: 7 +namespace dr1696 { namespace std_examples { #if __cplusplus >= 201402L extern struct A a; diff --git a/clang/test/CXX/drs/dr177x.cpp b/clang/test/CXX/drs/dr177x.cpp --- a/clang/test/CXX/drs/dr177x.cpp +++ b/clang/test/CXX/drs/dr177x.cpp @@ -4,7 +4,8 @@ // RUN: %clang_cc1 -std=c++1z %s -fexceptions -fcxx-exceptions -pedantic-errors -ast-dump | FileCheck %s --check-prefixes=CHECK,CXX11,CXX14 // RUN: %clang_cc1 -std=c++1z %s -fexceptions -fcxx-exceptions -pedantic-errors -triple i386-windows-pc -ast-dump | FileCheck %s --check-prefixes=CHECK,CXX11,CXX14 -namespace dr1772 { // dr1772: 14 +//--- dr1772: 14 +namespace dr1772 { // __func__ in a lambda should name operator(), not the containing function. // CHECK: NamespaceDecl{{.+}}dr1772 #if __cplusplus >= 201103L @@ -30,7 +31,8 @@ #endif // __cplusplus >= 201103L } -namespace dr1779 { // dr1779: 14 +//--- dr1779: 14 +namespace dr1779 { // __func__ in a function template, member function template, or generic // lambda should have a dependent type. // CHECK: NamespaceDecl{{.+}}dr1779 diff --git a/clang/test/CXX/drs/dr17xx.cpp b/clang/test/CXX/drs/dr17xx.cpp --- a/clang/test/CXX/drs/dr17xx.cpp +++ b/clang/test/CXX/drs/dr17xx.cpp @@ -3,7 +3,8 @@ // RUN: %clang_cc1 -std=c++14 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors // RUN: %clang_cc1 -std=c++1z %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -namespace dr1715 { // dr1715: 3.9 +//--- dr1715: 3.9 +namespace dr1715 { #if __cplusplus >= 201103L struct B { template B(T, typename T::Q); @@ -27,7 +28,8 @@ #endif } -namespace dr1722 { // dr1722: 9 +//--- dr1722: 9 +namespace dr1722 { #if __cplusplus >= 201103L void f() { const auto lambda = [](int x) { return x + 1; }; @@ -39,7 +41,8 @@ #endif } // namespace dr1722 -namespace dr1734 { // dr1734: no +//--- dr1734: no +namespace dr1734 { #if __cplusplus >= 201103L struct A { A(const A&) = delete; @@ -51,7 +54,8 @@ #endif } -namespace dr1736 { // dr1736: 3.9 +//--- dr1736: 3.9 +namespace dr1736 { #if __cplusplus >= 201103L struct S { template S(T t) { @@ -67,7 +71,8 @@ #endif } -namespace dr1753 { // dr1753: 11 +//--- dr1753: 11 +namespace dr1753 { typedef int T; struct A { typedef int T; }; namespace B { typedef int T; } @@ -93,7 +98,8 @@ } } -namespace dr1756 { // dr1756: 3.7 +//--- dr1756: 3.7 +namespace dr1756 { #if __cplusplus >= 201103L // Direct-list-initialization of a non-class object @@ -104,7 +110,8 @@ #endif } -namespace dr1758 { // dr1758: 3.7 +//--- dr1758: 3.7 +namespace dr1758 { #if __cplusplus >= 201103L // Explicit conversion in copy/move list initialization @@ -123,7 +130,8 @@ #endif } -namespace dr1762 { // dr1762: 14 +//--- dr1762: 14 +namespace dr1762 { #if __cplusplus >= 201103L float operator ""_E(const char *); // expected-error@+2 {{invalid suffix on literal; C++11 requires a space between literal and identifier}} @@ -132,7 +140,8 @@ #endif } -namespace dr1778 { // dr1778: 9 +//--- dr1778: 9 +namespace dr1778 { // Superseded by P1286R2. #if __cplusplus >= 201103L struct A { A() noexcept(true) = default; }; diff --git a/clang/test/CXX/drs/dr18xx.cpp b/clang/test/CXX/drs/dr18xx.cpp --- a/clang/test/CXX/drs/dr18xx.cpp +++ b/clang/test/CXX/drs/dr18xx.cpp @@ -10,7 +10,8 @@ #define static_assert(...) __extension__ _Static_assert(__VA_ARGS__) #endif -namespace dr1813 { // dr1813: 7 +//--- dr1813: 7 +namespace dr1813 { struct B { int i; }; struct C : B {}; struct D : C {}; @@ -32,7 +33,8 @@ static_assert(!__is_standard_layout(U), ""); } -namespace dr1814 { // dr1814: yes +//--- dr1814: yes +namespace dr1814 { #if __cplusplus >= 201103L void test() { auto lam = [](int x = 42) { return x; }; @@ -40,7 +42,8 @@ #endif } -namespace dr1815 { // dr1815: no +//--- dr1815: no +namespace dr1815 { #if __cplusplus >= 201402L // FIXME: needs codegen test struct A { int &&r = 0; }; // expected-note {{default member init}} @@ -51,7 +54,8 @@ #endif } -namespace dr1821 { // dr1821: yes +//--- dr1821: yes +namespace dr1821 { struct A { template struct B { void f(); @@ -67,7 +71,8 @@ }; } // namespace dr1821 -namespace dr1822 { // dr1822: yes +//--- dr1822: yes +namespace dr1822 { #if __cplusplus >= 201103L int a; auto x = [] (int a) { @@ -76,7 +81,8 @@ #endif } -namespace dr1837 { // dr1837: 3.3 +//--- dr1837: 3.3 +namespace dr1837 { #if __cplusplus >= 201103L template struct Fish { static const bool value = true; }; @@ -113,7 +119,8 @@ #endif } -namespace dr1872 { // dr1872: 9 +//--- dr1872: 9 +namespace dr1872 { #if __cplusplus >= 201103L template struct A : T { constexpr int f() const { return 0; } @@ -140,7 +147,8 @@ #endif } -namespace dr1881 { // dr1881: 7 +//--- dr1881: 7 +namespace dr1881 { struct A { int a : 4; }; struct B : A { int b : 3; }; static_assert(__is_standard_layout(A), ""); @@ -185,8 +193,9 @@ #endif } -namespace dr1894 { // dr1894: 3.8 - // NB: reusing part of dr407 test +//--- dr1894: 3.8 +// NB: reusing part of dr407 test +namespace dr1894 { namespace A { struct S {}; } diff --git a/clang/test/CXX/drs/dr19xx.cpp b/clang/test/CXX/drs/dr19xx.cpp --- a/clang/test/CXX/drs/dr19xx.cpp +++ b/clang/test/CXX/drs/dr19xx.cpp @@ -5,7 +5,8 @@ namespace std { struct type_info; } -namespace dr1902 { // dr1902: 3.7 +//--- dr1902: 3.7 +namespace dr1902 { struct A {}; struct B { B(A); @@ -64,7 +65,8 @@ } } -namespace dr1909 { // dr1909: yes +//--- dr1909: yes +namespace dr1909 { struct A { template struct A {}; // expected-error {{member 'A' has the same name as its class}} }; @@ -79,7 +81,8 @@ }; } -namespace dr1940 { // dr1940: yes +//--- dr1940: yes +namespace dr1940 { #if __cplusplus >= 201103L static union { static_assert(true, ""); // ok @@ -89,7 +92,8 @@ #endif } -namespace dr1941 { // dr1941: 3.9 +//--- dr1941: 3.9 +namespace dr1941 { #if __cplusplus >= 201402L template struct base { @@ -119,7 +123,8 @@ #endif } -namespace dr1947 { // dr1947: yes +//--- dr1947: yes +namespace dr1947 { #if __cplusplus >= 201402L unsigned o = 0'01; // ok unsigned b = 0b'01; // expected-error {{invalid digit 'b' in octal constant}} @@ -133,7 +138,8 @@ void *operator new(__SIZE_TYPE__) noexcept { return nullptr; } // expected-error{{exception specification in declaration does not match previous declaration}} #endif -namespace dr1959 { // dr1959: 3.9 +//--- dr1959: 3.9 +namespace dr1959 { #if __cplusplus >= 201103L struct b; struct c; @@ -167,7 +173,8 @@ #endif } -namespace dr1960 { // dr1960: no +//--- dr1960: no +namespace dr1960 { struct A { void f() {} protected: @@ -188,7 +195,8 @@ }; } -namespace dr1966 { // dr1966: 11 +//--- dr1966: 11 +namespace dr1966 { #if __cplusplus >= 201103L struct A { enum E : int {1}; // expected-error {{expected identifier}} (not bit-field) @@ -205,7 +213,8 @@ #endif } -namespace dr1968 { // dr1968: no +//--- dr1968: no +namespace dr1968 { #if __cplusplus >= 201103L // FIXME: According to DR1968, both of these should be considered // non-constant. @@ -216,7 +225,8 @@ #endif } -namespace dr1991 { // dr1991: 3.9 +//--- dr1991: 3.9 +namespace dr1991 { #if __cplusplus >= 201103L struct A { A(int, int) = delete; diff --git a/clang/test/CXX/drs/dr1xx.cpp b/clang/test/CXX/drs/dr1xx.cpp --- a/clang/test/CXX/drs/dr1xx.cpp +++ b/clang/test/CXX/drs/dr1xx.cpp @@ -5,7 +5,8 @@ // RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-unknown %s -verify -fexceptions -fcxx-exceptions -pedantic-errors // RUN: %clang_cc1 -std=c++23 -triple x86_64-unknown-unknown %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -namespace dr100 { // dr100: yes +//--- dr100: yes +namespace dr100 { template struct A {}; // expected-note 0-1{{declared here}} template struct B {}; // expected-note 0-1{{declared here}} template struct C {}; // expected-note 0-1{{declared here}} @@ -27,7 +28,8 @@ #endif } -namespace dr101 { // dr101: 3.5 +//--- dr101: 3.5 +namespace dr101 { extern "C" void dr101_f(); typedef unsigned size_t; namespace X { @@ -40,7 +42,8 @@ typedef unsigned size_t; } -namespace dr102 { // dr102: yes +//--- dr102: yes +namespace dr102 { namespace A { template T f(T a, T b) { return a + b; } // expected-error {{neither visible in the template definition nor found by argument-dependent lookup}} } @@ -55,7 +58,8 @@ // dr104: na lib // dr105: na -namespace dr106 { // dr106: sup 540 +//--- dr106: sup 540 +namespace dr106 { typedef int &r1; typedef r1 &r1; typedef const r1 r1; // expected-warning {{has no effect}} @@ -67,12 +71,14 @@ typedef const r2 &r2; // expected-warning {{has no effect}} } -namespace dr107 { // dr107: yes +//--- dr107: yes +namespace dr107 { struct S {}; extern "C" S operator+(S, S) { return S(); } } -namespace dr108 { // dr108: yes +//--- dr108: yes +namespace dr108 { template struct A { struct B { typedef int X; }; B::X x; @@ -84,7 +90,8 @@ template<> struct A::B { int X; }; } -namespace dr109 { // dr109: yes +//--- dr109: yes +namespace dr109 { struct A { template void f(T); }; template struct B : T { using T::template f; // expected-error {{'template' keyword not permitted here}} @@ -95,14 +102,16 @@ }; } -namespace dr111 { // dr111: dup 535 +//--- dr111: dup 535 +namespace dr111 { struct A { A(); A(volatile A&, int = 0); A(A&, const char * = "foo"); }; struct B : A { B(); }; // expected-note +{{would lose const qualifier}} expected-note {{requires 0 arguments}} const B b1; B b2(b1); // expected-error {{no matching constructor}} } -namespace dr112 { // dr112: yes +//--- dr112: yes +namespace dr112 { struct T { int n; }; typedef T Arr[1]; @@ -123,7 +132,8 @@ #endif } -namespace dr113 { // dr113: yes +//--- dr113: yes +namespace dr113 { extern void (*p)(); void f() { no_such_function(); // expected-error {{undeclared}} @@ -133,7 +143,8 @@ void (*p)() = &g; } -namespace dr114 { // dr114: yes +//--- dr114: yes +namespace dr114 { struct A { virtual void f(int) = 0; // expected-note {{unimplemented}} }; @@ -143,7 +154,8 @@ } b; // expected-error {{abstract}} } -namespace dr115 { // dr115: yes +//--- dr115: yes +namespace dr115 { template int f(T); // expected-note +{{}} template int g(T); // expected-note +{{}} template int g(T, int); // expected-note +{{}} @@ -216,7 +228,8 @@ #endif } -namespace dr116 { // dr116: yes +//--- dr116: yes +namespace dr116 { template struct A {}; template void f(A) {} // expected-note {{previous}} template void f(A) {} // expected-error {{redefinition}} @@ -229,7 +242,8 @@ // dr119: na // dr120: na -namespace dr121 { // dr121: yes +//--- dr121: yes +namespace dr121 { struct X { template struct Y {}; }; @@ -240,7 +254,8 @@ Z z; } -namespace dr122 { // dr122: yes +//--- dr122: yes +namespace dr122 { template void f(); void g() { f(); } } @@ -261,7 +276,8 @@ }; } -namespace dr126 { // dr126: partial +//--- dr126: partial +namespace dr126 { // FIXME: We do not yet generate correct code for this change: // eg: // catch (void*&) should catch void* but not int* @@ -355,7 +371,8 @@ #endif } -namespace dr127 { // dr127: yes +//--- dr127: yes +namespace dr127 { __extension__ typedef __decltype(sizeof(0)) size_t; template struct A { A() { throw 0; } @@ -367,7 +384,8 @@ A *q = new ("") A; // expected-note {{instantiat}} } -namespace dr128 { // dr128: yes +//--- dr128: yes +namespace dr128 { enum E1 { e1 } x = e1; enum E2 { e2 } y = static_cast(x), z = static_cast(e1); } @@ -375,13 +393,15 @@ // dr129: dup 616 // dr130: na -namespace dr131 { // dr131: sup P1949 +//--- dr131: sup P1949 +namespace dr131 { const char *a_with_\u0e8c = "\u0e8c"; const char *b_with_\u0e8d = "\u0e8d"; const char *c_with_\u0e8e = "\u0e8e"; } -namespace dr132 { // dr132: no +//--- dr132: no +namespace dr132 { void f() { extern struct {} x; // ok extern struct S {} y; // FIXME: This is invalid. @@ -392,7 +412,8 @@ // dr133: dup 87 // dr134: na -namespace dr135 { // dr135: yes +//--- dr135: yes +namespace dr135 { struct A { A f(A a) { return a; } friend A g(A a) { return a; } @@ -400,7 +421,8 @@ }; } -namespace dr136 { // dr136: 3.4 +//--- dr136: 3.4 +namespace dr136 { void f(int, int, int = 0); // expected-note {{previous declaration is here}} void g(int, int, int); // expected-note {{previous declaration is here}} struct A { @@ -434,7 +456,8 @@ }; } -namespace dr137 { // dr137: yes +//--- dr137: yes +namespace dr137 { extern void *p; extern const void *cp; extern volatile void *vp; @@ -453,7 +476,8 @@ const volatile int *cvqcv = static_cast(cvp); } -namespace dr139 { // dr139: yes +//--- dr139: yes +namespace dr139 { namespace example1 { typedef int f; // expected-note {{previous}} struct A { @@ -473,14 +497,16 @@ } } -namespace dr140 { // dr140: yes +//--- dr140: yes +namespace dr140 { void f(int *const) {} // expected-note {{previous}} void f(int[3]) {} // expected-error {{redefinition}} void g(const int); void g(int n) { n = 2; } } -namespace dr141 { // dr141: yes +//--- dr141: yes +namespace dr141 { template void f(); template struct S { int n; }; // expected-note {{'::dr141::S::n' declared here}} struct A : S { @@ -518,7 +544,8 @@ void i() { C().i(); } // ok!! } -namespace dr142 { // dr142: yes +//--- dr142: yes +namespace dr142 { class B { // expected-note +{{here}} public: int mi; // expected-note +{{here}} @@ -546,7 +573,8 @@ } } -namespace dr143 { // dr143: yes +//--- dr143: yes +namespace dr143 { namespace A { struct X; } namespace B { void f(A::X); } namespace A { @@ -557,7 +585,8 @@ } } -namespace dr145 { // dr145: yes +//--- dr145: yes +namespace dr145 { void f(bool b) { #if __cplusplus <= 201402L ++b; // expected-warning {{deprecated}} @@ -569,7 +598,8 @@ } } -namespace dr147 { // dr147: yes +//--- dr147: yes +namespace dr147 { namespace example1 { template struct A { template A(T); @@ -594,7 +624,8 @@ } } -namespace dr148 { // dr148: yes +//--- dr148: yes +namespace dr148 { struct A { int A::*p; }; int check1[__is_pod(int(A::*)) ? 1 : -1]; int check2[__is_pod(A) ? 1 : -1]; @@ -602,7 +633,8 @@ // dr149: na -namespace dr151 { // dr151: yes +//--- dr151: yes +namespace dr151 { struct X {}; typedef int X::*p; #if __cplusplus < 201103L @@ -614,7 +646,8 @@ #undef fold } -namespace dr152 { // dr152: yes +//--- dr152: yes +namespace dr152 { struct A { A(); // expected-note 0-2{{not viable}} explicit A(const A&); // expected-note 1-2{{not a candidate}} @@ -632,7 +665,8 @@ // dr153: na -namespace dr154 { // dr154: yes +//--- dr154: yes +namespace dr154 { union { int a; }; // expected-error {{must be declared 'static'}} namespace { union { int b; }; @@ -640,13 +674,15 @@ static union { int c; }; } -namespace dr155 { // dr155: dup 632 +//--- dr155: dup 632 +namespace dr155 { struct S { int n; } s = { { 1 } }; // expected-warning {{braces around scalar initializer}} } // dr158 is in its own file. -namespace dr159 { // dr159: 3.5 +//--- dr159: 3.5 +namespace dr159 { namespace X { void f(); } void f(); void dr159::f() {} // expected-warning {{extra qualification}} @@ -655,7 +691,8 @@ // dr160: na -namespace dr161 { // dr161: yes +//--- dr161: yes +namespace dr161 { class A { protected: struct B { int n; } b; // expected-note 2{{here}} @@ -686,7 +723,8 @@ }; } -namespace dr162 { // dr162: no +//--- dr162: no +namespace dr162 { struct A { char &f(char); static int &f(int); @@ -703,7 +741,8 @@ // dr163: na -namespace dr164 { // dr164: yes +//--- dr164: yes +namespace dr164 { void f(int); template int g(T t) { return f(t); } @@ -713,7 +752,8 @@ int k = g(e); } -namespace dr165 { // dr165: no +//--- dr165: no +namespace dr165 { namespace N { struct A { friend struct B; }; void f() { void g(); } @@ -724,7 +764,8 @@ void N::g() {} } -namespace dr166 { // dr166: yes +//--- dr166: yes +namespace dr166 { namespace A { class X; } template int f(T t) { return t.n; } @@ -753,7 +794,8 @@ // dr167: sup 1012 -namespace dr168 { // dr168: no +//--- dr168: no +namespace dr168 { extern "C" typedef int (*p)(); extern "C++" typedef int (*q)(); struct S { @@ -763,7 +805,8 @@ q b = &S::f; } -namespace dr169 { // dr169: yes +//--- dr169: yes +namespace dr169 { template struct A { int n; }; struct B { template struct C; @@ -787,7 +830,8 @@ extern "C" void dr171b(); // expected-error {{conflicts}} } -namespace dr172 { // dr172: yes +//--- dr172: yes +namespace dr172 { enum { zero }; int check1[-1 < zero ? 1 : -1]; @@ -819,7 +863,8 @@ int check8b[-f > 0 ? 1 : -1]; } -namespace dr173 { // dr173: yes +//--- dr173: yes +namespace dr173 { int check[('0' + 1 == '1' && '0' + 2 == '2' && '0' + 3 == '3' && '0' + 4 == '4' && '0' + 5 == '5' && '0' + 6 == '6' && '0' + 7 == '7' && '0' + 8 == '8' && '0' + 9 == '9') ? 1 : -1]; @@ -827,7 +872,8 @@ // dr174: sup 1012 -namespace dr175 { // dr175: yes +//--- dr175: yes +namespace dr175 { struct A {}; // expected-note {{here}} struct B : private A {}; // expected-note {{constrained by private inheritance}} struct C : B { @@ -836,7 +882,8 @@ }; } -namespace dr176 { // dr176: yes +//--- dr176: yes +namespace dr176 { template class Y; template<> class Y { void f() { @@ -867,7 +914,8 @@ }; } -namespace dr177 { // dr177: yes +//--- dr177: yes +namespace dr177 { struct B {}; struct A { A(A &); // expected-note 0-1{{not viable: expects an lvalue}} @@ -886,7 +934,8 @@ C c = e; // expected-error {{no viable constructor copying variable of type 'D'}} } -namespace dr178 { // dr178: yes +//--- dr178: yes +namespace dr178 { int check[int() == 0 ? 1 : -1]; #if __cplusplus >= 201103L static_assert(int{} == 0, ""); @@ -899,12 +948,14 @@ #endif } -namespace dr179 { // dr179: yes +//--- dr179: yes +namespace dr179 { void f(); int n = &f - &f; // expected-error {{arithmetic on pointers to the function type 'void ()'}} } -namespace dr180 { // dr180: yes +//--- dr180: yes +namespace dr180 { template struct X : T, T::some_base { X() : T::some_type_that_might_be_T(), T::some_base() {} friend class T::some_class; @@ -914,7 +965,8 @@ }; } -namespace dr181 { // dr181: yes +//--- dr181: yes +namespace dr181 { namespace X { template