Community
Participate
Working Groups
I isolated one more problem in RC3, the following snippet causes internal compilation error (I know the code is sligthly stupid but I've found it in one of classes in our project. In fact it should compile successfully): public class X { public static void main(String[] args) { if(true) throw new RuntimeException("X"); X: System.out.println("X"); } } } --- Session: eclipse.buildId=I20050617-1618 java.version=1.4.2_08 java.vendor=Sun Microsystems Inc. BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=pl_PL Command-line arguments: -os win32 -ws win32 -arch x86 --- Exception: java.lang.NullPointerException at org.eclipse.jdt.internal.compiler.ast.MessageSend.generateCode(MessageSend.java:99) at org.eclipse.jdt.internal.compiler.ast.Expression.generateCode(Expression.java:607) at org.eclipse.jdt.internal.compiler.ast.LabeledStatement.generateCode(LabeledStatement.java:90) at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.generateCode(AbstractMethodDeclaration.java:222) at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.generateCode(AbstractMethodDeclaration.java:169) at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.generateCode(TypeDeclaration.java:561) at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.generateCode(TypeDeclaration.java:615) at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.generateCode(CompilationUnitDeclaration.java:184) at org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:510) at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:329) at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:240) at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:190) at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:50) at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:213) at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:141) at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:593) at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:1044) at org.eclipse.core.runtime.Platform.run(Platform.java:783) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:168) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:202) at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:231) at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:1044) at org.eclipse.core.runtime.Platform.run(Platform.java:783) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:234) at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:253) at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:282) at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:139) at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:200) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:76)
Sorry, there is a mistake. Should be: public class X { public static void main(String[] args) { if(true) throw new RuntimeException("X"); X: System.out.println("X"); } }
Regression compare to 3.0.2. Another test case is: public class X { public static void main(String[] args) { if(true) { System.out.println("Y"); return; } loop: System.out.println("X"); } }
Fix is trivial, and since this is a regression. Candidating for RC4.
Created attachment 23733 [details] Patch for LabeledStatement We are doing the same (missing) check for all other statements. I believe in 3.0 we were silently generating deadcode, but now it is causing more grief.
Added regression test: ConformTest#test247. Released fix.
In 3.0.2, dead code was generated. public static void main(String[] args); 0 new java.lang.RuntimeException [17] 3 dup 4 ldc <String "X"> [18] 6 invokespecial java.lang.RuntimeException(java.lang.String) [21] 9 athrow 10 getstatic java.lang.System.out : java.io.PrintStream [27] 13 ldc <String "X"> [18] 15 invokevirtual java.io.PrintStream.println(java.lang.String) : void [32] From 10 to 15, the bytecodes are unreachable.
Verified for Build id: I20050624-0010.
Verified.