1ac7c2c8a9d47df7d652364af3043c41816a18fa4Douglas Gregor// RUN: %clang_cc1 -fsyntax-only -verify %s 2ac7c2c8a9d47df7d652364af3043c41816a18fa4Douglas Gregor 3ac7c2c8a9d47df7d652364af3043c41816a18fa4Douglas Gregortemplate<typename T> 46cfacfe54c75baa4d67f1fbdf4f80644b662818eDouglas Gregorstruct X1 { 5cfe833be882f600206f1587f157b025b368497d7Douglas Gregor friend void f6(int) { } // expected-error{{redefinition of}} \ 6cfe833be882f600206f1587f157b025b368497d7Douglas Gregor // expected-note{{previous definition}} 76cfacfe54c75baa4d67f1fbdf4f80644b662818eDouglas Gregor}; 86cfacfe54c75baa4d67f1fbdf4f80644b662818eDouglas Gregor 9238058c372cfb7bdaf489f51171eb1380ebfd6a6Douglas GregorX1<int> x1a; 10238058c372cfb7bdaf489f51171eb1380ebfd6a6Douglas GregorX1<float> x1b; // expected-note {{in instantiation of}} 11df48ddf97fb5a1310c99f3ece5255477dc1bbbdbDouglas Gregor 12df48ddf97fb5a1310c99f3ece5255477dc1bbbdbDouglas Gregortemplate<typename T> 13df48ddf97fb5a1310c99f3ece5255477dc1bbbdbDouglas Gregorstruct X2 { 14df48ddf97fb5a1310c99f3ece5255477dc1bbbdbDouglas Gregor operator int(); 15df48ddf97fb5a1310c99f3ece5255477dc1bbbdbDouglas Gregor 16df48ddf97fb5a1310c99f3ece5255477dc1bbbdbDouglas Gregor friend void f(int x) { } // expected-error{{redefinition}} \ 17df48ddf97fb5a1310c99f3ece5255477dc1bbbdbDouglas Gregor // expected-note{{previous definition}} 18df48ddf97fb5a1310c99f3ece5255477dc1bbbdbDouglas Gregor}; 19df48ddf97fb5a1310c99f3ece5255477dc1bbbdbDouglas Gregor 20df48ddf97fb5a1310c99f3ece5255477dc1bbbdbDouglas Gregorint array0[sizeof(X2<int>)]; 21df48ddf97fb5a1310c99f3ece5255477dc1bbbdbDouglas Gregorint array1[sizeof(X2<float>)]; // expected-note{{instantiation of}} 22df48ddf97fb5a1310c99f3ece5255477dc1bbbdbDouglas Gregor 23df48ddf97fb5a1310c99f3ece5255477dc1bbbdbDouglas Gregorvoid g() { 24df48ddf97fb5a1310c99f3ece5255477dc1bbbdbDouglas Gregor X2<int> xi; 25df48ddf97fb5a1310c99f3ece5255477dc1bbbdbDouglas Gregor f(xi); 26df48ddf97fb5a1310c99f3ece5255477dc1bbbdbDouglas Gregor X2<float> xf; 27df48ddf97fb5a1310c99f3ece5255477dc1bbbdbDouglas Gregor f(xf); 28df48ddf97fb5a1310c99f3ece5255477dc1bbbdbDouglas Gregor} 2922050f25e34ba0cd21ee2dc3d765951c48e27cdeRichard Smith 3022050f25e34ba0cd21ee2dc3d765951c48e27cdeRichard Smithtemplate<typename T> 3122050f25e34ba0cd21ee2dc3d765951c48e27cdeRichard Smithstruct X3 { 3222050f25e34ba0cd21ee2dc3d765951c48e27cdeRichard Smith operator int(); 3322050f25e34ba0cd21ee2dc3d765951c48e27cdeRichard Smith 3422050f25e34ba0cd21ee2dc3d765951c48e27cdeRichard Smith friend void h(int x); 3522050f25e34ba0cd21ee2dc3d765951c48e27cdeRichard Smith}; 3622050f25e34ba0cd21ee2dc3d765951c48e27cdeRichard Smith 3722050f25e34ba0cd21ee2dc3d765951c48e27cdeRichard Smithint array2[sizeof(X3<int>)]; 3822050f25e34ba0cd21ee2dc3d765951c48e27cdeRichard Smithint array3[sizeof(X3<float>)]; 3922050f25e34ba0cd21ee2dc3d765951c48e27cdeRichard Smith 4022050f25e34ba0cd21ee2dc3d765951c48e27cdeRichard Smithvoid i() { 4122050f25e34ba0cd21ee2dc3d765951c48e27cdeRichard Smith X3<int> xi; 4222050f25e34ba0cd21ee2dc3d765951c48e27cdeRichard Smith h(xi); 4322050f25e34ba0cd21ee2dc3d765951c48e27cdeRichard Smith X3<float> xf; 4422050f25e34ba0cd21ee2dc3d765951c48e27cdeRichard Smith h(xf); 4522050f25e34ba0cd21ee2dc3d765951c48e27cdeRichard Smith} 46