1 // RUN: %clang_cc1 -fsyntax-only -verify %s 2 3 namespace test0 { 4 struct A { 5 static int foo; 6 }; 7 8 namespace i0 { 9 typedef int A; // expected-note {{declared here}} 10 test()11 int test() { 12 struct A a; // expected-error {{elaborated type refers to a typedef}} 13 return a.foo; 14 } 15 } 16 17 namespace i1 { 18 template <class> class A; // expected-note {{declared here}} 19 test()20 int test() { 21 struct A a; // expected-error {{elaborated type refers to a template}} 22 return a.foo; 23 } 24 } 25 26 namespace i2 { 27 int A; 28 test()29 int test() { 30 struct A a; 31 return a.foo; 32 } 33 } 34 35 namespace i3 { 36 void A(); 37 test()38 int test() { 39 struct A a; 40 return a.foo; 41 } 42 } 43 44 namespace i4 { 45 template <class T> void A(); 46 test()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 // rdar://problem/7898108 55 typedef struct A A; test()56 int test() { 57 struct A a; 58 return a.foo; 59 } 60 } 61