diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseProblemTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseProblemTest.java index 1e404a79aaa..0d34cb19864 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseProblemTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseProblemTest.java @@ -75,4 +75,20 @@ public class CompleteParseProblemTest extends CompleteParseBaseTest { } + public void testBug68931() throws Exception + { + String code = "void foo(){ SomeUnknownType t; } "; //$NON-NLS-1$ + parse( code, false ); + + int start = code.indexOf( "SomeUnknownType" ); //$NON-NLS-1$ + int end = start + 15; + + assertFalse( callback.problems.isEmpty() ); + assertEquals( callback.problems.size(), 1 ); + IProblem p = (IProblem) callback.problems.get( 0 ); + assertTrue( p.checkCategory( IProblem.SEMANTICS_RELATED )); + assertEquals( p.getSourceStart(), start ); + assertEquals( p.getSourceEnd(), end ); + assertEquals( p.getID(), IProblem.SEMANTIC_NAME_NOT_FOUND ); + } } 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 9ba4f464527..3047d8b21cd 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 @@ -1126,7 +1126,10 @@ public abstract class Parser extends ExpressionParser implements IParser { int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; logException( "simpleDeclaration:createSimpleTypeSpecifier", e1 ); //$NON-NLS-1$ - throwBacktrack(firstOffset, endOffset, firstLine); + if( e1 instanceof ASTSemanticException && ((ASTSemanticException)e1).getProblem() != null ) + throwBacktrack(((ASTSemanticException)e1).getProblem()); + else + throwBacktrack(firstOffset, endOffset, firstLine); } try { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java index 53156413f91..9b219867b2a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java @@ -2042,7 +2042,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto } } else - handleProblem( IProblem.SEMANTIC_NAME_NOT_FOUND, image, -1, -1, current.getLineNumber(), true ); + handleProblem( IProblem.SEMANTIC_NAME_NOT_FOUND, image, current.getOffset(), current.getEndOffset(), current.getLineNumber(), true ); } catch (ParserSymbolTableException e) {