1// RUN: %clang_cc1 -fsyntax-only -verify %s
2
3// PR5868
4struct T0 {
5  int x;
6  union {
7    void *m0;
8  };
9};
10template <typename T>
11struct 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}}
12  void f0() {
13    m0 = 0; // expected-error{{ambiguous conversion}}
14  }
15};
16
17struct A : public T0 { };
18
19void f1(T1<A> *S) { S->f0(); } // expected-note{{instantiation of member function}} expected-note{{in instantiation of template class 'T1<A>' requested here}}
20
21namespace 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
36  void test() {
37    X<int>::inner i;
38    i.x = 0;
39  }
40}
41