diff --git a/test/hotspot/jtreg/ProblemList-Virtual.txt b/test/hotspot/jtreg/ProblemList-Virtual.txt index 73b90128e20..8f276391601 100644 --- a/test/hotspot/jtreg/ProblemList-Virtual.txt +++ b/test/hotspot/jtreg/ProblemList-Virtual.txt @@ -99,7 +99,6 @@ gc/arguments/TestNewSizeThreadIncrease.java 0000000 generic-all gc/g1/TestSkipRebuildRemsetPhase.java 0000000 generic-all runtime/classFileParserBug/TestEmptyBootstrapMethodsAttr.java JDK-8346442 generic-all runtime/ErrorHandling/MachCodeFramesInErrorFile.java 0000000 generic-all -runtime/logging/LoaderConstraintsTest.java JDK-8346442 generic-all runtime/Thread/AsyncExceptionOnMonitorEnter.java 0000000 generic-all runtime/Thread/StopAtExit.java 0000000 generic-all runtime/handshake/HandshakeWalkStackTest.java 0000000 generic-all diff --git a/test/hotspot/jtreg/runtime/logging/LoaderConstraintsTest.java b/test/hotspot/jtreg/runtime/logging/LoaderConstraintsTest.java index 39ad3b872a2..f1c493e5e93 100644 --- a/test/hotspot/jtreg/runtime/logging/LoaderConstraintsTest.java +++ b/test/hotspot/jtreg/runtime/logging/LoaderConstraintsTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2025, 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 @@ -38,6 +38,7 @@ import jdk.test.lib.process.OutputAnalyzer; import java.lang.ref.WeakReference; import java.lang.reflect.Method; +import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -49,22 +50,25 @@ public class LoaderConstraintsTest { private static ProcessBuilder pb; private static class ClassUnloadTestMain { public static void main(String... args) throws Exception { - String className = "test.Empty"; ClassLoader cl = ClassUnloadCommon.newClassLoader(); - Class c = cl.loadClass(className); - cl = null; c = null; - ClassUnloadCommon.triggerUnloading(); + Class c = cl.loadClass("test.Empty"); + // Causes class test.Empty to be linked, which triggers the + // constraint on class String due to override of toString(). + Constructor constructor = c.getDeclaredConstructor(); } } // Use the same command-line heap size setting as ../ClassUnload/UnloadTest.java static ProcessBuilder exec(String... args) throws Exception { + String classPath = System.getProperty("test.class.path", "."); + List argsList = new ArrayList<>(); Collections.addAll(argsList, args); Collections.addAll(argsList, "-Xmn8m"); Collections.addAll(argsList, "-Xbootclasspath/a:."); Collections.addAll(argsList, "-XX:+UnlockDiagnosticVMOptions"); Collections.addAll(argsList, "-XX:+WhiteBoxAPI"); + Collections.addAll(argsList, "-Dtest.class.path=" + classPath); Collections.addAll(argsList, ClassUnloadTestMain.class.getName()); return ProcessTools.createLimitedTestJavaProcessBuilder(argsList); } @@ -75,13 +79,12 @@ public static void main(String... args) throws Exception { pb = exec("-Xlog:class+loader+constraints=info"); out = new OutputAnalyzer(pb.start()); out.shouldHaveExitValue(0); - out.shouldContain("[class,loader,constraints] adding new constraint for name: java/lang/Class, loader[0]: 'app', loader[1]: 'bootstrap'"); + out.stdoutShouldMatch("\\[class,loader,constraints\\] adding new constraint for name: java/lang/String, loader\\[0\\]: 'ClassUnloadCommonClassLoader' @[\\da-f]+, loader\\[1\\]: 'bootstrap'"); // -Xlog:class+loader+constraints=off pb = exec("-Xlog:class+loader+constraints=off"); out = new OutputAnalyzer(pb.start()); out.shouldHaveExitValue(0); out.shouldNotContain("[class,loader,constraints]"); - } }