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