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 b4bf63b8764..d797eb8b8e8 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 @@ -1867,4 +1867,23 @@ public class CompleteParseASTTest extends CompleteParseBaseTest } + + public void testBug64010() throws Exception + { + Writer writer = new StringWriter(); + writer.write( " #define ONE else if (0) { } \n"); + writer.write( " #define TEN ONE ONE ONE ONE ONE ONE ONE ONE ONE ONE \n "); + writer.write( " #define HUN TEN TEN TEN TEN TEN TEN TEN TEN TEN TEN \n "); + writer.write( " #define THOU HUN HUN HUN HUN HUN HUN HUN HUN HUN HUN \n"); + writer.write("void foo() "); + writer.write("{ "); + writer.write(" if (0) { } "); + writer.write(" /* 11,000 else if's. */ "); + writer.write(" THOU THOU THOU THOU THOU THOU THOU THOU THOU THOU THOU "); + writer.write("} "); + + Iterator d = parse( writer.toString() ).getDeclarations(); + + IASTFunction f = (IASTFunction) d.next(); + } } 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 27fc3075525..c333497bf87 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 @@ -2855,7 +2855,11 @@ public abstract class Parser extends ExpressionParser implements IParser if (LT(1) == IToken.t_else) { consume( IToken.t_else ); - if( LT(1) != IToken.tLBRACE ) + if( LT(1) == IToken.t_if ){ + //an else if, return and get the rest of the else if as the next statement instead of recursing + cleanupLastToken(); + return; + } else if( LT(1) != IToken.tLBRACE ) singleStatementScope(scope); else statement( scope );