[
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: 4.0.5
(was: 5.0.0-alpha-1)
> 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
>
>
> 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)