-
Notifications
You must be signed in to change notification settings - Fork 216
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
8290417: CDS cannot archive lamda proxy with useImplMethodHandle
Backport-of: 4dc421caa02caedd7061ede6a5ec44dbb6ec738e
- Loading branch information
1 parent
2e12c18
commit 27ffd83
Showing
7 changed files
with
435 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
71 changes: 71 additions & 0 deletions
71
test/hotspot/jtreg/runtime/cds/appcds/LambdaWithUseImplMethodHandle.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
/* | ||
* Copyright (c) 2022, 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 8290417 | ||
* @summary CDS cannot archive lambda proxy with useImplMethodHandle | ||
* @requires vm.cds | ||
* @library /test/lib /test/hotspot/jtreg/runtime/cds/appcds /test/hotspot/jtreg/runtime/cds/appcds/test-classes | ||
* @build pkg1.BaseWithProtectedMethod | ||
* @build pkg2.Child | ||
* @build LambdaWithUseImplMethodHandleApp | ||
* @run driver jdk.test.lib.helpers.ClassFileInstaller -jar test.jar pkg1.BaseWithProtectedMethod pkg2.Child LambdaWithUseImplMethodHandleApp | ||
* @run driver LambdaWithUseImplMethodHandle | ||
*/ | ||
|
||
import jdk.test.lib.cds.CDSOptions; | ||
import jdk.test.lib.cds.CDSTestUtils; | ||
import jdk.test.lib.helpers.ClassFileInstaller; | ||
|
||
public class LambdaWithUseImplMethodHandle { | ||
|
||
// See pkg2/Child.jcod for details about the condition that triggers JDK-8290417 | ||
public static void main(String[] args) throws Exception { | ||
String appJar = ClassFileInstaller.getJarPath("test.jar"); | ||
String mainClass = "LambdaWithUseImplMethodHandleApp"; | ||
String expectedMsg = "Called BaseWithProtectedMethod::protectedMethod"; | ||
String classList = "LambdaWithUseImplMethodHandle.list"; | ||
String archiveName = TestCommon.getNewArchiveName(); | ||
|
||
// dump class list | ||
CDSTestUtils.dumpClassList(classList, "-cp", appJar, mainClass); | ||
|
||
// create archive with the class list | ||
CDSOptions opts = (new CDSOptions()) | ||
.addPrefix("-XX:ExtraSharedClassListFile=" + classList, | ||
"-cp", appJar) | ||
.setArchiveName(archiveName); | ||
CDSTestUtils.createArchiveAndCheck(opts); | ||
|
||
// run with archive | ||
CDSOptions runOpts = (new CDSOptions()) | ||
.addPrefix("-cp", appJar) | ||
.setArchiveName(archiveName) | ||
.setUseVersion(false) | ||
.addSuffix(mainClass); | ||
CDSTestUtils.run(runOpts) | ||
.assertNormalExit(expectedMsg); | ||
} | ||
} |
71 changes: 71 additions & 0 deletions
71
...hotspot/jtreg/runtime/cds/appcds/dynamicArchive/DynamicLambdaWithUseImplMethodHandle.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
/* | ||
* Copyright (c) 2022, 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 8290417 | ||
* @summary CDS cannot archive lambda proxy with useImplMethodHandle | ||
* @requires vm.cds | ||
* @library /test/lib /test/hotspot/jtreg/runtime/cds/appcds /test/hotspot/jtreg/runtime/cds/appcds/test-classes | ||
* @build pkg1.BaseWithProtectedMethod | ||
* @build pkg2.Child | ||
* @build LambdaWithUseImplMethodHandleApp | ||
* @build sun.hotspot.WhiteBox | ||
* @run driver jdk.test.lib.helpers.ClassFileInstaller -jar test.jar pkg1.BaseWithProtectedMethod pkg2.Child LambdaWithUseImplMethodHandleApp | ||
* @run driver jdk.test.lib.helpers.ClassFileInstaller sun.hotspot.WhiteBox | ||
* @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. DynamicLambdaWithUseImplMethodHandle | ||
*/ | ||
|
||
import jdk.test.lib.helpers.ClassFileInstaller; | ||
|
||
public class DynamicLambdaWithUseImplMethodHandle extends DynamicArchiveTestBase { | ||
|
||
// See pkg2/Child.jcod for details about the condition that triggers JDK-8290417 | ||
public static void main(String[] args) throws Exception { | ||
runTest(DynamicLambdaWithUseImplMethodHandle::test); | ||
} | ||
|
||
static void test() throws Exception { | ||
String topArchiveName = getNewArchiveName("top"); | ||
|
||
String appJar = ClassFileInstaller.getJarPath("test.jar"); | ||
String mainClass = "LambdaWithUseImplMethodHandleApp"; | ||
String expectedMsg = "Called BaseWithProtectedMethod::protectedMethod"; | ||
|
||
dump(topArchiveName, | ||
"-Xlog:cds", | ||
"-Xlog:cds+dynamic=debug", | ||
"-cp", appJar, mainClass) | ||
.assertNormalExit(output -> { | ||
output.shouldContain(expectedMsg); | ||
}); | ||
run(topArchiveName, | ||
"-Xlog:cds+dynamic=debug,cds=debug", | ||
"-cp", appJar, mainClass) | ||
.assertNormalExit(output -> { | ||
output.shouldContain(expectedMsg) | ||
.shouldHaveExitValue(0); | ||
}); | ||
} | ||
} |
34 changes: 34 additions & 0 deletions
34
test/hotspot/jtreg/runtime/cds/appcds/test-classes/LambdaWithUseImplMethodHandleApp.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
/* | ||
* Copyright (c) 2022, 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. | ||
* | ||
*/ | ||
|
||
import java.util.Optional; | ||
import pkg2.Child; | ||
|
||
public class LambdaWithUseImplMethodHandleApp { | ||
public static void main(String args[]) { | ||
String name = "foo"; | ||
Optional<String> opt = Optional.of(name); | ||
(new Child()).test(opt); | ||
} | ||
} |
32 changes: 32 additions & 0 deletions
32
test/hotspot/jtreg/runtime/cds/appcds/test-classes/pkg1/BaseWithProtectedMethod.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
/* | ||
* Copyright (c) 2022, 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. | ||
* | ||
*/ | ||
|
||
package pkg1; | ||
|
||
public class BaseWithProtectedMethod { | ||
protected void protectedMethod(String s) { | ||
Thread.dumpStack(); | ||
System.out.println("Called BaseWithProtectedMethod::protectedMethod(" + s + ")"); | ||
} | ||
} |
Oops, something went wrong.
27ffd83
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Review
Issues