You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Stefanos Chaliasos (Jira)" <ji...@apache.org> on 2022/06/29 09:18:00 UTC

[jira] [Created] (GROOVY-10674) STC crashes when combining use-site variance with bounded polymorphism

|  ![](cid:jira-generated-image-avatar-1e4fe1d0-da0b-452d-9d9a-012874e8dc57) |
[Stefanos
Chaliasos](https://issues.apache.org/jira/secure/ViewProfile.jspa?name=schaliasos)
**created** an issue  
---|---  
|  
---  
|  [Groovy](https://issues.apache.org/jira/browse/GROOVY) / [![Bug](cid:jira-
generated-image-
avatar-5889b924-c787-4fc3-a9bf-242c19137f62)](https://issues.apache.org/jira/browse/GROOVY-10674)
[GROOVY-10674](https://issues.apache.org/jira/browse/GROOVY-10674)  
---  
[STC crashes when combining use-site variance with bounded
polymorphism](https://issues.apache.org/jira/browse/GROOVY-10674)  
| Issue Type: |  ![Bug](cid:jira-generated-image-
avatar-5889b924-c787-4fc3-a9bf-242c19137f62) Bug  
---|---  
Assignee: |  Unassigned  
Components: |  Static compilation, Static Type Checker  
Created: |  29/Jun/22 09:17  
Priority: |  ![Major](cid:jira-generated-image-static-
major-d26125a3-3381-4ed8-a290-bbaeeda9f162) Major  
Reporter: |  [Stefanos
Chaliasos](https://issues.apache.org/jira/secure/ViewProfile.jspa?name=schaliasos)  
|

I have the following Groovy program.

    
    
    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
      }
    }
    

## Actual Behavior

The program crashes the compiler and produces the following stack trace

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

## Expected Behavior

Compile successfully.

## 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](https://issues.apache.org/jira/browse/GROOVY-10230?filter=-2&jql=text%20~%20%22org.codehaus.groovy.ast.tools.GenericsUtils.extractPlaceholders%22)  
  
---  
|  |  [ ![Add Comment](cid:jira-generated-image-static-comment-
icon-7c490485-1f0f-4a88-b62d-aeb0674e573f)
](https://issues.apache.org/jira/browse/GROOVY-10674#add-comment "Add
Comment") |  [Add
Comment](https://issues.apache.org/jira/browse/GROOVY-10674#add-comment "Add
Comment")  
---|---  
  
|  This message was sent by Atlassian Jira (v8.20.10#820010-sha1:ace47f9) |  |
![Atlassian logo](https://issues.apache.org/jira/images/mail/atlassian-email-
logo.png)  
---