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 4437e8380be..5d7efb4527b 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 @@ -1922,5 +1922,18 @@ public class AST2CPPTests extends AST2BaseTest { IBinding [] bs = CPPSemantics.prefixLookup( name ); assertEquals( 4, bs.length ); } + + public void testBug85310() throws Exception + { + StringBuffer buffer = new StringBuffer( "void f() {" ); //$NON-NLS-1$ + buffer.append( " if (__io.flags() & ios_base::showbase" ); //$NON-NLS-1$ + buffer.append( " || __i < 2 || __sign.size() > 1" ); //$NON-NLS-1$ + buffer.append( " || ((static_cast(__p.field[3]) != money_base::none)" ); //$NON-NLS-1$ + buffer.append( " && __i == 2)) " ); //$NON-NLS-1$ + buffer.append( " return;" ); //$NON-NLS-1$ + buffer.append( "}"); //$NON-NLS-1$ + String code = buffer.toString(); + IASTTranslationUnit tu = parse( code, 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 b895fd965d4..9990f37e609 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 @@ -1461,7 +1461,10 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { BacktrackException savedBt = null; try { IASTExpression expression = expression(); - lastTokenOfExpression = consume(); // SEMI or EOC + if( LT(1) == IToken.tEOC ) + lastTokenOfExpression = consume(); + else + lastTokenOfExpression = consume( IToken.tSEMI ); expressionStatement = createExpressionStatement(); expressionStatement.setExpression(expression); ((ASTNode) expressionStatement).setOffsetAndLength(