Skip to content

Commit 6244e38

Browse files
[Sema] Add tests for handling of decls hidden by invalid decls
These tests check that invalid declarations don't hide any other declarations, but valid declarations do hide invalid declarations.
1 parent 3aed002 commit 6244e38

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
// RUN: %clang_cc1 -fsyntax-only -verify %s
2+
3+
// Member Test1 hides class Test1
4+
class 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
16+
class 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
28+
namespace Test3a {
29+
NoSuchType x() { return 0; } // expected-error {{unknown type name 'NoSuchType'}}
30+
}
31+
namespace Test3b {
32+
class x; // expected-note {{declared here}}
33+
}
34+
using Test3a::x;
35+
using Test3b::x;
36+
int 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
41+
class Test4 : public NoSuchType { // expected-error {{expected class name}}
42+
43+
};
44+
int Test4() { return 0; }
45+
46+
int test4_fn() {
47+
return Test4();
48+
}
49+
50+
// Function Test5 doesn't hide class Test5 when both are invalid
51+
class Test5 : public NoSuchType { // expected-error {{expected class name}}
52+
53+
};
54+
NoSuchType Test5() { return 0; } // expected-error {{unknown type name 'NoSuchType'}}
55+
56+
Test5 test5_fn() {
57+
Test5 x;
58+
return x;
59+
}

0 commit comments

Comments
 (0)