# HG changeset patch # User hseigel # Date 1506430684 14400 # Node ID a9b5df78f0f22e6085cf5e48d16ff2541de63073 # Parent 468f0664cb39863e7193d7ed10956403a71e0f47 8187436: -Xbootclasspath/a causes sanity check assertion with exploded build Summary: Fixed asserts to work properly with exploded build Reviewed-by: alanb, jiangli, gtriantafill diff -r 468f0664cb39 -r a9b5df78f0f2 src/hotspot/share/classfile/classLoader.hpp --- a/src/hotspot/share/classfile/classLoader.hpp Tue Sep 26 06:53:35 2017 -0400 +++ b/src/hotspot/share/classfile/classLoader.hpp Tue Sep 26 08:58:04 2017 -0400 @@ -403,7 +403,8 @@ static int compute_Object_vtable(); static ClassPathEntry* classpath_entry(int n) { - assert(n >= 0 && n < _num_entries, "sanity"); + assert(n >= 0, "sanity"); + assert(!has_jrt_entry() || n < _num_entries, "sanity"); if (n == 0) { assert(has_jrt_entry(), "No class path entry at 0 for exploded module builds"); return ClassLoader::_jrt_entry; diff -r 468f0664cb39 -r a9b5df78f0f2 test/hotspot/jtreg/runtime/getSysPackage/GetPackageXbootclasspath.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/getSysPackage/GetPackageXbootclasspath.java Tue Sep 26 08:58:04 2017 -0400 @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2017, 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. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8187436 + * @summary Test that getPackage() works with a class loaded via -Xbootclasspath/a. + * @library /test/lib + * @run main/othervm GetPackageXbootclasspath + */ + +// This is a regression test for a bug with the exploded build but should pass +// when run with either the normal or exploded build. +import jdk.test.lib.compiler.InMemoryJavaCompiler; +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.process.OutputAnalyzer; + +public class GetPackageXbootclasspath { + + public static void main(String args[]) throws Exception { + + String Test_src = + "package P; " + + "public class Test { " + + "public static void main(String[] args) throws Exception { " + + "Package p = Test.class.getPackage(); " + + "System.out.println(\"Test Passed\"); " + + "} " + + "}"; + + String test_classes = System.getProperty("test.classes"); + ClassFileInstaller.writeClassToDisk("P/Test", + InMemoryJavaCompiler.compile("P.Test", Test_src), test_classes); + + new OutputAnalyzer(ProcessTools.createJavaProcessBuilder( + "-Xbootclasspath/a:" + test_classes, "P.Test") + .start()).shouldContain("Test Passed"); + } +}