1ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// RUN: %clang_cc1 -fsyntax-only -verify %s
2ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
3ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<typename T, typename U>
4ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct X0 {
5ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  struct Inner;
6ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao};
7ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
8ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<typename T, typename U>
9ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct X0<T, U>::Inner {
10ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  T x;
11ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  U y;
12ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
13ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  void f() { x = y; } // expected-error{{incompatible}}
14ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao};
15ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
16ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
17ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid test(int i, float f) {
18ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  X0<int, float>::Inner inner;
19ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  inner.x = 5;
20ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  inner.y = 3.4;
21ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  inner.f();
22ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
23ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  X0<int*, float *>::Inner inner2;
24ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  inner2.x = &i;
25ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  inner2.y = &f;
26ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  inner2.f(); // expected-note{{instantiation}}
27ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}
28