On Thu, 30 Mar 2023 22:09:24 GMT, Jorn Vernee <jver...@openjdk.org> wrote:

>> This seems to be caught without running the verifier as well:
>> 
>> 
>> Caused by: java.lang.IllegalStateException: Operand stack underflow at 
>> bytecode offset 79 of method 
>> invoke(SegmentAllocator,MemorySegment,MemorySegment)
>>   ...
>>         at 
>> java.base/jdk.internal.classfile.impl.StackMapGenerator.generatorError(StackMapGenerator.java:876)
>>         at 
>> java.base/jdk.internal.classfile.impl.StackMapGenerator.generatorError(StackMapGenerator.java:832)
>>         at 
>> java.base/jdk.internal.classfile.impl.StackMapGenerator$Frame.decStack(StackMapGenerator.java:1024)
>>         at 
>> java.base/jdk.internal.classfile.impl.StackMapGenerator.processBlock(StackMapGenerator.java:600)
>>         at 
>> java.base/jdk.internal.classfile.impl.StackMapGenerator.processMethod(StackMapGenerator.java:420)
>>         at 
>> java.base/jdk.internal.classfile.impl.StackMapGenerator.generate(StackMapGenerator.java:293)
>>         at 
>> java.base/jdk.internal.classfile.impl.StackMapGenerator.<init>(StackMapGenerator.java:232)
>>         at 
>> java.base/jdk.internal.classfile.impl.DirectCodeBuilder$4.writeBody(DirectCodeBuilder.java:333)
>>         at 
>> java.base/jdk.internal.classfile.impl.UnboundAttribute$AdHocAttribute.writeTo(UnboundAttribute.java:914)
>>         at 
>> java.base/jdk.internal.classfile.impl.AttributeHolder.writeTo(AttributeHolder.java:56)
>>         at 
>> java.base/jdk.internal.classfile.impl.DirectMethodBuilder.writeTo(DirectMethodBuilder.java:136)
>>         at 
>> java.base/jdk.internal.classfile.impl.BufWriterImpl.writeList(BufWriterImpl.java:194)
>>         at 
>> java.base/jdk.internal.classfile.impl.DirectClassBuilder.build(DirectClassBuilder.java:176)
>>         at 
>> java.base/jdk.internal.classfile.Classfile.build(Classfile.java:218)
>>         at 
>> java.base/jdk.internal.classfile.Classfile.build(Classfile.java:200)
>>         at 
>> java.base/jdk.internal.classfile.Classfile.build(Classfile.java:186)
>>         at 
>> java.base/jdk.internal.foreign.abi.BindingSpecializer.specializeHelper(BindingSpecializer.java:186)
>>         ...
>> 
>> 
>> (I think ASM will just throw an array index OOB exception when processing a 
>> subsequent frame)
>
> Just to clarify: I'm looking for the kind of errors that don't get caught by 
> just generating the class, but are also more informative than the default 
> VerifyError you would get from loading an invalid class.

Classfile API does have some sort of error reporting mechanism in verification; 
at least it tracks the error context.
https://github.com/openjdk/jdk/blob/83cf28f99639d80e62c4031c4c9752460de5f36c/src/java.base/share/classes/jdk/internal/classfile/impl/verifier/VerifierImpl.java#L1810-L1828
The method dumping is providing a yaml tree representation of the class file to 
the provided Consumer, and the VerifyError itself already includes the error 
context. What exact specific information are you looking for that's provided by 
ASM? We might be able to add it to Classfile API too.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/13247#discussion_r1153954352

Reply via email to