From a5188f1c752400d70d5ae1dd1a56a03e96576b27 Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Tue, 2 Apr 2013 18:45:48 -0700 Subject: [PATCH] Bug 402602 - Template superclass ctor is not resolved --- .../cdt/core/parser/tests/ast2/AST2TemplateTests.java | 11 +++++++++++ .../core/dom/parser/cpp/semantics/CPPSemantics.java | 3 ++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java index 1f161df79cd..54fd097093f 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java @@ -7599,4 +7599,15 @@ public class AST2TemplateTests extends AST2TestBase { BindingAssertionHelper helper = new BindingAssertionHelper(getAboveComment(), true); helper.assertVariableType("b", CommonTypes.int_); } + + // template struct A { + // A(int c); + // }; + // + // struct B : public A { + // B(int c) : A(c) {} + // }; + public void testTemplateBaseClassConstructorCall_402602() throws Exception { + parseAndCheckBindings(); + } } 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 e1d0d3c83ee..fba2efd2066 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 @@ -348,7 +348,8 @@ public class CPPSemantics { && !(binding instanceof ICPPTemplateParameter) && !(lookupName instanceof ICPPASTTemplateId)) { ASTNodeProperty prop = lookupName.getPropertyInParent(); - if (prop != ICPPASTTemplateId.TEMPLATE_NAME && !lookupName.isQualified()) { + if (prop != ICPPASTConstructorChainInitializer.MEMBER_ID && + prop != ICPPASTTemplateId.TEMPLATE_NAME && !lookupName.isQualified()) { // You cannot use a class template name outside of the class template scope, // mark it as a problem. IBinding user= CPPTemplates.isUsedInClassTemplateScope((ICPPClassTemplate) binding, lookupName);