Bug 184957

Summary: [1.5][compiler] Compiler crash
Product: [Eclipse Project] JDT Reporter: jan_bar <herkule9s>
Component: CoreAssignee: Olivier Thomann <Olivier_Thomann>
Status: VERIFIED FIXED QA Contact:
Severity: normal    
Priority: P3 CC: philippe_mulet
Version: 3.2.2   
Target Milestone: 3.3 M7   
Hardware: PC   
OS: Windows 2000   
Whiteboard:
Attachments:
Description Flags
Proposed fix
none
Regression test
none
Better fix
none
Regression tests
none
Better patch
none
Last patch
none
More regression tests
none
Last patch for 3.2.x maintenance stream none

Description jan_bar CLA 2007-05-01 14:57:17 EDT
The following code crashes eclipse compiler:

public class CompilerCrash {
	public static void main(String[] args) {
	    if(new Integer(2) == 0) {}
	}
}

Internal compiler error
java.lang.ArrayIndexOutOfBoundsException: -1
	at org.eclipse.jdt.internal.compiler.codegen.StackMapFrameCodeStream.generateUnboxingConversion(StackMapFrameCodeStream.java:737)
	at org.eclipse.jdt.internal.compiler.codegen.CodeStream.generateImplicitConversion(CodeStream.java:1907)
	at org.eclipse.jdt.internal.compiler.ast.AllocationExpression.generateCode(AllocationExpression.java:129)
	at org.eclipse.jdt.internal.compiler.ast.EqualExpression.generateNonBooleanEqual(EqualExpression.java:418)
	at org.eclipse.jdt.internal.compiler.ast.EqualExpression.generateCode(EqualExpression.java:158)
	at org.eclipse.jdt.internal.compiler.ast.IfStatement.generateCode(IfStatement.java:200)
	at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.generateCode(AbstractMethodDeclaration.java:229)
	at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.generateCode(AbstractMethodDeclaration.java:176)
	at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.generateCode(TypeDeclaration.java:533)
	at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.generateCode(TypeDeclaration.java:584)
	at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.generateCode(CompilationUnitDeclaration.java:214)
	at org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:602)
	at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:411)
	at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:353)
	at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.compile(IncrementalImageBuilder.java:302)
	at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:290)
	at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.build(IncrementalImageBuilder.java:130)
	at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:252)
	at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:185)
	at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:603)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:167)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:201)
	at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:230)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:233)
	at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:252)
	at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:285)
	at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:154)
	at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:217)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:58)
	zzzSCJP/src/chapter3/e	CompilerCrash.java	line 0	1178045134109	211779
Comment 1 Olivier Thomann CLA 2007-05-01 15:00:12 EDT
It works fine with 3.3M7 candidate.
I'll check 3.2.x maintenance stream.
Comment 2 Olivier Thomann CLA 2007-05-01 15:19:06 EDT
Reproduced with 3.2.x maintenance stream.
Philippe, do you want a fix for this one in this stream?
Comment 3 Olivier Thomann CLA 2007-05-01 15:53:38 EDT
This is also a problem in HEAD as it leads to a VerifyError.
I am invesigating a fix.
Thanks for the report.
Comment 4 jan_bar CLA 2007-05-01 16:28:02 EDT
Thanks for your support and super quick answer, I was thinking that this was an automated response :-)
Comment 5 Olivier Thomann CLA 2007-05-01 21:02:55 EDT
Created attachment 65554 [details]
Proposed fix
Comment 6 Olivier Thomann CLA 2007-05-01 21:03:15 EDT
Created attachment 65555 [details]
Regression test
Comment 7 Olivier Thomann CLA 2007-05-01 21:47:32 EDT
Created attachment 65557 [details]
Better fix
Comment 8 Olivier Thomann CLA 2007-05-01 21:47:50 EDT
Created attachment 65558 [details]
Regression tests
Comment 9 Olivier Thomann CLA 2007-05-01 23:17:09 EDT
Created attachment 65559 [details]
Better patch

Cleanup some unnecessary test in the switch statement.
Comment 10 Olivier Thomann CLA 2007-05-01 23:17:39 EDT
Philippe, please review.
Would be a good candidate for 3.3M7.
Comment 11 Philipe Mulet CLA 2007-05-02 09:51:04 EDT
Patch looks good. +1 for 3.2.x.
Also did you check QualifiedAllocationExpression ? It may need a similar fix.
Comment 12 Olivier Thomann CLA 2007-05-02 11:19:30 EDT
Created attachment 65619 [details]
Last patch

This patch also includes the corresponding change for the QualifiedAllocationExpression
Comment 13 Olivier Thomann CLA 2007-05-02 11:20:07 EDT
Created attachment 65620 [details]
More regression tests
Comment 14 Olivier Thomann CLA 2007-05-02 11:21:11 EDT
Set as 3.3M7.
Fix in under testing.
Comment 15 Olivier Thomann CLA 2007-05-02 13:12:20 EDT
Released for 3.3M7.
Added regression tests:
org.eclipse.jdt.core.tests.compiler.regression.AutoBoxingTest.test147()
org.eclipse.jdt.core.tests.compiler.regression.AutoBoxingTest.test148()
org.eclipse.jdt.core.tests.compiler.regression.AutoBoxingTest.test149()
org.eclipse.jdt.core.tests.compiler.regression.AutoBoxingTest.test150()
org.eclipse.jdt.core.tests.compiler.regression.AutoBoxingTest.test151()
org.eclipse.jdt.core.tests.compiler.regression.AutoBoxingTest.test152()
Comment 16 Olivier Thomann CLA 2007-05-03 20:53:04 EDT
Verify for 3.3M7 with  I20070503-1400
Comment 17 Olivier Thomann CLA 2007-05-04 08:45:00 EDT
Reopen to backport to 3.2.x maintenance stream.
Comment 18 Olivier Thomann CLA 2007-05-04 08:45:52 EDT
Created attachment 65913 [details]
Last patch for 3.2.x maintenance stream
Comment 19 Olivier Thomann CLA 2007-05-04 09:15:59 EDT
Released in 3.2 maintenance stream.
Same regression tests added.
Comment 20 Olivier Thomann CLA 2007-05-04 09:16:19 EDT
I'll set the milestone when 3.2.3 is available.
Comment 21 Jerome Lanneluc CLA 2007-05-04 10:05:52 EDT
Setting milestone to 3.3M7 since there might never be a 3.2.3. If a 3.2.3 was to appear, then we should set the milestone to 3.2.3.
Comment 22 Olivier Thomann CLA 2007-05-07 10:18:10 EDT
Verify for 3.3M7 with  I20070503-1400