inline record ref projection contains an empty record attribute
Remi Forax
forax at univ-mlv.fr
Mon Dec 7 16:25:36 UTC 2020
----- Mail original -----
> De: "Srikanth" <srikanth.adayapalam at oracle.com>
> À: "valhalla-dev" <valhalla-dev at openjdk.java.net>
> Cc: "Jim Laskey" <james.laskey at oracle.com>
> Envoyé: Lundi 7 Décembre 2020 08:27:39
> Objet: Re: inline record ref projection contains an empty record attribute
> Hi Remi,
Hi Srikanth, hi Jim,
>
> Thanks for the problem report.
> https://bugs.openjdk.java.net/browse/JDK-8251041 tracks the issues
> relating to inline records.
> We know of quite a few issues. (including reported by you in the past) -
> Jim is looking into these.
my main blocking point actually is that the reflection API checks if a class is a record using getSuperclass() == j.l.Record.class instead of isAssignableFrom (or mark all classes that inherits directly or indirectly from java.lang.Record if perf is an issue).
>
> Srikanth
Rémi
>
> On 02/12/20 5:48 pm, Remi Forax wrote:
>> Hi all,
>> using this inline record
>>
>> public @__inline__ record IntBox(int value) {}
>>
>> When the compiler generates the ref projection, IntBox$Ref, an empty attribute
>> "Record" is generated which i believe is a mistake.
>> The ref projection should not contains that attribute at all.
>>
>> regards,
>> Rémi
>>
>> ---
>> Classfile
>> /home/forax/git/transmogrif/target/classes/fr/umlv/transmogrif/IntBox$ref.class
>> Last modified Dec 2, 2020; size 222 bytes
>> SHA-256 checksum
>> 2ee826fe2e8735044ea2a7f9e766aa101a7786385b5d27291864e7e4d550d6e2
>> Compiled from "IntBox.java"
>> public abstract class fr.umlv.transmogrif.IntBox$ref extends java.lang.Record
>> minor version: 0
>> major version: 60
>> flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
>> this_class: #1 // fr/umlv/transmogrif/IntBox$ref
>> super_class: #3 // java/lang/Record
>> interfaces: 0, fields: 0, methods: 0, attributes: 4
>> Constant pool:
>> #1 = Class #2 // fr/umlv/transmogrif/IntBox$ref
>> #2 = Utf8 fr/umlv/transmogrif/IntBox$ref
>> #3 = Class #4 // java/lang/Record
>> #4 = Utf8 java/lang/Record
>> #5 = Utf8 SourceFile
>> #6 = Utf8 IntBox.java
>> #7 = Utf8 NestMembers
>> #8 = Class #9 // fr/umlv/transmogrif/IntBox
>> #9 = Utf8 fr/umlv/transmogrif/IntBox
>> #10 = Utf8 Record
>> <------------ oops
>> #11 = Utf8 PermittedSubclasses
>> {
>> }
>> SourceFile: "IntBox.java"
>> NestMembers:
>> fr/umlv/transmogrif/IntBox
>> PermittedSubclasses:
>> fr/umlv/transmogrif/IntBox
>> Record:
>> [forax at localhost transmogrif]$ javap -private -c -verbose
>> target/classes/fr/umlv/transmogrif/IntBox\$ref.class
>> Classfile
>> /home/forax/git/transmogrif/target/classes/fr/umlv/transmogrif/IntBox$ref.class
>> Last modified Dec 2, 2020; size 222 bytes
>> SHA-256 checksum
>> 2ee826fe2e8735044ea2a7f9e766aa101a7786385b5d27291864e7e4d550d6e2
>> Compiled from "IntBox.java"
>> public abstract class fr.umlv.transmogrif.IntBox$ref extends java.lang.Record
>> minor version: 0
>> major version: 60
>> flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
>> this_class: #1 // fr/umlv/transmogrif/IntBox$ref
>> super_class: #3 // java/lang/Record
>> interfaces: 0, fields: 0, methods: 0, attributes: 4
>> Constant pool:
>> #1 = Class #2 // fr/umlv/transmogrif/IntBox$ref
>> #2 = Utf8 fr/umlv/transmogrif/IntBox$ref
>> #3 = Class #4 // java/lang/Record
>> #4 = Utf8 java/lang/Record
>> #5 = Utf8 SourceFile
>> #6 = Utf8 IntBox.java
>> #7 = Utf8 NestMembers
>> #8 = Class #9 // fr/umlv/transmogrif/IntBox
>> #9 = Utf8 fr/umlv/transmogrif/IntBox
>> #10 = Utf8 Record
>> #11 = Utf8 PermittedSubclasses
>> {
>> }
>> SourceFile: "IntBox.java"
>> NestMembers:
>> fr/umlv/transmogrif/IntBox
>> PermittedSubclasses:
>> fr/umlv/transmogrif/IntBox
>> Record: <------------------------ oops
More information about the valhalla-dev
mailing list