diff -r 3c12af929e7d -r 7d4e637d3f21 hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements.test/src/org/graalvm/compiler/replacements/test/classfile/RedefineIntrinsicTest.java --- a/hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements.test/src/org/graalvm/compiler/replacements/test/classfile/RedefineIntrinsicTest.java Fri May 12 13:14:25 2017 -0700 +++ b/hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements.test/src/org/graalvm/compiler/replacements/test/classfile/RedefineIntrinsicTest.java Fri May 12 13:56:13 2017 -0700 @@ -22,6 +22,9 @@ */ package org.graalvm.compiler.replacements.test.classfile; +import static org.graalvm.compiler.test.SubprocessUtil.getVMCommandLine; +import static org.graalvm.compiler.test.SubprocessUtil.java; +import static org.graalvm.compiler.test.SubprocessUtil.withoutDebuggerArguments; import static org.junit.Assume.assumeTrue; import java.io.FileOutputStream; @@ -35,6 +38,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.security.ProtectionDomain; +import java.util.List; import java.util.jar.Attributes; import java.util.jar.JarEntry; import java.util.jar.JarOutputStream; @@ -42,16 +46,15 @@ import javax.tools.ToolProvider; -import org.junit.Assert; -import org.junit.Test; - import org.graalvm.compiler.api.replacements.ClassSubstitution; import org.graalvm.compiler.api.replacements.MethodSubstitution; import org.graalvm.compiler.bytecode.BytecodeProvider; -import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration; import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins; import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins.Registration; import org.graalvm.compiler.replacements.test.ReplacementsTest; +import org.graalvm.compiler.test.SubprocessUtil.Subprocess; +import org.junit.Assert; +import org.junit.Test; import jdk.vm.ci.meta.ResolvedJavaMethod; @@ -78,12 +81,11 @@ } @Override - protected GraphBuilderConfiguration editGraphBuilderConfiguration(GraphBuilderConfiguration conf) { - InvocationPlugins invocationPlugins = conf.getPlugins().getInvocationPlugins(); + protected void registerInvocationPlugins(InvocationPlugins invocationPlugins) { BytecodeProvider replacementBytecodeProvider = getSystemClassLoaderBytecodeProvider(); Registration r = new Registration(invocationPlugins, Original.class, replacementBytecodeProvider); r.registerMethodSubstitution(Intrinsic.class, "getValue"); - return super.editGraphBuilderConfiguration(conf); + super.registerInvocationPlugins(invocationPlugins); } public static String callOriginalGetValue() { @@ -98,6 +100,22 @@ @Test public void test() throws Throwable { + String recursionPropName = getClass().getName() + ".recursion"; + if (Java8OrEarlier || Boolean.getBoolean(recursionPropName)) { + testHelper(); + } else { + List vmArgs = withoutDebuggerArguments(getVMCommandLine()); + vmArgs.add("-D" + recursionPropName + "=true"); + vmArgs.add("-Djdk.attach.allowAttachSelf=true"); + Subprocess proc = java(vmArgs, "com.oracle.mxtool.junit.MxJUnitWrapper", getClass().getName()); + if (proc.exitCode != 0) { + Assert.fail(String.format("non-zero exit code %d for command:%n%s", proc.exitCode, proc)); + } + } + } + + public void testHelper() throws Throwable { + Object receiver = null; Object[] args = {};