1// RUN: %clang_cc1 %s -emit-llvm -triple %itanium_abi_triple -o - | FileCheck %s 2// RUN: %clang_cc1 %s -DREDEFINE -verify 3// PR8007: friend function not instantiated. 4 5// CHECK: define linkonce_odr{{.*}}_ZlsR11std_ostreamRK8StreamerI3FooE 6 7struct std_ostream 8{ 9 int dummy; 10}; 11 12std_ostream cout; 13 14template <typename STRUCT_TYPE> 15struct Streamer 16{ 17 friend std_ostream& operator << (std_ostream& o, const Streamer& f) // expected-error{{redefinition of 'operator<<'}} 18 { 19 Streamer s(f); 20 s(o); 21 return o; 22 } 23 24 Streamer(const STRUCT_TYPE& s) : s(s) {} 25 26 const STRUCT_TYPE& s; 27 void operator () (std_ostream&) const; 28}; 29 30typedef struct Foo {} Foo; 31 32inline std_ostream& operator << (std_ostream&, const Streamer<Foo>&); 33#ifdef REDEFINE 34std_ostream& operator << (std_ostream& o, const Streamer<Foo>&) // expected-note{{is here}} 35{ 36 // Sema should flag this as a redefinition 37 return o; 38} 39#endif 40 41template <> 42void Streamer<Foo>::operator () (std_ostream& o) const // expected-note{{requested here}} 43{ 44} 45 46int main(void) 47{ 48 Foo foo; 49 cout << foo; 50} 51