diff --git a/8015927-Class-reference-duplicates-in-constant-pool.patch b/8015927-Class-reference-duplicates-in-constant-pool.patch new file mode 100755 index 0000000000000000000000000000000000000000..81fe524ac4a6f4f9b251b62f07b1dc558ddf824e --- /dev/null +++ b/8015927-Class-reference-duplicates-in-constant-pool.patch @@ -0,0 +1,115 @@ +diff --git a/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java b/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java +index eecd6807..11b24341 100644 +--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java ++++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java +@@ -461,11 +461,11 @@ public class ClassWriter extends ClassFile { + poolbuf.appendChar(pool.put(names.fromString((String)value))); + } else if (value instanceof UniqueType) { + Type type = ((UniqueType)value).type; +- if (type instanceof MethodType) { ++ if (type.hasTag(METHOD)) { + poolbuf.appendByte(CONSTANT_MethodType); + poolbuf.appendChar(pool.put(typeSig((MethodType)type))); + } else { +- if (type.hasTag(CLASS)) enterInner((ClassSymbol)type.tsym); ++ Assert.check(type.hasTag(ARRAY)); + poolbuf.appendByte(CONSTANT_Class); + poolbuf.appendChar(pool.put(xClassName(type))); + } +diff --git a/langtools/src/share/classes/com/sun/tools/javac/jvm/Pool.java b/langtools/src/share/classes/com/sun/tools/javac/jvm/Pool.java +index 4389d08b..f87c1053 100644 +--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/Pool.java ++++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/Pool.java +@@ -28,6 +28,7 @@ package com.sun.tools.javac.jvm; + import com.sun.tools.javac.code.Kinds; + import com.sun.tools.javac.code.Symbol; + import com.sun.tools.javac.code.Symbol.*; ++import com.sun.tools.javac.code.TypeTag; + import com.sun.tools.javac.code.Type; + import com.sun.tools.javac.code.Types; + import com.sun.tools.javac.code.Types.UniqueType; +@@ -126,7 +127,14 @@ public class Pool { + } else if (o instanceof VarSymbol) { + return new Variable((VarSymbol)o, types); + } else if (o instanceof Type) { +- return new UniqueType((Type)o, types); ++ Type t = (Type)o; ++ // ClassRefs can come from ClassSymbols or from Types. ++ // Return the symbol for these types to avoid duplicates ++ // in the constant pool ++ if (t.hasTag(TypeTag.CLASS)) ++ return t.tsym; ++ else ++ return new UniqueType(t, types); + } else { + return o; + } +diff --git a/langtools/test/tools/javac/jvm/ClassRefDupInConstantPoolTest.java b/langtools/test/tools/javac/jvm/ClassRefDupInConstantPoolTest.java +new file mode 100644 +index 00000000..98c7cf8d +--- /dev/null ++++ b/langtools/test/tools/javac/jvm/ClassRefDupInConstantPoolTest.java +@@ -0,0 +1,63 @@ ++/* ++ * Copyright (c) 2014, 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 8015927 ++ * @summary Class reference duplicates in constant pool ++ * @clean ClassRefDupInConstantPoolTest$Duplicates.class ++ * @run main ClassRefDupInConstantPoolTest ++ */ ++ ++import java.util.TreeSet; ++ ++import com.sun.tools.classfile.*; ++import com.sun.tools.classfile.ConstantPool.*; ++ ++public class ClassRefDupInConstantPoolTest { ++ public static void main(String[] args) throws Exception { ++ ClassFile cls = ClassFile.read(ClassRefDupInConstantPoolTest.class. ++ getResourceAsStream("ClassRefDupInConstantPoolTest$Duplicates.class")); ++ ConstantPool pool = cls.constant_pool; ++ ++ int duplicates = 0; ++ TreeSet set = new TreeSet<>(); ++ for (CPInfo i : pool.entries()) { ++ if (i.getTag() == ConstantPool.CONSTANT_Class) { ++ CONSTANT_Class_info ci = (CONSTANT_Class_info)i; ++ if (!set.add(ci.name_index)) { ++ duplicates++; ++ System.out.println("DUPLICATE CLASS REF " + ci.getName()); ++ } ++ } ++ } ++ if (duplicates > 0) ++ throw new Exception("Test Failed"); ++ } ++ ++ class Duplicates { ++ String concat(String s1, String s2) { ++ return s1 + (s2 == s1 ? " " : s2); ++ } ++ } ++} diff --git a/java-1.8.0-openjdk.spec b/java-1.8.0-openjdk.spec index 422650f85493afbb50fca617d2550d3050dfdd2a..6c62a2c542e00708c1e10e637a749b73847ad5fd 100644 --- a/java-1.8.0-openjdk.spec +++ b/java-1.8.0-openjdk.spec @@ -915,7 +915,7 @@ Provides: java-%{javaver}-%{origin}-accessibility%{?1} = %{epoch}:%{version}-%{r Name: java-%{javaver}-%{origin} Version: %{javaver}.%{updatever}.%{buildver} -Release: 9 +Release: 10 # java-1.5.0-ibm from jpackage.org set Epoch to 1 for unknown reasons # and this change was brought into RHEL-4. java-1.5.0-ibm packages # also included the epoch in their virtual provides. This created a @@ -1065,6 +1065,7 @@ Patch136: 8236512-PKCS11-Connection-closed-after-Cipher.doFinal-and-NoPadding.pa Patch137: 8250861-Crash-in-MinINode-Ideal-PhaseGVN-bool.patch Patch138: add-appcds-file-lock.patch Patch139: G1-memory-uncommit.patch +Patch140: 8015927-Class-reference-duplicates-in-constant-pool.patch ############################################# # @@ -1485,6 +1486,7 @@ pushd %{top_level_dir_name} %patch137 -p1 %patch138 -p1 %patch139 -p1 +%patch140 -p1 popd @@ -2101,6 +2103,9 @@ require "copy_jdk_configs.lua" %endif %changelog +* Thu Dec 22 2020 miaozhuojun - 1:1.8.0.272-b10.10 +- add 8015927-Class-reference-duplicates-in-constant-pool.patch + * Thu Dec 22 2020 cruise01 - 1:1.8.0.272-b10.9 - add G1-memory-uncommit.patch