RFR: 8339190: Parameter arrays that are capped during annotation processing report incorrect length
Jan Lahoda
jlahoda at openjdk.org
Wed Oct 23 14:31:49 UTC 2024
On Wed, 23 Oct 2024 11:45:15 GMT, Nizar Benalla <nbenalla at openjdk.org> wrote:
> Can I please get a review for this change.
> Passes tier1, currently running tier 2-3.
>
> The regression test creates temporary files in `tmpdir` to check that the warning is emitted correctly.
> I've also added the new warning to `example.not-yet.txt` as the example would require a very large file.
>
> Here is the result of running `javap -c -p -v` on `ClassAnnotationWithLength_65536.class` and `ClassAnnotationWithLength_65537.class` respectively. Results are the same before/after the change.
>
>
> static int x;
> descriptor: I
> flags: (0x0008) ACC_STATIC
> RuntimeVisibleAnnotations:
> 0: #14(#15=s#16,#17=I#18,#19=[J#20])
> CustomAnno(
> value="custom"
> count=42
> arr=[-1l]
> )
>
>
>
> static int x;
> descriptor: I
> flags: (0x0008) ACC_STATIC
> RuntimeVisibleAnnotations:
> 0: #14(#15=s#16,#17=I#18,#19=[J#20,J#20])
> CustomAnno(
> value="custom"
> count=42
> arr=[-1l,-1l]
> )
>
>
> TIA
I am sorry, but producing warnings is IMO a wrong solution. While the Java language does not impose limits, the classfile format does, and if we cannot generate a classfile that corresponds to the input Java file, javac should not produce anything and should finish up with a compile-time error. That is what is done for other limits as well. Like, for example, here:
https://github.com/openjdk/jdk/blob/964d8d2234595afaf4dfe48ea5cacdbfd3792d03/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java#L940
(Although this check for annotations may need to be done in `ClassWriter`.)
-------------
PR Comment: https://git.openjdk.org/jdk/pull/21663#issuecomment-2432411334
More information about the compiler-dev
mailing list