Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions common.json
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,12 @@
"graalvm-ee-25-ea": {"name": "graalvm-jdk", "version": "25.0.0", "ea": "36", "platformspecific": true },

"oraclejdk-latest": {"name": "jpg-jdk", "version": "25", "build_id": "jdk-25+37", "platformspecific": true, "extrabundles": ["static-libs"]},
"labsjdk-ce-latest": {"name": "labsjdk", "version": "ce-25+37-jvmci-b03", "platformspecific": true },
"labsjdk-ce-latestDebug": {"name": "labsjdk", "version": "ce-25+37-jvmci-b03-debug", "platformspecific": true },
"labsjdk-ce-latest-llvm": {"name": "labsjdk", "version": "ce-25+37-jvmci-b03-sulong", "platformspecific": true },
"labsjdk-ee-latest": {"name": "labsjdk", "version": "ee-25+37-jvmci-b03", "platformspecific": true },
"labsjdk-ee-latestDebug": {"name": "labsjdk", "version": "ee-25+37-jvmci-b03-debug", "platformspecific": true },
"labsjdk-ee-latest-llvm": {"name": "labsjdk", "version": "ee-25+37-jvmci-b03-sulong", "platformspecific": true }
"labsjdk-ce-latest": {"name": "labsjdk", "version": "ce-25+37-jvmci-b04", "platformspecific": true },
"labsjdk-ce-latestDebug": {"name": "labsjdk", "version": "ce-25+37-jvmci-b04-debug", "platformspecific": true },
"labsjdk-ce-latest-llvm": {"name": "labsjdk", "version": "ce-25+37-jvmci-b04-sulong", "platformspecific": true },
"labsjdk-ee-latest": {"name": "labsjdk", "version": "ee-25+37-jvmci-b04", "platformspecific": true },
"labsjdk-ee-latestDebug": {"name": "labsjdk", "version": "ee-25+37-jvmci-b04-debug", "platformspecific": true },
"labsjdk-ee-latest-llvm": {"name": "labsjdk", "version": "ee-25+37-jvmci-b04-sulong", "platformspecific": true }
},

"eclipse": {
Expand Down
3 changes: 1 addition & 2 deletions compiler/ci/ci_common/gate.jsonnet
Original file line number Diff line number Diff line change
Expand Up @@ -550,8 +550,7 @@
local style_builds = [self.make_build(self.jdk_latest, "linux-amd64", "style").build + {
environment+: {
# Run the strict JVMCI version check, i.e., that JVMCIVersionCheck.JVMCI_MIN_VERSION matches the versions in common.json.
# temporarily disable until labsjdk-ce|ee-25 is gone from common.json
# JVMCI_VERSION_CHECK: "strict",
JVMCI_VERSION_CHECK: "strict",
},
}],

Expand Down
13 changes: 7 additions & 6 deletions compiler/mx.compiler/mx_compiler.py
Original file line number Diff line number Diff line change
Expand Up @@ -1243,12 +1243,13 @@ def get_latest_jvmci_version():
# only compare the same major versions
if latest == 'not found':
latest = current
elif latest != current:
# All JVMCI JDKs in common.json with the same major version
# are expected to have the same JVMCI version.
# If they don't then the repo is in some transitionary state
# (e.g. making a JVMCI release) so skip the check.
return False, distribution
# [GR-69961] temporarily disable until labsjdk-ce|ee-25 is gone from common.json
# elif latest != current:
# # All JVMCI JDKs in common.json with the same major version
# # are expected to have the same JVMCI version.
# # If they don't then the repo is in some transitionary state
# # (e.g. making a JVMCI release) so skip the check.
# return False, distribution
return not isinstance(latest, str), latest

version_check_setting = os.environ.get('JVMCI_VERSION_CHECK', None)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ public final class JVMCIVersionCheck {
// Checkstyle: stop stable iteration order check
private static final Map<String, Map<String, Version>> JVMCI_MIN_VERSIONS = Map.of(
"25", Map.of(
"Oracle Corporation", createLabsJDKVersion("25+37", 1),
DEFAULT_VENDOR_ENTRY, createLabsJDKVersion("25+37", 1)));
"Oracle Corporation", createLabsJDKVersion("25+37", 4),
DEFAULT_VENDOR_ENTRY, createLabsJDKVersion("25+37", 4)));
// Checkstyle: resume stable iteration order check

private static final int NA = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@

import jdk.graal.compiler.core.common.LibGraalSupport;
import jdk.graal.compiler.debug.GraalError;

import jdk.vm.ci.meta.Assumptions;
import jdk.vm.ci.meta.JavaConstant;
import jdk.vm.ci.meta.JavaKind;
import jdk.vm.ci.meta.JavaType;
import jdk.vm.ci.meta.MetaUtil;
import jdk.vm.ci.meta.ResolvedJavaField;
import jdk.vm.ci.meta.ResolvedJavaMethod;
Expand Down Expand Up @@ -240,6 +240,11 @@ public ResolvedJavaType getArrayClass() {
return arrayOfType;
}

@Override
public List<JavaType> getPermittedSubclasses() {
throw new UnsupportedOperationException();
}

@Override
public JavaKind getJavaKind() {
return JavaKind.Object;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
import jdk.vm.ci.meta.Assumptions;
import jdk.vm.ci.meta.JavaConstant;
import jdk.vm.ci.meta.JavaKind;
import jdk.vm.ci.meta.JavaType;
import jdk.vm.ci.meta.ResolvedJavaField;
import jdk.vm.ci.meta.ResolvedJavaMethod;
import jdk.vm.ci.meta.ResolvedJavaType;
Expand Down Expand Up @@ -84,6 +85,15 @@ public final HotSpotResolvedObjectType getArrayClass() {
return (HotSpotResolvedObjectType) handle(getArrayClassMethod, getArrayClassInvokable);
}

private static final SymbolicMethod getPermittedSubclassesMethod = method("getPermittedSubclasses");
private static final InvokableMethod getPermittedSubclassesInvokable = (receiver, args) -> ((HotSpotResolvedJavaType) receiver).getPermittedSubclasses();

@Override
@SuppressWarnings("unchecked")
public List<JavaType> getPermittedSubclasses() {
return (List<JavaType>) handle(getPermittedSubclassesMethod, getPermittedSubclassesInvokable);
}

@Override
protected final boolean isBeingInitialized() {
throw new UnsupportedOperationException("isBeingInitialized");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import jdk.vm.ci.common.JVMCIError;
import jdk.vm.ci.meta.Assumptions;
import jdk.vm.ci.meta.JavaKind;
import jdk.vm.ci.meta.JavaType;
import jdk.vm.ci.meta.ResolvedJavaField;
import jdk.vm.ci.meta.ResolvedJavaMethod;
import jdk.vm.ci.meta.ResolvedJavaType;
Expand Down Expand Up @@ -216,6 +217,11 @@ public EspressoResolvedArrayType getArrayClass() {
return arrayType;
}

@Override
public List<JavaType> getPermittedSubclasses() {
return null;
}

@Override
public EspressoResolvedJavaType resolve(ResolvedJavaType accessingClass) {
EspressoResolvedJavaType resolvedElementalType = getElementalType().resolve(accessingClass);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import java.lang.annotation.Annotation;
import java.lang.reflect.Modifier;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

Expand Down Expand Up @@ -270,6 +271,22 @@ public ResolvedJavaType getComponentType() {
return null;
}

@Override
public List<JavaType> getPermittedSubclasses() {
Class<?>[] permittedSubclass = getPermittedSubclasses0(getMirror());
if (permittedSubclass == null) {
return null;
}
ResolvedJavaType[] permittedSubtypes = new ResolvedJavaType[permittedSubclass.length];
MetaAccessProvider metaAccess = runtime().getHostJVMCIBackend().getMetaAccess();
for (int i = 0; i != permittedSubtypes.length; i++) {
permittedSubtypes[i] = metaAccess.lookupJavaType(permittedSubclass[i]);
}
return Collections.unmodifiableList(Arrays.asList(permittedSubtypes));
}

private static native Class<?>[] getPermittedSubclasses0(Class<?> mirror);

@Override
public boolean isDefinitelyResolvedWithRespectTo(ResolvedJavaType accessingClass) {
assert accessingClass != null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import jdk.vm.ci.meta.Assumptions;
import jdk.vm.ci.meta.JavaConstant;
import jdk.vm.ci.meta.JavaKind;
import jdk.vm.ci.meta.JavaType;
import jdk.vm.ci.meta.ResolvedJavaField;
import jdk.vm.ci.meta.ResolvedJavaMethod;
import jdk.vm.ci.meta.ResolvedJavaType;
Expand Down Expand Up @@ -183,6 +184,11 @@ public ResolvedJavaType getComponentType() {
return null;
}

@Override
public List<JavaType> getPermittedSubclasses() {
return null;
}

@Override
public JavaKind getJavaKind() {
return kind;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,11 @@ static StaticObject doDefault(StaticObject self,
}
}

@Substitution
public static @JavaType(Class[].class) StaticObject getPermittedSubclasses0(@JavaType(Class.class) StaticObject self, @Inject EspressoContext context) {
return context.getVM().JVM_GetPermittedSubclasses(self);
}

private static StaticObject toJVMCIFields(Field[] fields, StaticObject holder, DirectCallNode fieldConstructor, EspressoContext context, Meta meta) {
int count = 0;
for (Field f : fields) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;

import org.graalvm.nativeimage.hosted.Feature.DuringAnalysisAccess;
import org.graalvm.word.WordBase;
Expand Down Expand Up @@ -67,6 +68,7 @@
import jdk.vm.ci.meta.Assumptions.AssumptionResult;
import jdk.vm.ci.meta.JavaConstant;
import jdk.vm.ci.meta.JavaKind;
import jdk.vm.ci.meta.JavaType;
import jdk.vm.ci.meta.PrimitiveConstant;
import jdk.vm.ci.meta.ResolvedJavaField;
import jdk.vm.ci.meta.ResolvedJavaMethod;
Expand Down Expand Up @@ -219,6 +221,11 @@ public abstract class AnalysisType extends AnalysisElement implements WrappedJav
*/
@SuppressWarnings("unused") private volatile Object overrideableMethods;

private volatile AnalysisType arrayClass = null;

private static final List<JavaType> PERMITTED_SUBCLASSES_INIT = new ArrayList<>();
private volatile List<JavaType> permittedSubclasses = PERMITTED_SUBCLASSES_INIT;

@SuppressWarnings("this-escape")
public AnalysisType(AnalysisUniverse universe, ResolvedJavaType javaType, JavaKind storageKind, AnalysisType objectType, AnalysisType cloneableType) {
super(universe.hostVM.enableTrackAcrossLayers());
Expand Down Expand Up @@ -949,8 +956,6 @@ public void initialize() {
}
}

private volatile AnalysisType arrayClass = null;

@Override
public final AnalysisType getArrayClass() {
if (arrayClass == null) {
Expand All @@ -959,6 +964,15 @@ public final AnalysisType getArrayClass() {
return arrayClass;
}

@Override
public List<JavaType> getPermittedSubclasses() {
if (permittedSubclasses == PERMITTED_SUBCLASSES_INIT) {
List<JavaType> wrappedPermittedSubclasses = wrapped.getPermittedSubclasses();
permittedSubclasses = wrappedPermittedSubclasses == null ? null : wrappedPermittedSubclasses.stream().map(universe::lookup).collect(Collectors.toUnmodifiableList());
}
return permittedSubclasses;
}

@Override
public boolean isInterface() {
return wrapped.isInterface();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import jdk.vm.ci.meta.Assumptions;
import jdk.vm.ci.meta.JavaConstant;
import jdk.vm.ci.meta.JavaKind;
import jdk.vm.ci.meta.JavaType;
import jdk.vm.ci.meta.ResolvedJavaField;
import jdk.vm.ci.meta.ResolvedJavaMethod;
import jdk.vm.ci.meta.ResolvedJavaType;
Expand Down Expand Up @@ -221,6 +222,11 @@ public ResolvedJavaType getArrayClass() {
throw AnalysisError.shouldNotReachHere("This type is incomplete and should not be used.");
}

@Override
public List<JavaType> getPermittedSubclasses() {
throw AnalysisError.shouldNotReachHere("This type is incomplete and should not be used.");
}

@Override
public JavaKind getJavaKind() {
/* All the primitive types can be looked up by name */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1693,7 +1693,7 @@ static RuntimeException recordsNotAvailable(DynamicHub declaringClass) {
}

@KeepOriginal
private native Class<?>[] getPermittedSubclasses();
public native Class<?>[] getPermittedSubclasses();

@Substitute
private static ReflectionFactory getReflectionFactory() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@

import java.lang.annotation.Annotation;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import org.graalvm.nativeimage.Platform;
import org.graalvm.nativeimage.Platforms;
Expand All @@ -43,6 +45,7 @@
import jdk.vm.ci.meta.Assumptions.AssumptionResult;
import jdk.vm.ci.meta.JavaConstant;
import jdk.vm.ci.meta.JavaKind;
import jdk.vm.ci.meta.JavaType;
import jdk.vm.ci.meta.MetaUtil;
import jdk.vm.ci.meta.ResolvedJavaField;
import jdk.vm.ci.meta.ResolvedJavaMethod;
Expand All @@ -64,6 +67,9 @@ public class SubstrateType implements SharedType {
@UnknownObjectField(availability = AfterAnalysis.class, canBeNull = true)//
protected DynamicHub uniqueConcreteImplementation;

@UnknownObjectField(availability = AfterAnalysis.class, canBeNull = true)//
protected SubstrateType[] permittedSubclasses;

public SubstrateType(JavaKind kind, DynamicHub hub) {
this.kind = kind;
this.hub = hub;
Expand Down Expand Up @@ -301,6 +307,21 @@ public ResolvedJavaType getArrayClass() {
return SubstrateMetaAccess.singleton().lookupJavaTypeFromHub(hub.getArrayHub());
}

@Override
public List<JavaType> getPermittedSubclasses() {
Class<?>[] hubPermittedSubclasses = hub.getPermittedSubclasses();
if (hubPermittedSubclasses == null) {
return null;
}
if (permittedSubclasses == null) {
permittedSubclasses = new SubstrateType[hubPermittedSubclasses.length];
for (int i = 0; i < hubPermittedSubclasses.length; i++) {
permittedSubclasses[i] = SubstrateMetaAccess.singleton().lookupJavaType(hubPermittedSubclasses[i]);
}
}
return Collections.unmodifiableList(Arrays.asList(permittedSubclasses));
}

@Override
public SubstrateField[] getInstanceFields(boolean includeSuperclasses) {
if (rawAllInstanceFields == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import jdk.vm.ci.meta.Assumptions.AssumptionResult;
import jdk.vm.ci.meta.JavaConstant;
import jdk.vm.ci.meta.JavaKind;
import jdk.vm.ci.meta.JavaType;
import jdk.vm.ci.meta.ResolvedJavaField;
import jdk.vm.ci.meta.ResolvedJavaMethod;
import jdk.vm.ci.meta.ResolvedJavaType;
Expand Down Expand Up @@ -194,6 +195,11 @@ public ResolvedJavaType getArrayClass() {
return original.getArrayClass();
}

@Override
public List<JavaType> getPermittedSubclasses() {
return original.getPermittedSubclasses();
}

@Override
public ResolvedJavaMethod resolveMethod(ResolvedJavaMethod method, ResolvedJavaType callerType) {
return original.resolveMethod(method, callerType);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,12 @@
*/
package com.oracle.svm.hosted.meta;

import java.util.List;

import com.oracle.graal.pointsto.meta.AnalysisType;

import jdk.vm.ci.meta.JavaKind;
import jdk.vm.ci.meta.JavaType;

public class HostedArrayClass extends HostedClass {

Expand Down Expand Up @@ -69,6 +72,11 @@ public final HostedType getComponentType() {
return componentType;
}

@Override
public List<JavaType> getPermittedSubclasses() {
return null;
}

@Override
public HostedType getBaseType() {
return baseType;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,12 @@
*/
package com.oracle.svm.hosted.meta;

import java.util.List;

import com.oracle.graal.pointsto.meta.AnalysisType;

import jdk.vm.ci.meta.JavaKind;
import jdk.vm.ci.meta.JavaType;

public class HostedPrimitiveType extends HostedType {

Expand Down Expand Up @@ -69,6 +72,11 @@ public final HostedType getComponentType() {
return null;
}

@Override
public List<JavaType> getPermittedSubclasses() {
return null;
}

@Override
public HostedType getBaseType() {
return this;
Expand Down
Loading