xref: /aosp_15_r20/external/clang/test/SemaTemplate/anonymous-union.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s
2*67e74705SXin Li 
3*67e74705SXin Li // PR5868
4*67e74705SXin Li struct T0 {
5*67e74705SXin Li   int x;
6*67e74705SXin Li   union {
7*67e74705SXin Li     void *m0;
8*67e74705SXin Li   };
9*67e74705SXin Li };
10*67e74705SXin Li template <typename T>
11*67e74705SXin Li struct T1 : public T0, public T { //expected-warning{{direct base 'T0' is inaccessible due to ambiguity:\n    struct T1<struct A> -> struct T0\n    struct T1<struct A> -> struct A -> struct T0}}
f0T112*67e74705SXin Li   void f0() {
13*67e74705SXin Li     m0 = 0; // expected-error{{ambiguous conversion}}
14*67e74705SXin Li   }
15*67e74705SXin Li };
16*67e74705SXin Li 
17*67e74705SXin Li struct A : public T0 { };
18*67e74705SXin Li 
f1(T1<A> * S)19*67e74705SXin Li void f1(T1<A> *S) { S->f0(); } // expected-note{{instantiation of member function}} expected-note{{in instantiation of template class 'T1<A>' requested here}}
20*67e74705SXin Li 
21*67e74705SXin Li namespace rdar8635664 {
22*67e74705SXin Li   template<typename T>
23*67e74705SXin Li   struct X {
24*67e74705SXin Li     struct inner;
25*67e74705SXin Li 
26*67e74705SXin Li     struct inner {
27*67e74705SXin Li       union {
28*67e74705SXin Li         int x;
29*67e74705SXin Li         float y;
30*67e74705SXin Li       };
31*67e74705SXin Li 
32*67e74705SXin Li       typedef T type;
33*67e74705SXin Li     };
34*67e74705SXin Li   };
35*67e74705SXin Li 
test()36*67e74705SXin Li   void test() {
37*67e74705SXin Li     X<int>::inner i;
38*67e74705SXin Li     i.x = 0;
39*67e74705SXin Li   }
40*67e74705SXin Li }
41