diff jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotConstantReflectionProvider.java @ 22760:4cf1946f59fc

must not fold accesses to @Stable fields if -XX:-FoldStableValues (GRAAL-58)
author Doug Simon <doug.simon@oracle.com>
date Sat, 26 Dec 2015 15:00:55 +0100
parents a130b51efb07
children 87394b31a42e
line wrap: on
line diff
--- a/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotConstantReflectionProvider.java	Thu Dec 24 09:50:27 2015 -1000
+++ b/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotConstantReflectionProvider.java	Sat Dec 26 15:00:55 2015 +0100
@@ -238,7 +238,7 @@
      * {@link #readConstantFieldValue(ResolvedJavaField, JavaConstant)}.
      */
     protected boolean isStaticFieldConstant(HotSpotResolvedJavaField staticField) {
-        if (staticField.isFinal() || staticField.isStable()) {
+        if (staticField.isFinal() || (staticField.isStable() && runtime.getConfig().foldStableValues)) {
             ResolvedJavaType holder = staticField.getDeclaringClass();
             if (holder.isInitialized() && !holder.getName().equals(SystemClassName)) {
                 return true;
@@ -302,7 +302,7 @@
                             return value;
                         }
                     }
-                } else if (hotspotField.isStable()) {
+                } else if (hotspotField.isStable() && runtime.getConfig().foldStableValues) {
                     if (hotspotField.isInObject(object)) {
                         JavaConstant value = readFieldValue(field, receiver);
                         if (isStableInstanceFieldValueConstant(value, object.getClass())) {
@@ -319,8 +319,10 @@
         HotSpotResolvedJavaField hotspotField = (HotSpotResolvedJavaField) field;
         if (!hotspotField.isStable()) {
             return readNonStableFieldValue(field, receiver);
+        } else if (runtime.getConfig().foldStableValues) {
+            return readStableFieldValue(field, receiver, hotspotField.isDefaultStable());
         } else {
-            return readStableFieldValue(field, receiver, hotspotField.isDefaultStable());
+            return null;
         }
     }