diff options
2 files changed, 38 insertions, 0 deletions
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 06c8a7095f2..86b1aafa0a9 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 @@ -2364,4 +2364,23 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa public void testNPE_407497() throws Exception { checkBindings(); } + + // template <typename> + // struct basic_A { + // bool eof() const; + // }; + // + // typedef basic_A<char> A; + + // class B : public A {}; + // + // class C : public A, public B {}; + // + // void foo() { + // C c; + // c.eof(); + // } + public void testAmbiguousBaseClassLookup_413406() throws Exception { + getProblemFromASTName("eof();", 3); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/AbstractCPPClassSpecializationScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/AbstractCPPClassSpecializationScope.java index 0d40d06d37f..93d3cee4801 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/AbstractCPPClassSpecializationScope.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/AbstractCPPClassSpecializationScope.java @@ -275,4 +275,23 @@ public class AbstractCPPClassSpecializationScope implements ICPPClassSpecializat public EScopeKind getKind() { return EScopeKind.eClassType; } + + // Note: equals() and hashCode() are overridden because multiple instances + // of this class representing the same class specialization scope + // may be created, but scopes are sometimes stored in hash maps + // under the assumption that two objects representing the same + // scope will compare equal(). + + @Override + public boolean equals(Object other) { + if (other instanceof ICPPClassSpecializationScope) { + return getClassType().equals(((ICPPClassSpecializationScope) other).getClassType()); + } + return false; + } + + @Override + public int hashCode() { + return specialClass.hashCode(); + } } |