Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / clang / test / SemaTemplate / inject-templated-friend.cpp
blobf0f287ce144de178fb4a15e9d81a24945d01b6ca
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.
5 // CHECK: define linkonce_odr{{.*}}_ZlsR11std_ostreamRK8StreamerI3FooE
7 struct std_ostream
9 int dummy;
12 std_ostream cout;
14 template <typename STRUCT_TYPE>
15 struct Streamer
17 friend std_ostream& operator << (std_ostream& o, const Streamer& f) // expected-error{{redefinition of 'operator<<'}}
19 Streamer s(f);
20 s(o);
21 return o;
24 Streamer(const STRUCT_TYPE& s) : s(s) {}
26 const STRUCT_TYPE& s;
27 void operator () (std_ostream&) const;
30 typedef struct Foo {} Foo;
32 inline std_ostream& operator << (std_ostream&, const Streamer<Foo>&);
33 #ifdef REDEFINE
34 std_ostream& operator << (std_ostream& o, const Streamer<Foo>&) // expected-note{{is here}}
36 // Sema should flag this as a redefinition
37 return o;
39 #endif
41 template <>
42 void Streamer<Foo>::operator () (std_ostream& o) const // expected-note{{requested here}}
46 int main(void)
48 Foo foo;
49 cout << foo;