diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java index 13c4c9eab0b..8700aba8b21 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java @@ -55,6 +55,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameterMap; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTemplateParameter; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTypeParameter; import org.eclipse.cdt.core.dom.ast.cpp.ICPPVariable; +import org.eclipse.cdt.core.dom.ast.cpp.SemanticQueries; import org.eclipse.cdt.core.index.IIndex; import org.eclipse.cdt.core.index.IIndexBinding; import org.eclipse.cdt.core.index.IndexFilter; @@ -609,6 +610,25 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa public void testInstanceInheritance_258745() throws Exception { getBindingFromFirstIdentifier("a", ICPPField.class); } + + // template + // struct Base { + // virtual void foo() = 0; + // }; + // + // struct Derived : Base { + // virtual void foo(); + // }; + + // Derived waldo; + public void testMethodOveriddenFromTemplateInstanceBase_480892() throws Exception { + IVariable waldo = getBindingFromFirstIdentifier("waldo"); + IType derived = waldo.getType(); + assertInstance(derived, ICPPClassType.class); + ICPPClassType derivedClass = (ICPPClassType) derived; + ICPPMethod[] pureVirtualMethods = SemanticQueries.getPureVirtualMethods(derivedClass, null); + assertEquals(0, pureVirtualMethods.length); + } // class A {}; class B {}; class C {}; // template diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPInheritance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPInheritance.java index 8ca076c5029..e1e73738d81 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPInheritance.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPInheritance.java @@ -252,7 +252,7 @@ public class CPPInheritance { for (ICPPMethod method : ClassTypeHelper.getOwnMethods(classType, point)) { // Skip methods that don't actually belong to us, such as methods brought // into scope via a using-declaration. - if (method.getOwner() != classType) { + if (!method.getOwner().equals(classType)) { continue; }