diff --git a/src/libs/cplusplus/ResolveExpression.cpp b/src/libs/cplusplus/ResolveExpression.cpp index d4321309b4b..a2c11b1671e 100644 --- a/src/libs/cplusplus/ResolveExpression.cpp +++ b/src/libs/cplusplus/ResolveExpression.cpp @@ -849,22 +849,14 @@ bool ResolveExpression::visit(CallAST *ast) int score = 0; for (unsigned i = 0, argc = funTy->argumentCount(); i < argc; ++i) { + if (i >= unsigned(arguments.size())) + break; + const FullySpecifiedType formalTy = funTy->argumentAt(i)->type(); - - FullySpecifiedType actualTy; - if (i < unsigned(arguments.size())) { - const QList actual = arguments.at(i); - if (actual.isEmpty()) - continue; - - actualTy = actual.first().type(); - } else { - actualTy = formalTy; - score += 2; + const QList actual = arguments.at(i); + if (actual.isEmpty()) continue; - } - - score += evaluateFunctionArgument(actualTy, formalTy); + score += evaluateFunctionArgument(actual.first().type(), formalTy); } sortedResults.insert(LookupMap::value_type(-score, base)); diff --git a/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp b/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp index 5a82792ad8d..3a04c69a002 100644 --- a/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp +++ b/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp @@ -979,6 +979,12 @@ void CppEditorPlugin::test_FollowSymbolUnderCursor_data() "template\n" "using Foo = Bar<@T>;\n" ); + + QTest::newRow("shadowed overload with default args") << _( + "struct Parent { void disconnect(int n = 0); };\n" + "struct Child : public Parent { void $disconnect(); };\n" + "void test() { Child c; c.@disconnect(); }\n" + ); } void CppEditorPlugin::test_FollowSymbolUnderCursor()