60 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify %s2 3namespace test0 {4 struct A {5 static int foo;6 };7 8 namespace i0 {9 typedef int A; // expected-note {{declared here}}10 11 int test() {12 struct A a; // expected-error {{typedef 'A' cannot be referenced with the 'struct' specifier}}13 return a.foo;14 }15 }16 17 namespace i1 {18 template <class> class A; // expected-note {{declared here}}19 20 int test() {21 struct A a; // expected-error {{template 'A' cannot be referenced with the 'struct' specifier}}22 return a.foo;23 }24 }25 26 namespace i2 {27 int A;28 29 int test() {30 struct A a;31 return a.foo;32 }33 }34 35 namespace i3 {36 void A();37 38 int test() {39 struct A a;40 return a.foo;41 }42 }43 44 namespace i4 {45 template <class T> void A();46 47 int test() {48 struct A a;49 return a.foo;50 }51 }52 53 // This should magically be okay; see comment in SemaDecl.cpp.54 typedef struct A A;55 int test() {56 struct A a;57 return a.foo;58 }59}60