p3.cpp revision 0a29422eb722c0ffbb98b98d8636042b19069f1a
1600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// RUN: %clang_cc1 -fsyntax-only -verify %s
2600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
3600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangvoid f1() {
4600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang  struct X {
5600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    struct Y;
6600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang  };
7600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
8600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang  struct X::Y {
9600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    void f() {}
10600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang  };
11600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
12600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
13600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangvoid f2() {
14600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang  struct X {
15600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    struct Y;
16600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
17600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    struct Y {
18600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang      void f() {}
19600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    };
20600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang  };
21600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
22600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
23600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// A class nested within a local class is a local class.
24600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangvoid f3(int a) { // expected-note{{'a' declared here}}
25600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang  struct X {
26600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    struct Y {
27600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang      int f() { return a; } // expected-error{{reference to local variable 'a' declared in enclosing function 'f3'}}
28600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    };
29600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang  };
30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang