Skip to content

Commit f1d2b26

Browse files
committed
Generate BoundMethodHandle species unconditionally
1 parent 9983362 commit f1d2b26

File tree

2 files changed

+7
-11
lines changed

2 files changed

+7
-11
lines changed

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/PreserveOptionsSupport.java

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,7 @@
3232
import java.lang.reflect.Method;
3333
import java.lang.reflect.Modifier;
3434
import java.util.Arrays;
35-
import java.util.Collections;
3635
import java.util.Comparator;
37-
import java.util.HashSet;
3836
import java.util.Set;
3937
import java.util.stream.Stream;
4038

@@ -143,7 +141,7 @@ public static void parsePreserveOption(EconomicMap<OptionKey<?>, Object> hostedV
143141
}
144142

145143
public static void registerPreservedClasses(NativeImageClassLoaderSupport classLoaderSupport) {
146-
var classesOrPackagesToIgnore = ignoredClassesOrPackagesForPreserve();
144+
var classesOrPackagesToIgnore = SubstrateOptions.IgnorePreserveForClasses.getValue().valuesAsSet();
147145
var classesToPreserve = classLoaderSupport.getClassesToPreserve()
148146
.filter(ClassInclusionPolicy::isClassIncludedBase)
149147
.filter(c -> !(classesOrPackagesToIgnore.contains(c.getPackageName()) || classesOrPackagesToIgnore.contains(c.getName())))
@@ -224,11 +222,4 @@ public static void registerPreservedClasses(NativeImageClassLoaderSupport classL
224222
reflection.registerClassLookup(always, className);
225223
}
226224
}
227-
228-
private static Set<String> ignoredClassesOrPackagesForPreserve() {
229-
Set<String> ignoredClassesOrPackages = new HashSet<>(SubstrateOptions.IgnorePreserveForClasses.getValue().valuesAsSet());
230-
// GR-63360: Parsing of constant_ lambda forms fails
231-
ignoredClassesOrPackages.add("java.lang.invoke.LambdaForm$Holder");
232-
return Collections.unmodifiableSet(ignoredClassesOrPackages);
233-
}
234225
}

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/methodhandles/MethodHandleFeature.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2020, 2025, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -26,6 +26,7 @@
2626

2727
import java.lang.invoke.CallSite;
2828
import java.lang.invoke.MethodHandle;
29+
import java.lang.invoke.MethodHandles;
2930
import java.lang.invoke.MethodType;
3031
import java.lang.invoke.VarHandle;
3132
import java.lang.ref.SoftReference;
@@ -288,6 +289,10 @@ public Object transform(Object receiver, Object originalValue) {
288289
} catch (ReflectiveOperationException e) {
289290
VMError.shouldNotReachHere("Can not invoke createFormsForm method to register base types from the java.lang.invoke.LambdaForm$BasicType class.");
290291
}
292+
// The following call sites produce side effects by generating BoundMethodHandle
293+
// species, which are subsequently referenced by java.lang.invoke.LambdaForm$Holder.
294+
MethodHandles.constant(long.class, 0L);
295+
MethodHandles.constant(float.class, 0.0f);
291296
}
292297

293298
private static void eagerlyInitializeMHImplFunctions() {

0 commit comments

Comments
 (0)