diff --git a/core/org.eclipse.cdt.core.tests/ChangeLog b/core/org.eclipse.cdt.core.tests/ChangeLog index 19f5e6c5af4..ba53c715a13 100644 --- a/core/org.eclipse.cdt.core.tests/ChangeLog +++ b/core/org.eclipse.cdt.core.tests/ChangeLog @@ -1,3 +1,6 @@ +2003-03-16 Andrew Niefer + added CompleteParseASTTest.testBug55163 + 2004-03-12 Sean Evoy Corrected a target definition in the plugin manifest that was flagged as release when it should have been flagged as test. Also updated the diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java index 8fef94a9854..2da20140e04 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java @@ -1476,4 +1476,26 @@ public class CompleteParseASTTest extends CompleteParseBaseTest assertFalse( i.hasNext() ); } + + public void testBug55163() throws Exception + { + Writer writer = new StringWriter(); + writer.write( "void foo() { \n"); + writer.write( " int i, n; \n"); + writer.write( " double di; \n"); + writer.write( " for( i = n - 1, di = (double)( i + i ); i > 0; i-- ){ } \n"); + writer.write( "}\n"); + + Iterator iter = parse( writer.toString() ).getDeclarations(); + + IASTFunction foo = (IASTFunction) iter.next(); + assertFalse( iter.hasNext() ); + iter = getDeclarations( foo ); + IASTVariable i = (IASTVariable)iter.next(); + IASTVariable n = (IASTVariable)iter.next(); + IASTVariable di = (IASTVariable)iter.next(); + + assertAllReferences( 7, createTaskList( new Task( n ), new Task( i, 5 ), new Task( di ) ) ); + + } } diff --git a/core/org.eclipse.cdt.core/parser/ChangeLog-parser b/core/org.eclipse.cdt.core/parser/ChangeLog-parser index 4d6cb1fbeab..8bc671be5fa 100644 --- a/core/org.eclipse.cdt.core/parser/ChangeLog-parser +++ b/core/org.eclipse.cdt.core/parser/ChangeLog-parser @@ -1,3 +1,8 @@ +2004-03-17 Andrew Niefer + fix bug 55163 + - in for-init-statement, try expression-statement before simple-declaration since if it actually is a statement instead of a + declaration, the simple-declaration fails hard and can actually enter an infinite loop. + 2004-03-16 Dave Daoust refactor scanner for performance improvements -changes to accountForUndo, now named readFromStream diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java index abcd8aa85e8..3952b266cb4 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java @@ -503,7 +503,7 @@ public abstract class Parser extends ExpressionParser implements IParser throw e; } templateDecl.setEndingOffsetAndLineNumber( lastToken.getEndOffset(), lastToken.getLineNumber() ); - templateDecl.exitScope( requestor ); + templateDecl.exitScope( requestor ); } catch (BacktrackException bt) { @@ -2822,16 +2822,20 @@ public abstract class Parser extends ExpressionParser implements IParser */ protected void forInitStatement( IASTScope scope ) throws BacktrackException, EndOfFileException { + IToken mark = mark(); try { - simpleDeclarationStrategyUnion(scope,null, null); + IASTExpression e = expression( scope ); + e.acceptElement(requestor); + + consume( IToken.tSEMI ); } catch( BacktrackException bt ) { + backup( mark ); try { - IASTExpression e = expression( scope ); - e.acceptElement(requestor); + simpleDeclarationStrategyUnion(scope,null, null); } catch( BacktrackException b ) {