diff options
author | Gabor Greif <ggreif@gmail.com> | 2010-08-27 23:39:49 +0000 |
---|---|---|
committer | Gabor Greif <ggreif@gmail.com> | 2010-08-27 23:39:49 +0000 |
commit | c620ace6dbeb2a07e80088d64ea98cc0c8b58121 (patch) | |
tree | b8f1bdb7b3ad8194c87da80b71ca4b228228fbe7 | |
parent | d078e641450bbc5a20df8d3b54f87b27e398acb3 (diff) |
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
-rw-r--r-- | test/SemaTemplate/inject-templated-friend.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
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 <typename STRUCT_TYPE> +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<Foo>& f); +/*std_ostream& operator << (std_ostream& o, const Streamer<Foo>& f) +{ + // Sema should flag this as a redefinition +}*/ + +template <> +void Streamer<Foo>::operator () (std_ostream& o) const +{ +} + +} // namespace pr8007 + +int main(void) +{ + using namespace pr8007; + Foo foo; + cout << foo; +} |