aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2011-03-16 18:21:05 +0000
committerDouglas Gregor <dgregor@apple.com>2011-03-16 18:21:05 +0000
commit60b3e38d421cab497de1c62c06be6a6a5f321edf (patch)
treefb9ded8b642c8530ceb2774aaec501420ae12eba
parenteed5ddc25539e14de11888ec69007217e777c02a (diff)
Don't indescriminately print overload candidates when we have invalid
operands to a binary expression; it doesn't make sense in all contexts. The right answer would be to see if the user forgot at (). Fixes <rdar://problem/9136502>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@127740 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Sema/SemaExpr.cpp4
-rw-r--r--test/SemaCXX/overloaded-operator.cpp16
2 files changed, 16 insertions, 4 deletions
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp
index c208ed2fca..6acd2a5b03 100644
--- a/lib/Sema/SemaExpr.cpp
+++ b/lib/Sema/SemaExpr.cpp
@@ -6312,10 +6312,6 @@ QualType Sema::InvalidOperands(SourceLocation Loc, Expr *&lex, Expr *&rex) {
Diag(Loc, diag::err_typecheck_invalid_operands)
<< lex->getType() << rex->getType()
<< lex->getSourceRange() << rex->getSourceRange();
- if (lex->getType() == Context.OverloadTy)
- NoteAllOverloadCandidates(lex);
- if (rex->getType() == Context.OverloadTy)
- NoteAllOverloadCandidates(rex);
return QualType();
}
diff --git a/test/SemaCXX/overloaded-operator.cpp b/test/SemaCXX/overloaded-operator.cpp
index 4399a026ea..834b8d6e89 100644
--- a/test/SemaCXX/overloaded-operator.cpp
+++ b/test/SemaCXX/overloaded-operator.cpp
@@ -384,3 +384,19 @@ void test_lookup_through_using() {
N::X2 x;
x << 17;
}
+
+namespace rdar9136502 {
+ struct X {
+ int i();
+ int i(int);
+ };
+
+ struct Y {
+ Y &operator<<(int); // expected-note{{candidate function not viable: no overload of 'i' matching 'int' for 1st argument}}
+ };
+
+ void f(X x, Y y) {
+ // FIXME: This diagnostic is non-awesome.
+ y << x.i; // expected-error{{invalid operands to binary expression ('rdar9136502::Y' and '<overloaded function type>')}}
+ }
+}