1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s
2e41590d2504d73453d58f22e9176088990555cc1Anders Carlsson
3e41590d2504d73453d58f22e9176088990555cc1Anders Carlssonvoid f1() {
4e41590d2504d73453d58f22e9176088990555cc1Anders Carlsson  struct X {
5e41590d2504d73453d58f22e9176088990555cc1Anders Carlsson    struct Y;
6e41590d2504d73453d58f22e9176088990555cc1Anders Carlsson  };
7e41590d2504d73453d58f22e9176088990555cc1Anders Carlsson
8e41590d2504d73453d58f22e9176088990555cc1Anders Carlsson  struct X::Y {
9e41590d2504d73453d58f22e9176088990555cc1Anders Carlsson    void f() {}
10e41590d2504d73453d58f22e9176088990555cc1Anders Carlsson  };
11e41590d2504d73453d58f22e9176088990555cc1Anders Carlsson}
12e41590d2504d73453d58f22e9176088990555cc1Anders Carlsson
13e41590d2504d73453d58f22e9176088990555cc1Anders Carlssonvoid f2() {
14e41590d2504d73453d58f22e9176088990555cc1Anders Carlsson  struct X {
15e41590d2504d73453d58f22e9176088990555cc1Anders Carlsson    struct Y;
16e41590d2504d73453d58f22e9176088990555cc1Anders Carlsson
17e41590d2504d73453d58f22e9176088990555cc1Anders Carlsson    struct Y {
18e41590d2504d73453d58f22e9176088990555cc1Anders Carlsson      void f() {}
19e41590d2504d73453d58f22e9176088990555cc1Anders Carlsson    };
20e41590d2504d73453d58f22e9176088990555cc1Anders Carlsson  };
21e41590d2504d73453d58f22e9176088990555cc1Anders Carlsson}
22e41590d2504d73453d58f22e9176088990555cc1Anders Carlsson
23e41590d2504d73453d58f22e9176088990555cc1Anders Carlsson// A class nested within a local class is a local class.
24e41590d2504d73453d58f22e9176088990555cc1Anders Carlssonvoid f3(int a) { // expected-note{{'a' declared here}}
25e41590d2504d73453d58f22e9176088990555cc1Anders Carlsson  struct X {
26e41590d2504d73453d58f22e9176088990555cc1Anders Carlsson    struct Y {
270a29422eb722c0ffbb98b98d8636042b19069f1aEli Friedman      int f() { return a; } // expected-error{{reference to local variable 'a' declared in enclosing function 'f3'}}
28e41590d2504d73453d58f22e9176088990555cc1Anders Carlsson    };
29e41590d2504d73453d58f22e9176088990555cc1Anders Carlsson  };
30f0a6a0c29fb733b934930374554c84a83db5a790Mike Stump}
31