8202698: Update Graal for JEP 181 - Nest-based access control
Reviewed-by: kvn
This commit is contained in:
parent
8e9f9e5583
commit
700a0427a1
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java
test/jdk
@ -1661,6 +1661,8 @@ public class BytecodeParser implements GraphBuilderContext {
|
|||||||
|
|
||||||
if (initialInvokeKind == InvokeKind.Special && !targetMethod.isConstructor()) {
|
if (initialInvokeKind == InvokeKind.Special && !targetMethod.isConstructor()) {
|
||||||
emitCheckForInvokeSuperSpecial(args);
|
emitCheckForInvokeSuperSpecial(args);
|
||||||
|
} else if (initialInvokeKind == InvokeKind.Interface && targetMethod.isPrivate()) {
|
||||||
|
emitCheckForDeclaringClassChange(targetMethod.getDeclaringClass(), args);
|
||||||
}
|
}
|
||||||
|
|
||||||
InlineInfo inlineInfo = null;
|
InlineInfo inlineInfo = null;
|
||||||
@ -1747,6 +1749,25 @@ public class BytecodeParser implements GraphBuilderContext {
|
|||||||
return invoke;
|
return invoke;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks that the class of the receiver of an {@link Bytecodes#INVOKEINTERFACE} invocation of a
|
||||||
|
* private method is assignable to the interface that declared the method. If not, then
|
||||||
|
* deoptimize so that the interpreter can throw an {@link IllegalAccessError}.
|
||||||
|
*
|
||||||
|
* This is a check not performed by the verifier and so must be performed at runtime.
|
||||||
|
*
|
||||||
|
* @param declaringClass interface declaring the callee
|
||||||
|
* @param args arguments to an {@link Bytecodes#INVOKEINTERFACE} call to a private method
|
||||||
|
* declared in a interface
|
||||||
|
*/
|
||||||
|
private void emitCheckForDeclaringClassChange(ResolvedJavaType declaringClass, ValueNode[] args) {
|
||||||
|
ValueNode receiver = args[0];
|
||||||
|
TypeReference checkedType = TypeReference.createTrusted(graph.getAssumptions(), declaringClass);
|
||||||
|
LogicNode condition = genUnique(createInstanceOf(checkedType, receiver, null));
|
||||||
|
FixedGuardNode fixedGuard = append(new FixedGuardNode(condition, ClassCastException, None, false));
|
||||||
|
args[0] = append(PiNode.create(receiver, StampFactory.object(checkedType, true), fixedGuard));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks that the class of the receiver of an {@link Bytecodes#INVOKESPECIAL} in a method
|
* Checks that the class of the receiver of an {@link Bytecodes#INVOKESPECIAL} in a method
|
||||||
* declared in an interface (i.e., a default method) is assignable to the interface. If not,
|
* declared in an interface (i.e., a default method) is assignable to the interface. If not,
|
||||||
|
@ -69,8 +69,6 @@ java/lang/ref/OOMEInReferenceHandler.java 8196611
|
|||||||
java/lang/Runtime/exec/LotsOfOutput.java 8196611 generic-all
|
java/lang/Runtime/exec/LotsOfOutput.java 8196611 generic-all
|
||||||
java/util/concurrent/ScheduledThreadPoolExecutor/BasicCancelTest.java 8196611 generic-all
|
java/util/concurrent/ScheduledThreadPoolExecutor/BasicCancelTest.java 8196611 generic-all
|
||||||
|
|
||||||
java/lang/invoke/PrivateInterfaceCall.java 8202698 generic-all
|
|
||||||
|
|
||||||
# Next JFR tests fail with Graal. Assuming 8193210.
|
# Next JFR tests fail with Graal. Assuming 8193210.
|
||||||
jdk/jfr/event/compiler/TestCodeSweeper.java 8193210 generic-all
|
jdk/jfr/event/compiler/TestCodeSweeper.java 8193210 generic-all
|
||||||
jdk/jfr/event/compiler/TestCompilerInlining.java 8193210 generic-all
|
jdk/jfr/event/compiler/TestCompilerInlining.java 8193210 generic-all
|
||||||
|
Loading…
x
Reference in New Issue
Block a user