[ 
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)

Reply via email to