1dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.com// RUN: %clang_cc1 -fsyntax-only -verify %s 2dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.com 3dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.comtemplate<typename T> inline void f(T) { } 4dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.comtemplate void f(int); // expected-note{{previous explicit instantiation}} 5dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.comtemplate void f(int); // expected-error{{duplicate explicit instantiation}} 6dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.com 7dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.comtemplate<typename T> 8dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.comstruct X0 { 9dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.com union Inner { }; 10dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.com 11dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.com void f(T) { } 12dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.com 13dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.com static T value; 14dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.com}; 15dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.com 16dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.comtemplate<typename T> 17ecd84842b3f65918eb040c53391172b6413fd7adbsalomon@google.comT X0<T>::value = 3.14; // expected-warning{{implicit conversion from 'double' to 'int' changes value from 3.14 to 3}} 18dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.com 192880df2609eba09b555ca37be04b6ad89290c765Tom Hudsontemplate struct X0<int>; // expected-note{{previous explicit instantiation}} \ 20622a17091b69df8d54d318c88f34851677a6d9c2robertphillips@google.com expected-note{{requested here}} 21dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.comtemplate struct X0<int>; // expected-error{{duplicate explicit instantiation}} 22dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.com 23dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.comtemplate void X0<float>::f(float); // expected-note{{previous explicit instantiation}} 24dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.comtemplate void X0<float>::f(float); // expected-error{{duplicate explicit instantiation}} 25dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.com 26dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.comtemplate union X0<float>::Inner; // expected-note{{previous explicit instantiation}} 27dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.comtemplate union X0<float>::Inner; // expected-error{{duplicate explicit instantiation}} 28dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.com 29ecd84842b3f65918eb040c53391172b6413fd7adbsalomon@google.comtemplate float X0<float>::value; // expected-note{{previous explicit instantiation}} 30dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.comtemplate float X0<float>::value; // expected-error{{duplicate explicit instantiation}} 31dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.com 32dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.com// Make sure that we don't get tricked by redeclarations of nested classes. 33fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.comnamespace NestedClassRedecls { 34670ff9ae7f37356bff08b30a356bb0c52dc8d62erobertphillips@google.com template<typename T> 35670ff9ae7f37356bff08b30a356bb0c52dc8d62erobertphillips@google.com struct X { 36670ff9ae7f37356bff08b30a356bb0c52dc8d62erobertphillips@google.com struct Nested; 372880df2609eba09b555ca37be04b6ad89290c765Tom Hudson friend struct Nested; 382880df2609eba09b555ca37be04b6ad89290c765Tom Hudson 392880df2609eba09b555ca37be04b6ad89290c765Tom Hudson struct Nested { 402880df2609eba09b555ca37be04b6ad89290c765Tom Hudson Nested() {} 412880df2609eba09b555ca37be04b6ad89290c765Tom Hudson } nested; 422880df2609eba09b555ca37be04b6ad89290c765Tom Hudson }; 432880df2609eba09b555ca37be04b6ad89290c765Tom Hudson 44944bcf0acb78f8f9da01e991f1307629959e338absalomon X<int> xi; 45dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.com 46dd743fefad9764ad86d7f69deec32e9a3b5de47frobertphillips@google.com template struct X<int>; 47622a17091b69df8d54d318c88f34851677a6d9c2robertphillips@google.com} 48622a17091b69df8d54d318c88f34851677a6d9c2robertphillips@google.com