From 2d33ca06576935deb6a4f3183598c951c3a4c253 Mon Sep 17 00:00:00 2001 From: John Camelon Date: Wed, 23 Feb 2005 20:14:08 +0000 Subject: [PATCH] Fixed Bug 86288 - [Parser] explicit type conversion in return statement causes IASTProblemStatement --- .../cdt/core/parser/tests/ast2/AST2CPPTests.java | 10 ++++++++++ .../core/dom/parser/cpp/GNUCPPSourceParser.java | 1 + 2 files changed, 11 insertions(+) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java index be19fb133e2..19d465911b6 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java @@ -14,6 +14,7 @@ package org.eclipse.cdt.core.parser.tests.ast2; import org.eclipse.cdt.core.dom.ast.IASTBinaryExpression; +import org.eclipse.cdt.core.dom.ast.IASTCastExpression; import org.eclipse.cdt.core.dom.ast.IASTCompositeTypeSpecifier; import org.eclipse.cdt.core.dom.ast.IASTCompoundStatement; import org.eclipse.cdt.core.dom.ast.IASTDeclarator; @@ -26,6 +27,7 @@ import org.eclipse.cdt.core.dom.ast.IASTInitializerExpression; import org.eclipse.cdt.core.dom.ast.IASTLiteralExpression; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTNamedTypeSpecifier; +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; @@ -2038,5 +2040,13 @@ public class AST2CPPTests extends AST2BaseTest { assertSame( printf, r1 ); assertSame( printf, r2 ); } + + public void testBug86288() throws Exception + { + String code = "int *foo( int *b ) { return (int *)(b); }"; //$NON-NLS-1$ + IASTTranslationUnit tu = parse( code, ParserLanguage.CPP ); + IASTReturnStatement r = (IASTReturnStatement) ((IASTCompoundStatement)((IASTFunctionDefinition)tu.getDeclarations()[0]).getBody()).getStatements()[0]; + assertTrue( r.getReturnValue() instanceof IASTCastExpression ); + } } 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 1a65a99717f..d7a2e7a781d 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 @@ -880,6 +880,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { typeId, castExpression, startingOffset, calculateEndOffset(castExpression)); } catch (BacktrackException b) { + backup( mark ); if (templateIdScopes.size() > 0 && !popped) { templateIdScopes.pop(); }