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 2021/11/03 16:23:00 UTC
[jira] [Created] (GROOVY-10344) STC crashes when bound has two
wildcard types as type arguments
Stefanos Chaliasos created GROOVY-10344:
-------------------------------------------
Summary: STC crashes when bound has two wildcard types as type arguments
Key: GROOVY-10344
URL: https://issues.apache.org/jira/browse/GROOVY-10344
Project: Groovy
Issue Type: Bug
Components: Static compilation, Static Type Checker
Affects Versions: 4.0.0-beta-1
Reporter: Stefanos Chaliasos
I have the following Groovy program.
{code:groovy}
@groovy.transform.CompileStatic
class Main {
public static final void main() {
final def x = ((B) null).foo(new A<>(), new A<>())
}
}
class A<O, S> {}
interface B {
abstract <F_P extends A<? extends Number, ? extends Number>> void foo(F_P y, F_P z)
}
{code}
h2. Actual Behavior
The compiler crashes with the following stacktrace
{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: A<O,S>
Supplied: A<F_P extends A<? extends java.lang.Number, ? extends java.lang.Number>>
>>> stacktrace:
BUG! exception in phase 'instruction selection' in source unit 'Main.groovy' Expected earlier checking to detect generics parameter arity mismatch
Expected: A<O,S>
Supplied: A<F_P extends A<? extends java.lang.Number, ? extends java.lang.Number>>
at org.codehaus.groovy.ast.tools.GenericsUtils.extractPlaceholders(GenericsUtils.java:195)
at org.codehaus.groovy.ast.tools.GenericsUtils.extractPlaceholders(GenericsUtils.java:146)
at org.codehaus.groovy.ast.GenericsType.compareGenericsWithBound(GenericsType.java:368)
at org.codehaus.groovy.ast.GenericsType.checkGenerics(GenericsType.java:292)
at org.codehaus.groovy.ast.GenericsType.isCompatibleWith(GenericsType.java:244)
at org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.applyGenericsConnections(StaticTypeCheckingSupport.java:1622)
at org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.inferenceCheck(StaticTypeCheckingSupport.java:1528)
at org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.typeCheckMethodsWithGenerics(StaticTypeCheckingSupport.java:1467)
at org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.typeCheckMethodsWithGenerics(StaticTypeCheckingSupport.java:1415)
at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.typeCheckMethodsWithGenericsOrFail(StaticTypeCheckingVisitor.java:5712)
at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethodCallExpression(StaticTypeCheckingVisitor.java:3524)
at org.codehaus.groovy.transform.sc.StaticCompilationVisitor.visitMethodCallExpression(StaticCompilationVisitor.java:414)
at org.codehaus.groovy.ast.expr.MethodCallExpression.visit(MethodCallExpression.java:77)
at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitBinaryExpression(StaticTypeCheckingVisitor.java:791)
at org.codehaus.groovy.ast.CodeVisitorSupport.visitDeclarationExpression(CodeVisitorSupport.java:335)
at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitDeclarationExpression(ClassCodeVisitorSupport.java:154)
at org.codehaus.groovy.ast.expr.DeclarationExpression.visit(DeclarationExpression.java:89)
at org.codehaus.groovy.ast.CodeVisitorSupport.visitExpressionStatement(CodeVisitorSupport.java:117)
at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitExpressionStatement(ClassCodeVisitorSupport.java:204)
at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitExpressionStatement(StaticTypeCheckingVisitor.java:2190)
at org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:41)
at org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:86)
at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:168)
at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitBlockStatement(StaticTypeCheckingVisitor.java:3935)
at org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:70)
at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:142)
at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:115)
at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitConstructorOrMethod(StaticTypeCheckingVisitor.java:2596)
at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:110)
at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.startMethodInference(StaticTypeCheckingVisitor.java:2585)
at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethod(StaticTypeCheckingVisitor.java:2559)
at org.codehaus.groovy.transform.sc.StaticCompilationVisitor.visitMethod(StaticCompilationVisitor.java:239)
at org.codehaus.groovy.ast.ClassNode.visitMethods(ClassNode.java:1134)
at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1127)
at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:52)
at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitClass(StaticTypeCheckingVisitor.java:438)
at org.codehaus.groovy.transform.sc.StaticCompilationVisitor.visitClass(StaticCompilationVisitor.java:197)
at org.codehaus.groovy.transform.sc.StaticCompileTransformation.visit(StaticCompileTransformation.java:68)
at org.codehaus.groovy.transform.ASTTransformationVisitor.visitClass(ASTTransformationVisitor.java:146)
at org.codehaus.groovy.transform.ASTTransformationVisitor.lambda$addPhaseOperations$2(ASTTransformationVisitor.java:229)
at org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:911)
at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:653)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:630)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:609)
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)
{code}
h2. Comment
The javac rejects the equivalent Java program because it cannot infer the type for variable x. I'm not sure if groovyc could infer the type of this variable
h2. Affected Version
master (commit: cee45d768bb65d1254a61a6dd4ce3c6a1f2ee3ca ).
--
This message was sent by Atlassian Jira
(v8.3.4#803005)