1// RUN: %clang_cc1 -fsyntax-only -verify %s
2
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 {{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
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
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  // rdar://problem/7898108
55  typedef struct A A;
56  int test() {
57    struct A a;
58    return a.foo;
59  }
60}
61