]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CXX/class.derived/class.member.lookup/p10.cpp
Vendor import of clang trunk r300422:
[FreeBSD/FreeBSD.git] / test / CXX / class.derived / class.member.lookup / p10.cpp
1 // RUN: %clang_cc1 -fsyntax-only -verify %s -Wshadow-all
2
3 // Basic cases, ambiguous paths, and fields with different access
4 class A {
5 public:
6   int x;  // expected-note 2{{declared here}}
7 protected:
8   int y;  // expected-note 2{{declared here}}
9 private:
10   int z;
11 };
12
13 struct B : A {
14 };
15
16 struct C : A {
17 };
18
19 struct W {
20   int w;  // expected-note {{declared here}}
21 };
22
23 struct U : W {
24 };
25
26 struct V : W {
27 };
28
29 class D {
30 public:
31   char w; // expected-note {{declared here}}
32 private:
33   char x;
34 };
35
36 // Check direct inheritance and multiple paths to the same base.
37 class E : B, C, D, U, V
38 {
39   unsigned x;  // expected-warning {{non-static data member 'x' of 'E' shadows member inherited from type 'A'}}
40   char y;  // expected-warning {{non-static data member 'y' of 'E' shadows member inherited from type 'A'}}
41   double z;
42   char w;  // expected-warning {{non-static data member 'w' of 'E' shadows member inherited from type 'D'}}  expected-warning {{non-static data member 'w' of 'E' shadows member inherited from type 'W'}}
43 };
44
45 // Virtual inheritance
46 struct F : virtual A {
47 };
48
49 struct G : virtual A {
50 };
51
52 class H : F, G {
53   int x;  // expected-warning {{non-static data member 'x' of 'H' shadows member inherited from type 'A'}}
54   int y;  // expected-warning {{non-static data member 'y' of 'H' shadows member inherited from type 'A'}}
55   int z;
56 };
57
58 // Indirect inheritance
59 struct I {
60   union {
61     int x;  // expected-note {{declared here}}
62     int y;
63   };
64 };
65
66 struct J : I {
67   int x;  // expected-warning {{non-static data member 'x' of 'J' shadows member inherited from type 'I'}}
68 };
69
70 // non-access paths
71 class N : W {
72 };
73
74 struct K {
75   int y;
76 };
77
78 struct L : private K {
79 };
80
81 struct M : L {
82   int y;
83   int w;
84 };
85
86 // Multiple ambiguous paths with different accesses
87 struct A1 {
88   int x;  // expected-note {{declared here}}
89 };
90
91 class B1 : A1 {
92 };
93
94 struct B2 : A1 {
95 };
96
97 struct C1 : B1, B2 {
98 };
99
100 class D1 : C1 {
101 };
102
103 struct D2 : C1 {
104 };
105
106 class D3 : C1 {
107 };
108
109 struct E1 : D1, D2, D3{
110   int x;  // expected-warning {{non-static data member 'x' of 'E1' shadows member inherited from type 'A1'}}
111 };
112
113
114