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 Livoid 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