summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/overload-call.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2012-02-25 06:24:24 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2012-02-25 06:24:24 +0000
commite06a2c1893a64c50e2f0d9d0ad35a7d6bd639f93 (patch)
tree16a54ab6347f658e5c639e1a89adae217a4b0946 /clang/test/SemaCXX/overload-call.cpp
parent6fd2b434bda75bff8fd9d597e7da26fa281cd8b1 (diff)
downloadbcm5719-llvm-e06a2c1893a64c50e2f0d9d0ad35a7d6bd639f93.tar.gz
bcm5719-llvm-e06a2c1893a64c50e2f0d9d0ad35a7d6bd639f93.zip
Fix a regression from r151117: ADL requires that we attempt to complete any
associated classes, since it can find friend functions declared within them, but overload resolution does not otherwise require argument types to be complete. llvm-svn: 151434
Diffstat (limited to 'clang/test/SemaCXX/overload-call.cpp')
-rw-r--r--clang/test/SemaCXX/overload-call.cpp22
1 files changed, 21 insertions, 1 deletions
diff --git a/clang/test/SemaCXX/overload-call.cpp b/clang/test/SemaCXX/overload-call.cpp
index 501e2d6fb2f..913d13f99b8 100644
--- a/clang/test/SemaCXX/overload-call.cpp
+++ b/clang/test/SemaCXX/overload-call.cpp
@@ -536,10 +536,30 @@ namespace rdar9803316 {
}
namespace IncompleteArg {
- // Ensure that overload resolution attempts to complete argument types.
+ // Ensure that overload resolution attempts to complete argument types when
+ // performing ADL.
template<typename T> struct S {
friend int f(const S&);
};
extern S<int> s;
int k = f(s);
+
+ template<typename T> struct Op {
+ friend bool operator==(const Op &, const Op &);
+ };
+ extern Op<char> op;
+ bool b = op == op;
+
+ // ... and not in other cases! Nothing here requires U<int()> to be complete.
+ // (Note that instantiating U<int()> will fail.)
+ template<typename T> struct U {
+ T t;
+ };
+ struct Consumer {
+ template<typename T>
+ int operator()(const U<T> &);
+ };
+ template<typename T> U<T> &make();
+ Consumer c;
+ int n = sizeof(c(make<int()>()));
}
OpenPOWER on IntegriCloud