diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPSpecTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPSpecTest.java index b84af24aa38..63edd1505b0 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPSpecTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPSpecTest.java @@ -3669,7 +3669,7 @@ public class AST2CPPSpecTest extends AST2SpecTestBase { // B_ptr->~B(); //2 // calls D's destructor // B_ptr->~B_alias(); //3 // calls D's destructor // B_ptr->B_alias::~B(); //4 // calls B's destructor - // B_ptr->B_alias::~B_alias(); //5 // error, no B_alias in class B + // B_ptr->B_alias::~B_alias(); //5 // calls B's destructor // } public void test12_4s12() throws Exception { final String code = getAboveComment(); @@ -3685,8 +3685,8 @@ public class AST2CPPSpecTest extends AST2SpecTestBase { assertSame(dtor, d); d = bh.assertNonProblem("~B(); //4", 2); assertSame(dtor, d); - - bh.assertProblem("~B_alias(); //5", 8); + d = bh.assertNonProblem("~B_alias(); //5", 8); + assertSame(dtor, d); } // void* operator new(size_t, void* p) { return p; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java index 02046bca740..4e56b8a4bad 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java @@ -1143,7 +1143,7 @@ public class CPPSemantics { return; } - if (data.qualified && !(scope instanceof ICPPTemplateScope)) { + if (!data.isDestructor && data.qualified && !(scope instanceof ICPPTemplateScope)) { if (data.ignoreUsingDirectives || data.usingDirectives.isEmpty()) return; data.usingDirectivesOnly = true; @@ -1250,6 +1250,7 @@ public class CPPSemantics { ld2.fHeuristicBaseLookup = data.fHeuristicBaseLookup; ld2.qualified = parent instanceof ICPPASTQualifiedName; ld2.typesOnly = true; + ld2.isDestructor = true; lookup(ld2, getLookupScope(typeDtorName)); IBinding[] typedefs = ld2.getFoundBindings(); ITypedef typedef = null; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/LookupData.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/LookupData.java index 218d34adee5..d4b5cac39dc 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/LookupData.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/LookupData.java @@ -123,6 +123,7 @@ public class LookupData extends ScopeLookupData { public ICPPClassType skippedScope; public Object foundItems; public ProblemBinding problem; + public boolean isDestructor; public LookupData(IASTName name) { super(name, true, false);