diff options
author | John McCall <rjmccall@apple.com> | 2010-02-25 10:46:05 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2010-02-25 10:46:05 +0000 |
commit | 3a8133727659077d0c918226e5dad6c16c8274f6 (patch) | |
tree | 3ea7d3094476bc860e6f0880206a613741411366 | |
parent | 78bd771b27d696d156899471303622fa51f52438 (diff) |
When comparing two method overload candidates during overload diagnostics,
skip the object argument conversion if either of the candidates didn't
initialize it.
Fixes PR6421, which is such a very straightforward extension of PR6398 that I
should have worked it into the last test case (and therefore caught it then).
Ah well.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@97135 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Sema/SemaOverload.cpp | 3 | ||||
-rw-r--r-- | test/SemaCXX/overload-call.cpp | 3 |
2 files changed, 4 insertions, 2 deletions
diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp index 7208b90939..cfb4b91996 100644 --- a/lib/Sema/SemaOverload.cpp +++ b/lib/Sema/SemaOverload.cpp @@ -4797,7 +4797,8 @@ struct CompareOverloadCandidatesForDisplay { assert(L->Conversions.size() == R->Conversions.size()); int leftBetter = 0; - for (unsigned I = 0, E = L->Conversions.size(); I != E; ++I) { + unsigned I = (L->IgnoreObjectArgument || R->IgnoreObjectArgument); + for (unsigned E = L->Conversions.size(); I != E; ++I) { switch (S.CompareImplicitConversionSequences(L->Conversions[I], R->Conversions[I])) { case ImplicitConversionSequence::Better: diff --git a/test/SemaCXX/overload-call.cpp b/test/SemaCXX/overload-call.cpp index 21b5da21d8..38a26d38ca 100644 --- a/test/SemaCXX/overload-call.cpp +++ b/test/SemaCXX/overload-call.cpp @@ -360,12 +360,13 @@ namespace DerivedToBaseVsVoid { } } -// PR 6398 +// PR 6398 + PR 6421 namespace test4 { class A; class B { static void foo(); // expected-note {{not viable}} static void foo(int*); // expected-note {{not viable}} + static void foo(long*); // expected-note {{not viable}} void bar(A *a) { foo(a); // expected-error {{no matching function for call}} |