Skip to content

Commit 9b23668

Browse files
committed
[GR-31478] Force linking of types resolved by GraalTruffleRuntime.
PullRequest: graal/8977
2 parents b0bce9e + 976c6b8 commit 9b23668

File tree

4 files changed

+13
-7
lines changed

4 files changed

+13
-7
lines changed

common.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
"oraclejdk8": {"name": "oraclejdk", "version": "8u301+03-jvmci-21.2-b01", "platformspecific": true },
77
"oraclejdk8Debug": {"name": "oraclejdk", "version": "8u301+03-jvmci-21.2-b01-fastdebug", "platformspecific": true },
88

9-
"openjdk11": {"name": "openjdk", "version": "11.0.3+7", "platformspecific": true },
10-
"oraclejdk11": {"name": "oraclejdk", "version": "11.0.6+8", "platformspecific": true },
9+
"openjdk11": {"name": "openjdk", "version": "11.0.11+9", "platformspecific": true },
10+
"oraclejdk11": {"name": "oraclejdk", "version": "11.0.11+9", "platformspecific": true },
1111
"labsjdk-ce-11": {"name": "labsjdk", "version": "ce-11.0.11+8-jvmci-21.2-b01", "platformspecific": true },
1212
"labsjdk-ee-11": {"name": "labsjdk", "version": "ee-11.0.11+9-jvmci-21.2-b01", "platformspecific": true },
1313

compiler/src/org.graalvm.compiler.truffle.runtime/src/org/graalvm/compiler/truffle/runtime/GraalTruffleRuntime.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,11 @@ public ResolvedJavaType resolveType(MetaAccessProvider metaAccess, String classN
431431
}
432432
throw new NoClassDefFoundError(className);
433433
}
434-
return metaAccess.lookupJavaType(c);
434+
ResolvedJavaType type = metaAccess.lookupJavaType(c);
435+
// In some situations, we may need the class to be linked now, especially if we are
436+
// compiling immediately (e.g., to successfully devirtualize FrameWithoutBoxing methods).
437+
type.link();
438+
return type;
435439
}
436440

437441
protected void installDefaultListeners() {

substratevm/src/com.oracle.svm.graal/src/com/oracle/svm/graal/hosted/GraalObjectReplacer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import java.util.Map;
3232
import java.util.function.Function;
3333

34+
import com.oracle.svm.core.util.VMError;
3435
import org.graalvm.compiler.api.replacements.SnippetReflectionProvider;
3536
import org.graalvm.compiler.api.runtime.GraalRuntime;
3637
import org.graalvm.compiler.core.common.spi.ConstantFieldProvider;
@@ -284,6 +285,7 @@ public synchronized SubstrateType createType(JavaType original) {
284285
}
285286

286287
AnalysisType aType = toAnalysisType(original);
288+
VMError.guarantee(aType.isLinked(), "types reachable for JIT compilation must not have linkage errors");
287289
SubstrateType sType = types.get(aType);
288290

289291
if (sType == null) {

substratevm/src/com.oracle.svm.graal/src/com/oracle/svm/graal/meta/SubstrateType.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -428,12 +428,12 @@ public ResolvedJavaMethod getClassInitializer() {
428428

429429
@Override
430430
public boolean isLinked() {
431-
throw VMError.unimplemented();
431+
return true; // types are always linked
432432
}
433433

434434
@Override
435435
public void link() {
436-
throw VMError.unimplemented();
436+
// do nothing
437437
}
438438

439439
@Override
@@ -498,8 +498,8 @@ public com.oracle.truffle.api.nodes.NodeFieldAccessor[] getFields() {
498498
@SuppressWarnings("deprecation")
499499
@Override
500500
public com.oracle.truffle.api.nodes.NodeFieldAccessor getParentField() {
501-
return SubstrateNodeFieldAccessor
502-
.fromSubstrateField(getNodeFields(field -> DynamicHub.toClass(field.getDeclaringClass().getHub()) == Node.class && field.getName().equals("parent")).iterator().next());
501+
return SubstrateNodeFieldAccessor.fromSubstrateField(
502+
getNodeFields(field -> DynamicHub.toClass(field.getDeclaringClass().getHub()) == Node.class && field.getName().equals("parent")).iterator().next());
503503
}
504504

505505
@SuppressWarnings("deprecation")

0 commit comments

Comments
 (0)