[ https://issues.apache.org/jira/browse/GROOVY-10674?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Eric Milles updated GROOVY-10674: --------------------------------- Fix Version/s: 3.0.20 > STC crashes when combining use-site variance with bounded polymorphism > ---------------------------------------------------------------------- > > Key: GROOVY-10674 > URL: https://issues.apache.org/jira/browse/GROOVY-10674 > Project: Groovy > Issue Type: Bug > Components: Static compilation, Static Type Checker > Reporter: Stefanos Chaliasos > Assignee: Eric Milles > Priority: Major > Fix For: 4.0.5, 3.0.20 > > > I have the following Groovy program. > {code:groovy} > class Main { > static Foo<Bar<Byte, Byte>, ? super Bar<Byte, Byte>> foo = new Foo<>(new > Bar<>()) > } > class Bar<T extends Number, S extends T> {} > class Foo<M extends Bar<Byte, ? extends Byte>, D extends M> { > D x > public Foo(D x) { > this.x = x > } > } > {code} > h2. Actual Behavior > The program crashes the compiler and produces the following stack trace > {code:java} > >>> a serious error occurred: BUG! exception in phase 'instruction selection' > >>> in source unit 'Main.groovy' Expected earlier checking to detect generics > >>> parameter arity mismatch > Expected: Bar<T extends java.lang.Number,S extends T> > Supplied: Bar<M extends Bar<java.lang.Byte, ? extends java.lang.Byte>> > >>> stacktrace: > BUG! exception in phase 'instruction selection' in source unit 'Main.groovy' > Expected earlier checking to detect generics parameter arity mismatch > Expected: Bar<T extends java.lang.Number,S extends T> > Supplied: Bar<M extends Bar<java.lang.Byte, ? extends java.lang.Byte>> > at > org.codehaus.groovy.ast.tools.GenericsUtils.extractPlaceholders(GenericsUtils.java:189) > at > org.codehaus.groovy.ast.tools.GenericsUtils.extractPlaceholders(GenericsUtils.java:153) > at > org.codehaus.groovy.ast.GenericsType.compareGenericsWithBound(GenericsType.java:334) > at > org.codehaus.groovy.ast.GenericsType.checkGenerics(GenericsType.java:259) > at > org.codehaus.groovy.ast.GenericsType.isCompatibleWith(GenericsType.java:238) > at > org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.typeCheckMethodArgumentWithGenerics(StaticTypeCheckingSupport.java:1400) > at > org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.inferenceCheck(StaticTypeCheckingSupport.java:1551) > at > org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.typeCheckMethodsWithGenerics(StaticTypeCheckingSupport.java:1483) > at > org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.typeCheckMethodsWithGenerics(StaticTypeCheckingSupport.java:1431) > at > org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.typeCheckMethodsWithGenericsOrFail(StaticTypeCheckingVisitor.java:5753) > at > org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitConstructorCallExpression(StaticTypeCheckingVisitor.java:2303) > at > org.codehaus.groovy.transform.sc.StaticCompilationVisitor.visitConstructorCallExpression(StaticCompilationVisitor.java:435) > at > org.codehaus.groovy.ast.expr.ConstructorCallExpression.visit(ConstructorCallExpression.java:45) > at > org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitInitialExpression(StaticTypeCheckingVisitor.java:1945) > at > org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitField(StaticTypeCheckingVisitor.java:1931) > at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1117) > at > org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:52) > at > org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitClass(StaticTypeCheckingVisitor.java:437) > at > org.codehaus.groovy.transform.sc.StaticCompilationVisitor.visitClass(StaticCompilationVisitor.java:196) > at > org.codehaus.groovy.transform.sc.StaticCompileTransformation.visit(StaticCompileTransformation.java:68) > at > org.codehaus.groovy.control.customizers.ASTTransformationCustomizer.call(ASTTransformationCustomizer.groovy:303) > at > org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:937) > at > org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:692) > at > org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:666) > at > org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:647) > at > org.codehaus.groovy.tools.FileSystemCompiler.compile(FileSystemCompiler.java:311) > at > org.codehaus.groovy.tools.FileSystemCompiler.doCompilation(FileSystemCompiler.java:240) > at > org.codehaus.groovy.tools.FileSystemCompiler.commandLineCompile(FileSystemCompiler.java:165) > at > org.codehaus.groovy.tools.FileSystemCompiler.commandLineCompileWithErrorHandling(FileSystemCompiler.java:205) > at > org.codehaus.groovy.tools.FileSystemCompiler.main(FileSystemCompiler.java:189) > at > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78) > at > java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.base/java.lang.reflect.Method.invoke(Method.java:567) > at > org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:109) > at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:132) > {code} > h2. Expected Behavior > Compile successfully. > h2. Notes > Tested against master (commit: 2e82c9f5bd6201ed4724b26714275f4cef9df6e8) > Note that there are some old fixed bugs with similar stacktraces: > https://issues.apache.org/jira/browse/GROOVY-10230?filter=-2&jql=text%20~%20%22org.codehaus.groovy.ast.tools.GenericsUtils.extractPlaceholders%22 -- This message was sent by Atlassian Jira (v8.20.10#820010)