1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2 
3 // PR5868
4 struct T0 {
5   int x;
6   union {
7     void *m0;
8   };
9 };
10 template <typename T>
11 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   void f0() {
13     m0 = 0; // expected-error{{ambiguous conversion}}
14   }
15 };
16 
17 struct A : public T0 { };
18 
f1(T1<A> * S)19 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 
21 namespace rdar8635664 {
22   template<typename T>
23   struct X {
24     struct inner;
25 
26     struct inner {
27       union {
28         int x;
29         float y;
30       };
31 
32       typedef T type;
33     };
34   };
35 
test()36   void test() {
37     X<int>::inner i;
38     i.x = 0;
39   }
40 }
41