Bug 39891

Summary: Diagnose parser crashed on code with syntax error.
Product: [Eclipse Project] JDT Reporter: Olivier Thomann <Olivier_Thomann>
Component: CoreAssignee: David Audel <david_audel>
Status: RESOLVED INVALID QA Contact:
Severity: normal    
Priority: P3 CC: philippe_mulet
Version: 3.0   
Target Milestone: 3.0 M2   
Hardware: PC   
OS: Windows 2000   
Whiteboard:

Description Olivier Thomann CLA 2003-07-10 14:59:07 EDT
Try to compile the following with the current HEAD contents.

class A {
	private void foo()
	{
		int i = 5;
		int j = 7;
		int k = 5;
		if (i < j > k) {
			System.out.println();
		}
	}
}

You get:
java.lang.ArrayIndexOutOfBoundsException
	at org.eclipse.jdt.internal.compiler.parser.Parser.tAction(Parser.java:6362)
	at
org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser.parseCheck(DiagnoseParser.java:1943)
	at
org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser.checkPrimaryDistance(DiagnoseParser.java:811)
	at
org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser.primaryPhase(DiagnoseParser.java:539)
	at
org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser.errorRecovery(DiagnoseParser.java:456)
	at
org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser.diagnoseParse(DiagnoseParser.java:366)
	at
org.eclipse.jdt.internal.compiler.parser.Parser.reportSyntaxErrors(Parser.java:5619)
	at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:5611)
	at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:5801)
	at
org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.parseStatements(MethodDeclaration.java:95)
	at
org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.parseMethod(TypeDeclaration.java:719)
	at org.eclipse.jdt.internal.compiler.Compiler.getMethodBodies(Compiler.java:381)
	at org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:522)
	at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:328)
	at org.eclipse.jdt.internal.compiler.batch.Main.performCompilation(Main.java:1459)
	at org.eclipse.jdt.internal.compiler.batch.Main.compile(Main.java:304)
	at org.eclipse.jdt.internal.compiler.batch.Main.compile(Main.java:199)
	at org.eclipse.jdt.internal.compiler.batch.Main.compile(Main.java:191)
	at org.eclipse.jdt.core.tools.compiler.Compile.main(Compile.java:8)
----------
1. ERROR in d:\temp\A.java (at line 0)
	class A {
	^
Internal compiler error
java.lang.ArrayIndexOutOfBoundsException
	at org.eclipse.jdt.internal.compiler.parser.Parser.tAction(Parser.java:6362)
	at
org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser.parseCheck(DiagnoseParser.java:1943)
	at
org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser.checkPrimaryDistance(DiagnoseParser.java:811)
	at
org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser.primaryPhase(DiagnoseParser.java:539)
	at
org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser.errorRecovery(DiagnoseParser.java:456)
	at
org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser.diagnoseParse(DiagnoseParser.java:366)
	at
org.eclipse.jdt.internal.compiler.parser.Parser.reportSyntaxErrors(Parser.java:5619)
	at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:5611)
	at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:5801)
	at
org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.parseStatements(MethodDeclaration.java:95)
	at
org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.parseMethod(TypeDeclaration.java:719)
	at org.eclipse.jdt.internal.compiler.Compiler.getMethodBodies(Compiler.java:381)
	at org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:522)
	at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:328)
	at org.eclipse.jdt.internal.compiler.batch.Main.performCompilation(Main.java:1459)
	at org.eclipse.jdt.internal.compiler.batch.Main.compile(Main.java:304)
	at org.eclipse.jdt.internal.compiler.batch.Main.compile(Main.java:199)
	at org.eclipse.jdt.internal.compiler.batch.Main.compile(Main.java:191)
	at org.eclipse.jdt.core.tools.compiler.Compile.main(Compile.java:8)

----------

Javac 1.4.2 reports:
A.java:7: operator > cannot be applied to boolean,int
                if (i < j > k) {
                          ^
1 error

Jikes 1.18 reports:
Found 1 semantic error compiling "D:/temp/A.java":

     7.                 if (i < j > k) {
                            ^---^
*** Semantic Error: The type of this expression, "boolean", is not numeric.
Comment 1 Olivier Thomann CLA 2003-07-10 15:05:15 EDT
Forget about it. This is due to the fact that I put my scanner in lookahead mode
without using a 1.5 grammar <g>. The '<' is seen as the '<' in the generic syntax.
Close as INVALID.