File: invalid-decl-hiding.cpp

package info (click to toggle)
llvm-toolchain-19 1%3A19.1.7-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,998,520 kB
  • sloc: cpp: 6,951,680; ansic: 1,486,157; asm: 913,598; python: 232,024; f90: 80,126; objc: 75,281; lisp: 37,276; pascal: 16,990; sh: 10,009; ml: 5,058; perl: 4,724; awk: 3,523; makefile: 3,167; javascript: 2,504; xml: 892; fortran: 664; cs: 573
file content (59 lines) | stat: -rw-r--r-- 1,714 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// 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;
}