mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-18 11:46:40 +00:00

These tests check that invalid declarations don't hide any other declarations, but valid declarations do hide invalid declarations.
60 lines
1.7 KiB
C++
60 lines
1.7 KiB
C++
// RUN: %clang_cc1 -fsyntax-only -verify %s
|
|
|
|
// Member Test1 hides class Test1
|
|
class Test1 {
|
|
static int Test1; // expected-error {{member 'Test1' has the same name as its class}}
|
|
// expected-note@-1 {{class 'Test1' is hidden by a non-type declaration of 'Test1' here}}
|
|
void fn1() {
|
|
Test1 x; // expected-error {{must use 'class' tag to refer to type 'Test1' in this scope}}
|
|
}
|
|
int fn2() {
|
|
return Test1;
|
|
}
|
|
};
|
|
|
|
// Member Test2 doesn't hide class Test2 as its declaration is invalid
|
|
class Test2 { // expected-note {{declared here}}
|
|
static NoSuchType Test2; // expected-error {{unknown type name 'NoSuchType'}}
|
|
// expected-error@-1 {{member 'Test2' has the same name as its class}}
|
|
void fn1() {
|
|
Test2 x;
|
|
}
|
|
int fn2() {
|
|
return Test2; // expected-error {{'Test2' does not refer to a value}}
|
|
}
|
|
};
|
|
|
|
// Test3a::x doesn't hide Test3b::x as its declaration is invalid
|
|
namespace Test3a {
|
|
NoSuchType x() { return 0; } // expected-error {{unknown type name 'NoSuchType'}}
|
|
}
|
|
namespace Test3b {
|
|
class x; // expected-note {{declared here}}
|
|
}
|
|
using Test3a::x;
|
|
using Test3b::x;
|
|
int test3_fn() {
|
|
return x; // expected-error {{'x' does not refer to a value}}
|
|
}
|
|
|
|
// Function Test4 hides class Test4, whose declaration is invalid
|
|
class Test4 : public NoSuchType { // expected-error {{expected class name}}
|
|
|
|
};
|
|
int Test4() { return 0; }
|
|
|
|
int test4_fn() {
|
|
return Test4();
|
|
}
|
|
|
|
// Function Test5 doesn't hide class Test5 when both are invalid
|
|
class Test5 : public NoSuchType { // expected-error {{expected class name}}
|
|
|
|
};
|
|
NoSuchType Test5() { return 0; } // expected-error {{unknown type name 'NoSuchType'}}
|
|
|
|
Test5 test5_fn() {
|
|
Test5 x;
|
|
return x;
|
|
}
|