blob: a8c2e8ece06432c3d1ba4739ac48841e98a3d4cf [file] [log] [blame]
John Brawn6244e382023-08-15 14:25:28 +01001// RUN: %clang_cc1 -fsyntax-only -verify %s
2
3// Member Test1 hides class Test1
4class Test1 {
5 static int Test1; // expected-error {{member 'Test1' has the same name as its class}}
6 // expected-note@-1 {{class 'Test1' is hidden by a non-type declaration of 'Test1' here}}
7 void fn1() {
8 Test1 x; // expected-error {{must use 'class' tag to refer to type 'Test1' in this scope}}
9 }
10 int fn2() {
11 return Test1;
12 }
13};
14
15// Member Test2 doesn't hide class Test2 as its declaration is invalid
16class Test2 { // expected-note {{declared here}}
17 static NoSuchType Test2; // expected-error {{unknown type name 'NoSuchType'}}
18 // expected-error@-1 {{member 'Test2' has the same name as its class}}
19 void fn1() {
20 Test2 x;
21 }
22 int fn2() {
23 return Test2; // expected-error {{'Test2' does not refer to a value}}
24 }
25};
26
27// Test3a::x doesn't hide Test3b::x as its declaration is invalid
28namespace Test3a {
29 NoSuchType x() { return 0; } // expected-error {{unknown type name 'NoSuchType'}}
30}
31namespace Test3b {
32 class x; // expected-note {{declared here}}
33}
34using Test3a::x;
35using Test3b::x;
36int test3_fn() {
37 return x; // expected-error {{'x' does not refer to a value}}
38}
39
40// Function Test4 hides class Test4, whose declaration is invalid
41class Test4 : public NoSuchType { // expected-error {{expected class name}}
42
43};
44int Test4() { return 0; }
45
46int test4_fn() {
47 return Test4();
48}
49
50// Function Test5 doesn't hide class Test5 when both are invalid
51class Test5 : public NoSuchType { // expected-error {{expected class name}}
52
53};
54NoSuchType Test5() { return 0; } // expected-error {{unknown type name 'NoSuchType'}}
55
56Test5 test5_fn() {
57 Test5 x;
58 return x;
59}