1.1 --- a/test/compiler/stable/TestStableInt.java Wed Jul 02 22:54:18 2014 +0200 1.2 +++ b/test/compiler/stable/TestStableInt.java Thu Jul 10 12:04:43 2014 -0700 1.3 @@ -26,9 +26,11 @@ 1.4 /* 1.5 * @test TestStableInt 1.6 * @summary tests on stable fields and arrays 1.7 - * @library /testlibrary 1.8 - * @compile -XDignore.symbol.file TestStableInt.java 1.9 + * @library /testlibrary /testlibrary/whitebox 1.10 + * @build TestStableInt StableConfiguration sun.hotspot.WhiteBox 1.11 + * @run main ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission 1.12 * @run main ClassFileInstaller 1.13 + * java/lang/invoke/StableConfiguration 1.14 * java/lang/invoke/TestStableInt 1.15 * java/lang/invoke/TestStableInt$IntStable 1.16 * java/lang/invoke/TestStableInt$StaticIntStable 1.17 @@ -48,46 +50,60 @@ 1.18 * java/lang/invoke/TestStableInt$NestedStableField3 1.19 * java/lang/invoke/TestStableInt$NestedStableField3$A 1.20 * java/lang/invoke/TestStableInt$DefaultValue 1.21 + * java/lang/invoke/TestStableInt$DefaultStaticValue 1.22 * java/lang/invoke/TestStableInt$ObjectArrayLowerDim2 1.23 * 1.24 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions 1.25 - * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:+UseCompressedOop 1.26 - * -server -XX:-TieredCompilation -Xcomp 1.27 + * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp 1.28 + * -server -XX:-TieredCompilation 1.29 + * -XX:+FoldStableValues 1.30 + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 1.31 + * java.lang.invoke.TestStableInt 1.32 + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions 1.33 + * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp 1.34 + * -server -XX:-TieredCompilation 1.35 + * -XX:-FoldStableValues 1.36 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 1.37 * java.lang.invoke.TestStableInt 1.38 * 1.39 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions 1.40 - * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:-UseCompressedOop 1.41 - * -server -XX:-TieredCompilation -Xcomp 1.42 + * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp 1.43 + * -server -XX:+TieredCompilation -XX:TieredStopAtLevel=1 1.44 + * -XX:+FoldStableValues 1.45 + * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 1.46 + * java.lang.invoke.TestStableInt 1.47 + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions 1.48 + * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp 1.49 + * -server -XX:+TieredCompilation -XX:TieredStopAtLevel=1 1.50 + * -XX:-FoldStableValues 1.51 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 1.52 * java.lang.invoke.TestStableInt 1.53 * 1.54 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions 1.55 - * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:+UseCompressedOop 1.56 - * -server -XX:-TieredCompilation -Xcomp 1.57 + * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp 1.58 + * -client -XX:-TieredCompilation 1.59 + * -XX:+FoldStableValues 1.60 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 1.61 * java.lang.invoke.TestStableInt 1.62 - * 1.63 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions 1.64 - * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:-UseCompressedOop 1.65 - * -server -XX:-TieredCompilation -Xcomp 1.66 + * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp 1.67 + * -client -XX:-TieredCompilation 1.68 + * -XX:-FoldStableValues 1.69 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 1.70 * java.lang.invoke.TestStableInt 1.71 */ 1.72 package java.lang.invoke; 1.73 1.74 -import com.sun.management.HotSpotDiagnosticMXBean; 1.75 -import com.sun.management.VMOption; 1.76 -import sun.management.ManagementFactoryHelper; 1.77 import java.lang.reflect.InvocationTargetException; 1.78 1.79 public class TestStableInt { 1.80 + static final boolean isStableEnabled = StableConfiguration.isStableEnabled; 1.81 + static final boolean isServerWithStable = StableConfiguration.isServerWithStable; 1.82 + 1.83 public static void main(String[] args) throws Exception { 1.84 - System.out.println("@Stable enabled: "+isStableEnabled); 1.85 - System.out.println(); 1.86 - 1.87 run(DefaultValue.class); 1.88 run(IntStable.class); 1.89 + run(DefaultStaticValue.class); 1.90 run(StaticIntStable.class); 1.91 run(VolatileIntStable.class); 1.92 1.93 @@ -145,6 +161,21 @@ 1.94 1.95 /* ==================================================== */ 1.96 1.97 + static class DefaultStaticValue { 1.98 + public static @Stable int v; 1.99 + 1.100 + public static final DefaultStaticValue c = new DefaultStaticValue(); 1.101 + public static int get() { return c.v; } 1.102 + public static void test() throws Exception { 1.103 + int val1 = get(); 1.104 + c.v = 1; int val2 = get(); 1.105 + assertEquals(val1, 0); 1.106 + assertEquals(val2, 1); 1.107 + } 1.108 + } 1.109 + 1.110 + /* ==================================================== */ 1.111 + 1.112 static class StaticIntStable { 1.113 public static @Stable int v; 1.114 1.115 @@ -188,20 +219,22 @@ 1.116 c.v = new int[1]; c.v[0] = 1; int val1 = get(); 1.117 c.v[0] = 2; int val2 = get(); 1.118 assertEquals(val1, 1); 1.119 - assertEquals(val2, (isStableEnabled ? 1 : 2)); 1.120 + assertEquals(val2, (isServerWithStable ? 1 : 2)); 1.121 1.122 c.v = new int[1]; c.v[0] = 3; int val3 = get(); 1.123 - assertEquals(val3, (isStableEnabled ? 1 : 3)); 1.124 + assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2) 1.125 + : 3)); 1.126 } 1.127 1.128 { 1.129 c.v = new int[20]; c.v[10] = 1; int val1 = get1(); 1.130 c.v[10] = 2; int val2 = get1(); 1.131 assertEquals(val1, 1); 1.132 - assertEquals(val2, (isStableEnabled ? 1 : 2)); 1.133 + assertEquals(val2, (isServerWithStable ? 1 : 2)); 1.134 1.135 c.v = new int[20]; c.v[10] = 3; int val3 = get1(); 1.136 - assertEquals(val3, (isStableEnabled ? 1 : 3)); 1.137 + assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2) 1.138 + : 3)); 1.139 } 1.140 1.141 { 1.142 @@ -226,19 +259,21 @@ 1.143 c.v = new int[1][1]; c.v[0][0] = 1; int val1 = get(); 1.144 c.v[0][0] = 2; int val2 = get(); 1.145 assertEquals(val1, 1); 1.146 - assertEquals(val2, (isStableEnabled ? 1 : 2)); 1.147 + assertEquals(val2, (isServerWithStable ? 1 : 2)); 1.148 1.149 c.v = new int[1][1]; c.v[0][0] = 3; int val3 = get(); 1.150 - assertEquals(val3, (isStableEnabled ? 1 : 3)); 1.151 + assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2) 1.152 + : 3)); 1.153 1.154 c.v[0] = new int[1]; c.v[0][0] = 4; int val4 = get(); 1.155 - assertEquals(val4, (isStableEnabled ? 1 : 4)); 1.156 + assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2) 1.157 + : 4)); 1.158 } 1.159 1.160 { 1.161 c.v = new int[1][1]; int[] val1 = get1(); 1.162 c.v[0] = new int[1]; int[] val2 = get1(); 1.163 - assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); 1.164 + assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); 1.165 } 1.166 1.167 { 1.168 @@ -264,28 +299,31 @@ 1.169 c.v = new int[1][1][1]; c.v[0][0][0] = 1; int val1 = get(); 1.170 c.v[0][0][0] = 2; int val2 = get(); 1.171 assertEquals(val1, 1); 1.172 - assertEquals(val2, (isStableEnabled ? 1 : 2)); 1.173 + assertEquals(val2, (isServerWithStable ? 1 : 2)); 1.174 1.175 c.v = new int[1][1][1]; c.v[0][0][0] = 3; int val3 = get(); 1.176 - assertEquals(val3, (isStableEnabled ? 1 : 3)); 1.177 + assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2) 1.178 + : 3)); 1.179 1.180 c.v[0] = new int[1][1]; c.v[0][0][0] = 4; int val4 = get(); 1.181 - assertEquals(val4, (isStableEnabled ? 1 : 4)); 1.182 + assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2) 1.183 + : 4)); 1.184 1.185 c.v[0][0] = new int[1]; c.v[0][0][0] = 5; int val5 = get(); 1.186 - assertEquals(val5, (isStableEnabled ? 1 : 5)); 1.187 + assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1 : 2) 1.188 + : 5)); 1.189 } 1.190 1.191 { 1.192 c.v = new int[1][1][1]; int[] val1 = get1(); 1.193 c.v[0][0] = new int[1]; int[] val2 = get1(); 1.194 - assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); 1.195 + assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); 1.196 } 1.197 1.198 { 1.199 c.v = new int[1][1][1]; int[][] val1 = get2(); 1.200 c.v[0] = new int[1][1]; int[][] val2 = get2(); 1.201 - assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); 1.202 + assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); 1.203 } 1.204 1.205 { 1.206 @@ -312,37 +350,41 @@ 1.207 c.v = new int[1][1][1][1]; c.v[0][0][0][0] = 1; int val1 = get(); 1.208 c.v[0][0][0][0] = 2; int val2 = get(); 1.209 assertEquals(val1, 1); 1.210 - assertEquals(val2, (isStableEnabled ? 1 : 2)); 1.211 + assertEquals(val2, (isServerWithStable ? 1 : 2)); 1.212 1.213 c.v = new int[1][1][1][1]; c.v[0][0][0][0] = 3; int val3 = get(); 1.214 - assertEquals(val3, (isStableEnabled ? 1 : 3)); 1.215 + assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2) 1.216 + : 3)); 1.217 1.218 c.v[0] = new int[1][1][1]; c.v[0][0][0][0] = 4; int val4 = get(); 1.219 - assertEquals(val4, (isStableEnabled ? 1 : 4)); 1.220 + assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2) 1.221 + : 4)); 1.222 1.223 c.v[0][0] = new int[1][1]; c.v[0][0][0][0] = 5; int val5 = get(); 1.224 - assertEquals(val5, (isStableEnabled ? 1 : 5)); 1.225 + assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1 : 2) 1.226 + : 5)); 1.227 1.228 c.v[0][0][0] = new int[1]; c.v[0][0][0][0] = 6; int val6 = get(); 1.229 - assertEquals(val6, (isStableEnabled ? 1 : 6)); 1.230 + assertEquals(val6, (isStableEnabled ? (isServerWithStable ? 1 : 2) 1.231 + : 6)); 1.232 } 1.233 1.234 { 1.235 c.v = new int[1][1][1][1]; int[] val1 = get1(); 1.236 c.v[0][0][0] = new int[1]; int[] val2 = get1(); 1.237 - assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); 1.238 + assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); 1.239 } 1.240 1.241 { 1.242 c.v = new int[1][1][1][1]; int[][] val1 = get2(); 1.243 c.v[0][0] = new int[1][1]; int[][] val2 = get2(); 1.244 - assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); 1.245 + assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); 1.246 } 1.247 1.248 { 1.249 c.v = new int[1][1][1][1]; int[][][] val1 = get3(); 1.250 c.v[0] = new int[1][1][1]; int[][][] val2 = get3(); 1.251 - assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); 1.252 + assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); 1.253 } 1.254 1.255 { 1.256 @@ -350,13 +392,11 @@ 1.257 c.v = new int[1][1][1][1]; int[][][][] val2 = get4(); 1.258 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); 1.259 } 1.260 - 1.261 } 1.262 } 1.263 1.264 /* ==================================================== */ 1.265 // Dynamic Dim is higher than static 1.266 - 1.267 static class ObjectArrayLowerDim0 { 1.268 public @Stable Object v; 1.269 1.270 @@ -404,7 +444,7 @@ 1.271 c.v = new int[1][1]; c.v[0] = new int[0]; int[] val1 = get1(); 1.272 c.v[0] = new int[0]; int[] val2 = get1(); 1.273 1.274 - assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); 1.275 + assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); 1.276 } 1.277 1.278 { 1.279 @@ -440,14 +480,14 @@ 1.280 c.v = new int[1][1][1]; c.v[0][0] = new int[0]; int[] val1 = get1(); 1.281 c.v[0][0] = new int[0]; int[] val2 = get1(); 1.282 1.283 - assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); 1.284 + assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); 1.285 } 1.286 1.287 { 1.288 c.v = new int[1][1][1]; c.v[0] = new int[0][0]; int[][] val1 = get2(); 1.289 c.v[0] = new int[0][0]; int[][] val2 = get2(); 1.290 1.291 - assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); 1.292 + assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); 1.293 } 1.294 1.295 { 1.296 @@ -582,7 +622,7 @@ 1.297 elem.a = 2; int val3 = get(); int val4 = get1(); 1.298 1.299 assertEquals(val1, 1); 1.300 - assertEquals(val3, (isStableEnabled ? 1 : 2)); 1.301 + assertEquals(val3, (isServerWithStable ? 1 : 2)); 1.302 1.303 assertEquals(val2, 1); 1.304 assertEquals(val4, 2); 1.305 @@ -616,17 +656,4 @@ 1.306 } 1.307 } 1.308 } 1.309 - 1.310 - static final boolean isStableEnabled; 1.311 - static { 1.312 - HotSpotDiagnosticMXBean diagnostic 1.313 - = ManagementFactoryHelper.getDiagnosticMXBean(); 1.314 - VMOption tmp; 1.315 - try { 1.316 - tmp = diagnostic.getVMOption("FoldStableValues"); 1.317 - } catch (IllegalArgumentException e) { 1.318 - tmp = null; 1.319 - } 1.320 - isStableEnabled = (tmp == null ? false : Boolean.parseBoolean(tmp.getValue())); 1.321 - } 1.322 }