From cc0ca12dcff028673d4719257b7c8d2b665a1616 Mon Sep 17 00:00:00 2001 From: John Camelon Date: Mon, 7 Feb 2005 18:13:40 +0000 Subject: [PATCH] Fixed Bug 84367 - [Lengths] IASTParameterDeclaration with null named IASTDeclarator has invalid length --- .../core/parser/tests/ast2/DOMLocationTests.java | 15 +++++++++++++++ .../dom/parser/AbstractGNUSourceCodeParser.java | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/DOMLocationTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/DOMLocationTests.java index e24e2a0e1e5..3c2ff1e2697 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/DOMLocationTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/DOMLocationTests.java @@ -27,11 +27,13 @@ import org.eclipse.cdt.core.dom.ast.IASTIfStatement; import org.eclipse.cdt.core.dom.ast.IASTInitializerExpression; import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTNodeLocation; +import org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration; import org.eclipse.cdt.core.dom.ast.IASTPreprocessorFunctionStyleMacroDefinition; import org.eclipse.cdt.core.dom.ast.IASTPreprocessorMacroDefinition; import org.eclipse.cdt.core.dom.ast.IASTPreprocessorObjectStyleMacroDefinition; import org.eclipse.cdt.core.dom.ast.IASTReturnStatement; import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration; +import org.eclipse.cdt.core.dom.ast.IASTStandardFunctionDeclarator; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.core.dom.ast.IASTTypeId; import org.eclipse.cdt.core.dom.ast.IASTUnaryExpression; @@ -207,6 +209,19 @@ public class DOMLocationTests extends AST2BaseTest { } + + public void testBug84367() throws Exception { + String code = "void foo( int );"; //$NON-NLS-1$ + for (ParserLanguage p = ParserLanguage.C; p != null; p = (p == ParserLanguage.C) ? ParserLanguage.CPP + : null) { + IASTTranslationUnit tu = parse(code, p); + IASTSimpleDeclaration definition = (IASTSimpleDeclaration) tu.getDeclarations()[0]; + IASTStandardFunctionDeclarator declarator = (IASTStandardFunctionDeclarator) definition.getDeclarators()[0]; + IASTParameterDeclaration parameter = declarator.getParameters()[0]; + assertSoleLocation( parameter, code.indexOf( "int" ), 3 ); //$NON-NLS-1$ + + } + } public void testElaboratedTypeSpecifier() throws ParserException { String code = "/* blah */ struct A anA; /* blah */"; //$NON-NLS-1$ for (ParserLanguage p = ParserLanguage.C; p != null; p = (p == ParserLanguage.C) ? ParserLanguage.CPP diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java index 9d95fd6fb81..c8532a63e4f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java @@ -1940,7 +1940,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { */ protected int figureEndOffset(IASTDeclSpecifier declSpecifier, IASTDeclarator declarator) { - if (declarator == null) + if (declarator == null || ((ASTNode)declarator).getLength() == 0 ) return calculateEndOffset(declSpecifier); return calculateEndOffset(declarator); }