Bug 110563 - [1.5][compiler] Internal compiler error for varags
Summary: [1.5][compiler] Internal compiler error for varags
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.2   Edit
Hardware: PC Linux
: P3 major (vote)
Target Milestone: 3.1.1   Edit
Assignee: Philipe Mulet CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-09-26 03:22 EDT by Pekka Enberg CLA
Modified: 2005-09-27 15:37 EDT (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Pekka Enberg CLA 2005-09-26 03:22:51 EDT
The following code causes an internal compiler error for Eclipse 3.2 M1 and 3.2
M2. It works fine in Eclipse 3.1 RC1.

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;

import junit.framework.TestCase;

/**
 * @author Pekka Enberg
 */
public class BreakEclipseTest extends TestCase {
    public void testBreak() {
        Collection<Class> classes = new ArrayList<Class>();
        assertEquals(3, classes.size());
        assertTrue(classes.containsAll(Arrays.asList(String.class,
Integer.class, Long.class)));
    }
}

The error is:

Error 2005-09-26 10:21:18.198 Error in JDT Core during AST creation
java.lang.NullPointerException
at org.eclipse.jdt.internal.compiler.lookup.Scope.lowerUpperBound(Scope.java:2965)
at
org.eclipse.jdt.internal.compiler.lookup.Scope.leastContainingTypeArgument(Scope.java:2927)
at
org.eclipse.jdt.internal.compiler.lookup.Scope.leastContainingInvocation(Scope.java:2845)
at org.eclipse.jdt.internal.compiler.lookup.Scope.lowerUpperBound(Scope.java:2985)
at org.eclipse.jdt.internal.compiler.lookup.Scope.lowerUpperBound(Scope.java:2945)
at
org.eclipse.jdt.internal.compiler.lookup.ParameterizedGenericMethodBinding.resolveSubstituteConstraints(ParameterizedGenericMethodBinding.java:245)
at
org.eclipse.jdt.internal.compiler.lookup.ParameterizedGenericMethodBinding.inferFromArgumentTypes(ParameterizedGenericMethodBinding.java:167)
at
org.eclipse.jdt.internal.compiler.lookup.ParameterizedGenericMethodBinding.computeCompatibleMethod(ParameterizedGenericMethodBinding.java:63)
at
org.eclipse.jdt.internal.compiler.lookup.Scope.computeCompatibleMethod(Scope.java:358)
at org.eclipse.jdt.internal.compiler.lookup.Scope.findMethod(Scope.java:1118)
at org.eclipse.jdt.internal.compiler.lookup.Scope.getMethod(Scope.java:2102)
at
org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java:314)
at
org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java:291)
at
org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java:291)
at org.eclipse.jdt.internal.compiler.ast.Expression.resolve(Expression.java:829)
at
org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolveStatements(AbstractMethodDeclaration.java:418)
at
org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.resolveStatements(MethodDeclaration.java:177)
at
org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:396)
at
org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1082)
at
org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1131)
at
org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:305)
at
org.eclipse.jdt.core.dom.CompilationUnitResolver.resolve(CompilationUnitResolver.java:821)
at
org.eclipse.jdt.core.dom.CompilationUnitResolver.resolve(CompilationUnitResolver.java:498)
at org.eclipse.jdt.core.dom.ASTParser.internalCreateAST(ASTParser.java:789)
at org.eclipse.jdt.core.dom.ASTParser.createAST(ASTParser.java:588)
at org.eclipse.jdt.internal.ui.javaeditor.ASTProvider$1.run(ASTProvider.java:566)
at
org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:1044)
at org.eclipse.core.runtime.Platform.run(Platform.java:783)
at
org.eclipse.jdt.internal.ui.javaeditor.ASTProvider.createAST(ASTProvider.java:563)
at org.eclipse.jdt.internal.ui.javaeditor.ASTProvider.getAST(ASTProvider.java:493)
at
org.eclipse.jdt.internal.ui.javaeditor.ClipboardOperationAction.getClipboardData(ClipboardOperationAction.java:393)
at
org.eclipse.jdt.internal.ui.javaeditor.ClipboardOperationAction.doCutCopyWithImportsOperation(ClipboardOperationAction.java:322)
at
org.eclipse.jdt.internal.ui.javaeditor.ClipboardOperationAction.internalDoOperation(ClipboardOperationAction.java:278)
at
org.eclipse.jdt.internal.ui.javaeditor.ClipboardOperationAction$1.run(ClipboardOperationAction.java:247)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
at
org.eclipse.jdt.internal.ui.javaeditor.ClipboardOperationAction.run(ClipboardOperationAction.java:245)
at org.eclipse.jface.action.Action.runWithEvent(Action.java:996)
at org.eclipse.ui.commands.ActionHandler.execute(ActionHandler.java:182)
at
org.eclipse.ui.internal.handlers.LegacyHandlerWrapper.execute(LegacyHandlerWrapper.java:108)
at org.eclipse.core.commands.Command.execute(Command.java:311)
at
org.eclipse.core.commands.ParameterizedCommand.execute(ParameterizedCommand.java:397)
at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:459)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:781)
at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:828)
at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:550)
at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$3(WorkbenchKeyboard.java:493)
at
org.eclipse.ui.internal.keys.WorkbenchKeyboard$KeyDownFilter.handleEvent(WorkbenchKeyboard.java:117)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1244)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1049)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1074)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1059)
at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1086)
at org.eclipse.swt.widgets.Widget.gtk_key_press_event(Widget.java:640)
at org.eclipse.swt.widgets.Control.gtk_key_press_event(Control.java:1965)
at org.eclipse.swt.widgets.Composite.gtk_key_press_event(Composite.java:564)
at org.eclipse.swt.widgets.Widget.windowProc(Widget.java:1395)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:3490)
at org.eclipse.swt.internal.gtk.OS._gtk_main_do_event(Native Method)
at org.eclipse.swt.internal.gtk.OS.gtk_main_do_event(OS.java:4891)
at org.eclipse.swt.widgets.Display.eventProc(Display.java:1059)
at org.eclipse.swt.internal.gtk.OS._g_main_context_iteration(Native Method)
at org.eclipse.swt.internal.gtk.OS.g_main_context_iteration(OS.java:1271)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2603)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1755)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1719)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:368)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:143)
at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:106)
at
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:226)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:377)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:164)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.eclipse.core.launcher.Main.invokeFramework(Main.java:338)
at org.eclipse.core.launcher.Main.basicRun(Main.java:282)
at org.eclipse.core.launcher.Main.run(Main.java:977)
at org.eclipse.core.launcher.Main.main(Main.java:952)
Comment 1 Philipe Mulet CLA 2005-09-26 10:11:54 EDT
The problem came from the substitute collecting which allowed null values to
show up (when growing array of substitutes), then the infinite regression check
did not handle these nicely.

Made grow not introduce nulls, and added protection to regression check (since
may occur through different execution path).

Added VarargsTest#test036.
Fix in 3.1 maintenance branch, and HEAD.
Comment 2 Philipe Mulet CLA 2005-09-26 10:12:43 EDT
Fixed in build > 3.1rc2
Comment 3 Philipe Mulet CLA 2005-09-26 10:13:10 EDT
(should read: build > 3.1.1rc2)
Comment 4 Olivier Thomann CLA 2005-09-27 15:37:06 EDT
Verified in  M20050923-1430 + JDT/Core 3.1.1RC3 candidate