< prev index next >

test/compiler/jvmci/compilerToVM/ResolveTypeInPoolTest.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 27,80 **** * @bug 8136421 * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") * @summary Testing compiler.jvmci.CompilerToVM.resolveTypeInPool method * @library /testlibrary /test/lib / * @compile ../common/CompilerToVMHelper.java ! * @build compiler.jvmci.common.testcases.MultipleImplementersInterface ! * compiler.jvmci.common.testcases.MultipleImplementer2 ! * compiler.jvmci.compilerToVM.ConstantPoolTestsHelper ! * compiler.jvmci.compilerToVM.ConstantPoolTestCase * compiler.jvmci.compilerToVM.ResolveTypeInPoolTest ! * @run main ClassFileInstaller jdk.vm.ci.hotspot.CompilerToVMHelper ! * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockExperimentalVMOptions * -XX:+EnableJVMCI compiler.jvmci.compilerToVM.ResolveTypeInPoolTest */ package compiler.jvmci.compilerToVM; import java.util.HashMap; import java.util.Map; import jdk.vm.ci.hotspot.CompilerToVMHelper; import jdk.vm.ci.hotspot.HotSpotResolvedObjectType; ! import sun.reflect.ConstantPool; /** ! * Test for {@code compiler.jvmci.CompilerToVM.resolveTypeInPool} method */ public class ResolveTypeInPoolTest { public static void main(String[] args) throws Exception { ! Map<ConstantPoolTestsHelper.ConstantTypes, ! ConstantPoolTestCase.Validator> typeTests = new HashMap<>(1); ! typeTests.put(ConstantPoolTestsHelper.ConstantTypes.CONSTANT_CLASS, ResolveTypeInPoolTest::validate); ConstantPoolTestCase testCase = new ConstantPoolTestCase(typeTests); testCase.test(); } ! public static void validate( ! jdk.vm.ci.meta.ConstantPool constantPoolCTVM, ! ConstantPool constantPoolSS, ! ConstantPoolTestsHelper.DummyClasses dummyClass, int i) { ! HotSpotResolvedObjectType typeToVerify = CompilerToVMHelper ! .resolveTypeInPool(constantPoolCTVM, i); ! int classNameIndex = (int) dummyClass.cp.get(i).value; ! String classNameToRefer = constantPoolSS.getUTF8At(classNameIndex); String outputToVerify = typeToVerify.toString(); if (!outputToVerify.contains(classNameToRefer)) { String msg = String.format("Wrong class accessed by constant" + " pool index %d: %s, but should be %s", ! i, outputToVerify, classNameToRefer); throw new AssertionError(msg); } } } --- 27,95 ---- * @bug 8136421 * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") * @summary Testing compiler.jvmci.CompilerToVM.resolveTypeInPool method * @library /testlibrary /test/lib / * @compile ../common/CompilerToVMHelper.java ! * @build sun.hotspot.WhiteBox * compiler.jvmci.compilerToVM.ResolveTypeInPoolTest ! * @run main ClassFileInstaller sun.hotspot.WhiteBox ! * sun.hotspot.WhiteBox$WhiteBoxPermission ! * jdk.vm.ci.hotspot.CompilerToVMHelper ! * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions ! * -XX:+WhiteBoxAPI -XX:+UnlockExperimentalVMOptions * -XX:+EnableJVMCI compiler.jvmci.compilerToVM.ResolveTypeInPoolTest */ package compiler.jvmci.compilerToVM; + import compiler.jvmci.compilerToVM.ConstantPoolTestsHelper.DummyClasses; import java.util.HashMap; import java.util.Map; import jdk.vm.ci.hotspot.CompilerToVMHelper; import jdk.vm.ci.hotspot.HotSpotResolvedObjectType; ! import jdk.vm.ci.meta.ConstantPool; /** ! * Test for {@code jdk.vm.ci.hotspot.CompilerToVM.resolveTypeInPool} method */ public class ResolveTypeInPoolTest { public static void main(String[] args) throws Exception { ! Map<ConstantPoolTestCase.ConstantTypes, ConstantPoolTestCase.Validator> typeTests = new HashMap<>(); ! typeTests.put(ConstantPoolTestCase.ConstantTypes.CONSTANT_CLASS, ResolveTypeInPoolTest::validate); ConstantPoolTestCase testCase = new ConstantPoolTestCase(typeTests); testCase.test(); + // The next "Class.forName" and repeating "testCase.test()" + // are here for the following reason. + // The first test run is without dummy class initialization, + // which means no constant pool cache exists. + // The second run is with initialized class (with constant pool cache available). + // Some CompilerToVM methods require different input + // depending on whether CP cache exists or not. + for (DummyClasses dummy : DummyClasses.values()) { + Class.forName(dummy.klass.getName()); + } + testCase.test(); } ! public static void validate(ConstantPool constantPoolCTVM, ! ConstantPoolTestCase.ConstantTypes cpType, ! ConstantPoolTestsHelper.DummyClasses dummyClass, ! int i) { ! ConstantPoolTestCase.TestedCPEntry entry = cpType.getTestedCPEntry(dummyClass, i); ! if (entry == null) { ! return; ! } ! HotSpotResolvedObjectType typeToVerify = CompilerToVMHelper.resolveTypeInPool(constantPoolCTVM, i); ! String classNameToRefer = entry.klass; String outputToVerify = typeToVerify.toString(); if (!outputToVerify.contains(classNameToRefer)) { String msg = String.format("Wrong class accessed by constant" + " pool index %d: %s, but should be %s", ! i, ! outputToVerify, ! classNameToRefer); throw new AssertionError(msg); } } }
< prev index next >