From dfb35058dd8974e04d812b02a9244cce70da723f Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Wed, 11 Feb 2009 14:30:02 +0000 Subject: [PATCH] Ambiguity resolution and friends, bug 264109. --- .../parser/tests/ast2/AST2TemplateTests.java | 4 +++- .../dom/parser/cpp/GNUCPPSourceParser.java | 19 +++++++++++-------- 2 files changed, 14 insertions(+), 9 deletions(-) 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 322e601260a..e792edd4c8a 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 @@ -3767,8 +3767,10 @@ public class AST2TemplateTests extends AST2BaseTest { // return A(p); // } public void _testForwardDeclarations_264109() throws Exception { - BindingAssertionHelper bh= new BindingAssertionHelper(getAboveComment(), true); + final String code = getAboveComment(); + BindingAssertionHelper bh= new BindingAssertionHelper(code, true); bh.assertNonProblem("A make_A(C* p) {", 4, ICPPTemplateInstance.class); + parseAndCheckBindings(code, ParserLanguage.CPP); } // template class CT { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java index 9e3fb102f94..59edab424a4 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java @@ -2576,6 +2576,16 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } private boolean canHaveConstructorInitializer(IASTDeclSpecifier declspec, IASTDeclarator dtor) { + if (declspec instanceof ICPPASTDeclSpecifier) { + ICPPASTDeclSpecifier cppspec= (ICPPASTDeclSpecifier) declspec; + if (cppspec.isFriend()) { + return false; + } + if (cppspec.getStorageClass() == IASTDeclSpecifier.sc_typedef) { + return false; + } + } + if (declspec instanceof ICPPASTSimpleDeclSpecifier) { ICPPASTSimpleDeclSpecifier sspec= (ICPPASTSimpleDeclSpecifier) declspec; switch(sspec.getType()) { @@ -2592,14 +2602,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { case IASTSimpleDeclSpecifier.t_void: return false; } - - if (sspec.isFriend()) { - return false; - } - if (sspec.getStorageClass() == IASTDeclSpecifier.sc_typedef) { - return false; - } - } + } if (dtor != null) { IASTName name = ASTQueries.findInnermostDeclarator(dtor).getName().getLastName();