Mercurial > hg > graal-jvmci-8
diff jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotConstantPool.java @ 24100:839dcc4f2cf6 jvmci-0.24
handle signature polymorphic methods correctly (JDK-8161550)
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Wed, 08 Feb 2017 23:49:32 +0100 |
parents | 9a740aa0d87b |
children |
line wrap: on
line diff
--- a/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotConstantPool.java Wed Feb 08 23:25:01 2017 +0100 +++ b/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotConstantPool.java Wed Feb 08 23:49:32 2017 +0100 @@ -715,16 +715,20 @@ } - static class Lazy { - static final String[] signaturePolymorphicHolders = compilerToVM().getSignaturePolymorphicHolders(); - } + // Lazily initialized. + private static String[] signaturePolymorphicHolders; /** * Determines if {@code type} contains signature polymorphic methods. */ - private static boolean isSignaturePolymorphicHolder(final HotSpotResolvedObjectTypeImpl type) { + @SuppressFBWarnings(value = "LI_LAZY_INIT_STATIC", justification = "signaturePolymorphicHolders is a cache, not a singleton that must be constructed exactly once" + + "and compiler re-ordering is not an issue due to the VM call") + static boolean isSignaturePolymorphicHolder(final ResolvedJavaType type) { String name = type.getName(); - for (String holder : Lazy.signaturePolymorphicHolders) { + if (signaturePolymorphicHolders == null) { + signaturePolymorphicHolders = compilerToVM().getSignaturePolymorphicHolders(); + } + for (String holder : signaturePolymorphicHolders) { if (name.equals(holder)) { return true; }