Bug 184957 - [1.5][compiler] Compiler crash
Summary: [1.5][compiler] Compiler crash
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.2.2   Edit
Hardware: PC Windows 2000
: P3 normal (vote)
Target Milestone: 3.3 M7   Edit
Assignee: Olivier Thomann CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2007-05-01 14:57 EDT by jan_bar CLA
Modified: 2007-05-07 10:18 EDT (History)
1 user (show)

See Also:


Attachments
Proposed fix (1.62 KB, patch)
2007-05-01 21:02 EDT, Olivier Thomann CLA
no flags Details | Diff
Regression test (1.50 KB, patch)
2007-05-01 21:03 EDT, Olivier Thomann CLA
no flags Details | Diff
Better fix (1.46 KB, patch)
2007-05-01 21:47 EDT, Olivier Thomann CLA
no flags Details | Diff
Regression tests (2.97 KB, patch)
2007-05-01 21:47 EDT, Olivier Thomann CLA
no flags Details | Diff
Better patch (1.43 KB, patch)
2007-05-01 23:17 EDT, Olivier Thomann CLA
no flags Details | Diff
Last patch (3.20 KB, patch)
2007-05-02 11:19 EDT, Olivier Thomann CLA
no flags Details | Diff
More regression tests (3.77 KB, patch)
2007-05-02 11:20 EDT, Olivier Thomann CLA
no flags Details | Diff
Last patch for 3.2.x maintenance stream (3.77 KB, patch)
2007-05-04 08:45 EDT, Olivier Thomann CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
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