From: Gabor Greif Date: Fri, 27 Aug 2010 23:39:49 +0000 (+0000) Subject: reproduction recipe for PR8007, expected to fail for now, review welcome X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c620ace6dbeb2a07e80088d64ea98cc0c8b58121;p=clang reproduction recipe for PR8007, expected to fail for now, review welcome git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@112326 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/SemaTemplate/inject-templated-friend.cpp b/test/SemaTemplate/inject-templated-friend.cpp new file mode 100644 index 0000000000..67da8342f2 --- /dev/null +++ b/test/SemaTemplate/inject-templated-friend.cpp @@ -0,0 +1,49 @@ +// RUN: %clang %s -S -emit-llvm -o - | grep -e "define linkonce_odr.*_ZN6pr8007lsERNS_11std_ostreamERKNS_8StreamerINS_3FooEEE" +// XFAIL: * + +namespace pr8007 { + +struct std_ostream +{ + int dummy; +}; + +std_ostream cout; + +template +struct Streamer +{ + friend std_ostream& operator << (std_ostream& o, const Streamer& f) + { + Streamer s(f); + s(o); + return o; + } + + Streamer(const STRUCT_TYPE& s) : s(s) {} + + const STRUCT_TYPE& s; + void operator () (std_ostream&) const; +}; + +typedef struct Foo {} Foo; + +std_ostream& operator << (std_ostream& o, const Streamer& f); +/*std_ostream& operator << (std_ostream& o, const Streamer& f) +{ + // Sema should flag this as a redefinition +}*/ + +template <> +void Streamer::operator () (std_ostream& o) const +{ +} + +} // namespace pr8007 + +int main(void) +{ + using namespace pr8007; + Foo foo; + cout << foo; +}