diff options
-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}} |