diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/BaseExtensibleLanguage.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/BaseExtensibleLanguage.java index 68c1b533383..fc980939613 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/BaseExtensibleLanguage.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/BaseExtensibleLanguage.java @@ -95,7 +95,7 @@ public abstract class BaseExtensibleLanguage extends AbstractLanguage { ILanguage gppLanguage = getParserLanguage() == ParserLanguage.CPP ? GPPLanguage.getDefault() : GCCLanguage.getDefault(); gtu = gppLanguage.getASTTranslationUnit(reader, scanInfo, fileCreator, index, options, log); - System.out.println("GPP AST:"); + System.out.println(gppLanguage.getName() + " AST:"); ASTPrinter.print(gtu); System.out.println(); } diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/BuildASTParserAction.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/BuildASTParserAction.java index f9fc228a454..e991a598712 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/BuildASTParserAction.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/BuildASTParserAction.java @@ -433,13 +433,23 @@ public abstract class BuildASTParserAction extends AbstractParserAction { if(alternateExpr == null) astStack.push(expr); + else if(isFunctionType(expr)) // bug 252243 + astStack.push(alternateExpr); else { IASTNode ambiguityNode = createAmbiguousExpression(expr, alternateExpr); setOffsetAndLength(ambiguityNode); astStack.push(ambiguityNode); } } + + private static boolean isFunctionType(IASTExpression expr) { + if(expr instanceof IASTTypeIdExpression) { + IASTTypeId typeId = ((IASTTypeIdExpression) expr).getTypeId(); + return typeId.getAbstractDeclarator() instanceof IASTFunctionDeclarator; + } + return false; + } /**