[ 
https://issues.apache.org/jira/browse/GROOVY-11359?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17837281#comment-17837281
 ] 

Adrien Guichard commented on GROOVY-11359:
------------------------------------------

FYI, After applying other modifications:

{noformat}
ClassNode retClassNode0 = ClassHelper.make(GetMethodReturn)
ClassNode retClassNode3 = new GenericsType(ClassHelper.make(GetMethodReturn, 
false), [ClassHelper.make(methodNode.returnType.typeClass)] as ClassNode[], 
null).type
ClassNode retClassNodeNoGenerics = 
ClassHelper.make(ClassHelper.make(GetMethodReturn, false).typeClass, false)

ReturnStatement code = new ReturnStatement(
    new CastExpression(retClassNode0,
                new ConstructorCallExpression(
                        retClassNodeNoGenerics,
                        new ArgumentListExpression([
                                new StaticMethodCallExpression(
                                        classNode,
                                        "getMethod",
                                        new ArgumentListExpression(
                                                [new 
ConstantExpression(methodNode.name)] as List<Expression>
                                        )),
                                new MethodCallExpression(
                                        new VariableExpression('this'),
                                        methodNode.name,
                                        [] as ArgumentListExpression),
                        ] as List<Expression>)
                )
        )
)

// cast something
new MethodNode(
        methodName,
        MethodNode.ACC_PUBLIC,
        retClassNode0,
        [] as Parameter[],
        [] as ClassNode[],
        code
)
{noformat}

I do obtain the following message:

{noformat}
A transform used a generics containing ClassNode ast.type.GetMethodReturn <T 
extends java.lang.Object> for the method public ast.type.GetMethodReturn 
getTruc_()  { ... } directly. You are not supposed to do this. Please create a 
new ClassNode referring to the old ClassNode and use the new ClassNode instead 
of the old one. Otherwise the compiler will create wrong descriptors and a 
potential NullPointerException in TypeResolver in the OpenJDK. If this is not 
your own doing, please report this bug to the writer of the transform.
{noformat}

I do not know if it is a progress.


> ASTTransformation cause "General error during instruction selection"
> --------------------------------------------------------------------
>
>                 Key: GROOVY-11359
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11359
>             Project: Groovy
>          Issue Type: Bug
>          Components: Compiler
>    Affects Versions: 3.0.21
>         Environment: $ java -fullversion
> openjdk full version "17.0.10+7"
> $ uname -a
> Linux auoHome 6.6.26-1-MANJARO #1 SMP PREEMPT_DYNAMIC Wed Apr 10 20:11:08 UTC 
> 2024 x86_64 GNU/Linux
>            Reporter: Adrien Guichard
>            Priority: Major
>             Fix For: 3.0.11
>
>         Attachments: testcase-asttransform-ko.tar.gz
>
>
> When assembling the *Grails* project, I do obtain the following stacktrace:
>  java.lang.ArrayIndexOutOfBoundsException: size==0
> at 
> org.codehaus.groovy.classgen.asm.OperandStack.ensureStackNotEmpty(OperandStack.java:279)
> at 
> org.codehaus.groovy.classgen.asm.OperandStack.replace(OperandStack.java:271)
> at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitCastExpression(AsmClassGenerator.java:815)
> at org.codehaus.groovy.ast.expr.CastExpression.visit(CastExpression.java:90)
> at 
> org.codehaus.groovy.classgen.asm.StatementWriter.writeReturn(StatementWriter.java:615)
> [. . .]
> Tell me if you need a more complete stacktrace. I try to work around this 
> bug, changing the AST, without success. The error looks the same {*}each 
> time{*}.
> To reproduce:
> $ tar xvfz testcase-asttransform-ko.tar.gz
> $ cd groovyInfra
> $ ./gradlew publishMavenPublicationToMavenLocal
> $ cd ..
> $ cd t620g
> $ ./gradlew assemble
> => BROKEN HERE
> Thanks for your help !



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to