diff --git a/src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp b/src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp
index 6c21eefa13fba6b2b8e568a1b39b060630621636..f593074d2dd95fc9cd2be84cf8acc2f988b383e3 100644
--- a/src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp
+++ b/src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp
@@ -126,7 +126,7 @@ public:
         hintItem->setOrder(-1000);
 
         QList<BasicProposalItem *> items;
-        items << itemFromFunction(maybeDefinitionFor(m_params.function));
+        items << itemFromFunction(m_params.function);
         items << hintItem;
         return new VirtualFunctionProposal(m_params.cursorPosition,
                                            new BasicProposalItemListModel(items),
@@ -151,7 +151,7 @@ public:
 
         QList<BasicProposalItem *> items;
         foreach (Function *func, overrides)
-            items << itemFromFunction(maybeDefinitionFor(func));
+            items << itemFromFunction(func);
         items.first()->setOrder(1000); // Ensure top position for function of static type
 
         return new VirtualFunctionProposal(m_params.cursorPosition,
@@ -160,7 +160,7 @@ public:
     }
 
 private:
-    Function *maybeDefinitionFor(Function *func)
+    Function *maybeDefinitionFor(Function *func) const
     {
         if (Function *definition = m_finder.findMatchingDefinition(func, m_params.snapshot))
             return definition;
@@ -169,8 +169,10 @@ private:
 
     BasicProposalItem *itemFromFunction(Function *func) const
     {
-        const QString text = m_overview.prettyName(LookupContext::fullyQualifiedName(func));
-        const CPPEditorWidget::Link link = CPPEditorWidget::linkToSymbol(func);
+        const CPPEditorWidget::Link link = CPPEditorWidget::linkToSymbol(maybeDefinitionFor(func));
+        QString text = m_overview.prettyName(LookupContext::fullyQualifiedName(func));
+        if (func->isPureVirtual())
+            text += QLatin1String(" = 0");
 
         BasicProposalItem *item = new VirtualFunctionProposalItem(link, m_params.openInNextSplit);
         item->setText(text);
@@ -182,7 +184,7 @@ private:
     VirtualFunctionAssistProvider::Parameters m_params;
     Overview m_overview;
     Icons m_icons;
-    CppTools::SymbolFinder m_finder;
+    mutable CppTools::SymbolFinder m_finder;
 };
 
 VirtualFunctionAssistProvider::VirtualFunctionAssistProvider()
diff --git a/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp b/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp
index c9e763cb3aa784d13818f2c1c76e315d27ecf554..7bbc5af2576abc70cb4b7c80191e747fdff9641a 100644
--- a/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp
+++ b/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp
@@ -1040,7 +1040,7 @@ void CppEditorPlugin::test_FollowSymbolUnderCursor_virtualFunctionCall_data()
             "int f(A *o) { o->$@virt(); }\n"
             "}\n")
         << (OverrideItemList()
-            << OverrideItem(QLatin1String("A::virt"), 2)
+            << OverrideItem(QLatin1String("A::virt = 0"), 2)
             << OverrideItem(QLatin1String("B::virt"), 5)
             << OverrideItem(QLatin1String("C::virt"), 8)
             << OverrideItem(QLatin1String("CD1::virt"), 11)
@@ -1110,7 +1110,7 @@ void CppEditorPlugin::test_FollowSymbolUnderCursor_virtualFunctionCall_data()
             "\n"
             "int f(C *o) { o->$@virt(); }\n")
         << (OverrideItemList()
-            << OverrideItem(QLatin1String("C::virt"), 2)
+            << OverrideItem(QLatin1String("C::virt = 0"), 2)
             << OverrideItem(QLatin1String("A::virt"), 8)
             << OverrideItem(QLatin1String("B::virt"), 5));
 
@@ -1194,7 +1194,7 @@ void CppEditorPlugin::test_FollowSymbolUnderCursor_virtualFunctionCall_data()
             "\n"
             "void client(A &o) { o.$@virt(); }\n")
         << (OverrideItemList()
-            << OverrideItem(QLatin1String("A::virt"), 2));
+            << OverrideItem(QLatin1String("A::virt = 0"), 2));
 
     /// Check: Do not trigger on a.virt() if a is of type A.
     QTest::newRow("notOnDotMemberAccessOfNonReferenceType") << _(
@@ -1312,7 +1312,7 @@ void CppEditorPlugin::test_FollowSymbolUnderCursor_virtualFunctionCall_multipleD
             ;
 
     const OverrideItemList finalResults = OverrideItemList()
-            << OverrideItem(QLatin1String("A::virt"), 1)
+            << OverrideItem(QLatin1String("A::virt = 0"), 1)
             << OverrideItem(QLatin1String("B::virt"), 2);
 
     F2TestCase(F2TestCase::FollowSymbolUnderCursorAction, testFiles, finalResults);