[lworld] RFR: 8320437: [lworld] Adding internal null-restricted storage API points [v3]

Tobias Hartmann thartmann at openjdk.org
Fri Nov 24 09:30:36 UTC 2023


On Tue, 21 Nov 2023 19:00:12 GMT, Frederic Parain <fparain at openjdk.org> wrote:

>> Adding internal null-restricted storage API points
>
> Frederic Parain has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Field inheritance check should be limited to instance fields

Sorry for all the delayed comments, I'm reviewing this while trying to convert some of the C2 tests. The following test fails when disabling `EnablePrimitiveClasses`:

`java --add-exports java.base/jdk.internal.vm.annotation=ALL-UNNAMED --add-exports java.base/jdk.internal.misc=ALL-UNNAMED -cp . -XX:+EnableValhalla -XX:-EnablePrimitiveClasses -Xint Test`


# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f665bbba4cb, pid=1616701, tid=1616702
#
# JRE version: Java(TM) SE Runtime Environment (22.0) (fastdebug build 22-lworld4ea-2023-11-20-1024510.tobias...)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (fastdebug 22-lworld4ea-2023-11-20-1024510.tobias..., interpreted mode, compressed oops, compressed class ptrs, g1 gc, linux-amd64)
# Problematic frame:
# V  [libjvm.so+0xc174cb]  FieldLayoutBuilder::inline_class_field_sorting(JavaThread*)+0x4cb

Stack: [0x00007f665ad49000,0x00007f665ae4a000],  sp=0x00007f665ae46b90,  free space=1014k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0xc174cb]  FieldLayoutBuilder::inline_class_field_sorting(JavaThread*)+0x4cb  (array.hpp:126)
V  [libjvm.so+0xc1d3e7]  FieldLayoutBuilder::compute_inline_class_layout(JavaThread*)+0x27  (fieldLayoutBuilder.cpp:871)
V  [libjvm.so+0xc1daaa]  FieldLayoutBuilder::build_layout(JavaThread*)+0x1a  (fieldLayoutBuilder.cpp:1013)
V  [libjvm.so+0x98da69]  ClassFileParser::post_process_parsed_stream(ClassFileStream const*, ConstantPool*, JavaThread*)+0x1799  (classFileParser.cpp:6631)
V  [libjvm.so+0x98ee62]  ClassFileParser::ClassFileParser(ClassFileStream*, Symbol*, ClassLoaderData*, ClassLoadInfo const*, ClassFileParser::Publicity, JavaThread*)+0x392  (classFileParser.cpp:6022)
V  [libjvm.so+0x1215f23]  KlassFactory::create_from_stream(ClassFileStream*, Symbol*, ClassLoaderData*, ClassLoadInfo const&, JavaThread*)+0x133  (klassFactory.cpp:201)
V  [libjvm.so+0x17b19c3]  SystemDictionary::resolve_class_from_stream(ClassFileStream*, Symbol*, Handle, ClassLoadInfo const&, JavaThread*)+0xb3  (systemDictionary.cpp:947)
V  [libjvm.so+0x102dae2]  jvm_define_class_common(char const*, _jobject*, signed char const*, int, _jobject*, char const*, JavaThread*)+0x242  (jvm.cpp:952)
V  [libjvm.so+0x102dd54]  JVM_DefineClassWithSource+0x94  (jvm.cpp:1119)
C  [libjava.so+0xf2d2]  Java_java_lang_ClassLoader_defineClass1+0x182  (ClassLoader.c:139)




import jdk.internal.misc.VM;
import jdk.internal.vm.annotation.ImplicitlyConstructible;
import jdk.internal.vm.annotation.LooselyConsistentValue;
import jdk.internal.vm.annotation.NullRestricted;

public class Test {

    @ImplicitlyConstructible
    @LooselyConsistentValue
    static value class MyValueEmpty {

    }

    @ImplicitlyConstructible
    @LooselyConsistentValue
    static value class EmptyContainer {
        @NullRestricted
        MyValueEmpty empty = new MyValueEmpty();
    }

    public static void main(String[] args) {
        new EmptyContainer();
    }
}

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

Changes requested by thartmann (Committer).

PR Review: https://git.openjdk.org/valhalla/pull/947#pullrequestreview-1747601428



More information about the valhalla-dev mailing list