changeset 385:6d05ba34c4e9

Remove ACCEPTABLE_SPEC, fold it to ACCEPTABLE_INTERESTING.
author shade
date Mon, 06 Mar 2017 18:15:37 +0100
parents 020a3bf820bc
children 825888394706
files jcstress-core/src/main/java/org/openjdk/jcstress/annotations/Expect.java jcstress-core/src/main/java/org/openjdk/jcstress/infra/grading/HTMLReportPrinter.java jcstress-core/src/main/java/org/openjdk/jcstress/infra/grading/TestGrading.java jcstress-core/src/main/java/org/openjdk/jcstress/infra/grading/TextReportPrinter.java jcstress-test-gen/src/main/resources/accessAtomic/X-ArrayAtomicityTest.java.template jcstress-test-gen/src/main/resources/accessAtomic/X-FieldAtomicityTest.java.template jcstress-test-gen/src/main/resources/accessAtomic/X-VarHandleArrayAtomicityTest.java.template jcstress-test-gen/src/main/resources/accessAtomic/X-VarHandleByteArrayViewAtomicityTest.java.template jcstress-test-gen/src/main/resources/accessAtomic/X-VarHandleDirectByteBufferViewAtomicityTest.java.template jcstress-test-gen/src/main/resources/accessAtomic/X-VarHandleFieldAtomicityTest.java.template jcstress-test-gen/src/main/resources/accessAtomic/X-VarHandleHeapByteBufferViewAtomicityTest.java.template jcstress-test-gen/src/main/resources/fences/X-LoadLoadFenceTest.java.template jcstress-test-gen/src/main/resources/fences/X-LoadStoreFenceTest1.java.template jcstress-test-gen/src/main/resources/fences/X-LoadStoreFenceTest2.java.template jcstress-test-gen/src/main/resources/fences/X-StoreLoadFenceTest.java.template jcstress-test-gen/src/main/resources/fences/X-StoreStoreFenceTest1.java.template jcstress-test-gen/src/main/resources/fences/X-StoreStoreFenceTest2.java.template jcstress-test-gen/src/main/resources/init/X-FieldInitTest.java.template tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/buffers/GradeChar.java tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/buffers/GradeDouble.java tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/buffers/GradeFloat.java tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/buffers/GradeInt.java tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/crosscache/ByteBufferIntAtomicityTest.java tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/crosscache/DirectByteBufferIntAtomicityTest.java tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/primitives/perbyte/DoubleAtomicityTest.java tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/primitives/perbyte/LongAtomicityTest.java tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/primitives/reflect/DoubleAtomicityTest.java tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/primitives/reflect/LongAtomicityTest.java tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/booleans/AtomicBooleanPairwiseTests.java tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/integer/AtomicIntegerArrayPairwiseTests.java tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/integer/AtomicIntegerFieldUpdaterPairwiseTests.java tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/integer/AtomicIntegerPairwiseTests.java tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/longs/AtomicLongArrayPairwiseTests.java tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/longs/AtomicLongFieldUpdaterPairwiseTests.java tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/longs/AtomicLongPairwiseTests.java tests-custom/src/main/java/org/openjdk/jcstress/tests/init/Grading_DoubleCanSeeMost.java tests-custom/src/main/java/org/openjdk/jcstress/tests/init/Grading_DoubleShouldSeeFull.java tests-custom/src/main/java/org/openjdk/jcstress/tests/init/Grading_LongCanSeeMost.java tests-custom/src/main/java/org/openjdk/jcstress/tests/init/Grading_LongShouldSeeFull.java
diffstat 39 files changed, 39 insertions(+), 86 deletions(-) [+]
line wrap: on
line diff
--- a/jcstress-core/src/main/java/org/openjdk/jcstress/annotations/Expect.java	Mon Mar 06 17:13:41 2017 +0100
+++ b/jcstress-core/src/main/java/org/openjdk/jcstress/annotations/Expect.java	Mon Mar 06 18:15:37 2017 +0100
@@ -40,12 +40,6 @@
     ACCEPTABLE_INTERESTING,
 
     /**
-     * Same as {@link #ACCEPTABLE}, but this result is only formally acceptable, and may be surprising to end users.
-     * TODO: Fold this with ACCEPTABLE_INTERESTING
-     */
-    ACCEPTABLE_SPEC,
-
-    /**
      * Forbidden result. Should never be present.
      */
     FORBIDDEN,
--- a/jcstress-core/src/main/java/org/openjdk/jcstress/infra/grading/HTMLReportPrinter.java	Mon Mar 06 17:13:41 2017 +0100
+++ b/jcstress-core/src/main/java/org/openjdk/jcstress/infra/grading/HTMLReportPrinter.java	Mon Mar 06 18:15:37 2017 +0100
@@ -149,11 +149,6 @@
                 r -> r.status() != Status.NORMAL && r.status() != Status.API_MISMATCH);
 
         printXTests(byName, output,
-                "SPEC tests",
-                "Formally acceptable, but surprising results are observed. Implementations going beyond the minimal requirements should have none.",
-                r -> r.status() == Status.NORMAL && r.grading().hasSpec);
-
-        printXTests(byName, output,
                 "INTERESTING tests",
                 "Some interesting behaviors observed. This is for the plain curiosity.",
                 r -> r.status() == Status.NORMAL && r.grading().hasInteresting);
@@ -278,11 +273,6 @@
         } else {
             output.println("<td class=\"interesting\"></td>");
         }
-        if (grading.hasSpec) {
-            output.println("<td class=\"spec\">SPEC</td>");
-        } else {
-            output.println("<td class=\"spec\"></td>");
-        }
         output.println("<td class=\"passed\"></td>");
         output.println("</tr>");
     }
@@ -453,8 +443,6 @@
                 return isZero ? Color.LIGHT_GRAY : Color.RED;
             case ACCEPTABLE_INTERESTING:
                 return isZero ? Color.LIGHT_GRAY : Color.CYAN;
-            case ACCEPTABLE_SPEC:
-                return isZero ? Color.LIGHT_GRAY : Color.YELLOW;
             case UNKNOWN:
                 return Color.RED;
             default:
--- a/jcstress-core/src/main/java/org/openjdk/jcstress/infra/grading/TestGrading.java	Mon Mar 06 17:13:41 2017 +0100
+++ b/jcstress-core/src/main/java/org/openjdk/jcstress/infra/grading/TestGrading.java	Mon Mar 06 18:15:37 2017 +0100
@@ -39,7 +39,6 @@
 public class TestGrading {
     public boolean isPassed;
     public boolean hasInteresting;
-    public boolean hasSpec;
     public final List<GradingResult> gradingResults;
     public final List<String> failureMessages;
 
@@ -54,7 +53,6 @@
 
         isPassed = true;
         hasInteresting = false;
-        hasSpec = false;
 
         List<StateCase> unmatchedStates = new ArrayList<>();
         unmatchedStates.addAll(test.cases());
@@ -92,7 +90,6 @@
             Expect ex = matched.expect();
             isPassed &= passed(ex, count);
             hasInteresting |= hasInteresting(ex, count);
-            hasSpec |= hasSpec(ex, count);
             failureMessages.add(failureMessage(s, ex, count));
 
             gradingResults.add(new GradingResult(
@@ -108,7 +105,6 @@
             Expect ex = c.expect();
             isPassed &= passed(ex, 0);
             hasInteresting |= hasInteresting(ex, 0);
-            hasSpec |= hasSpec(ex, 0);
             failureMessages.add(failureMessage("N/A", ex, 0));
 
             gradingResults.add(new GradingResult(
@@ -130,7 +126,6 @@
             switch (expect) {
                 case ACCEPTABLE:
                 case ACCEPTABLE_INTERESTING:
-                case ACCEPTABLE_SPEC:
                     return null;
                 case FORBIDDEN:
                     return "Observed forbidden state: " + id;
@@ -146,7 +141,6 @@
         switch (expect) {
             case ACCEPTABLE:
             case ACCEPTABLE_INTERESTING:
-            case ACCEPTABLE_SPEC:
                 return true;
             case FORBIDDEN:
                 return count == 0;
@@ -160,7 +154,6 @@
     private static boolean hasInteresting(Expect expect, long count) {
         switch (expect) {
             case ACCEPTABLE:
-            case ACCEPTABLE_SPEC:
             case FORBIDDEN:
                 return false;
             case ACCEPTABLE_INTERESTING:
@@ -172,19 +165,4 @@
         }
     }
 
-    private static boolean hasSpec(Expect expect, long count) {
-        switch (expect) {
-            case ACCEPTABLE:
-            case ACCEPTABLE_INTERESTING:
-            case FORBIDDEN:
-                return false;
-            case ACCEPTABLE_SPEC:
-                return count != 0;
-            case UNKNOWN:
-                return false;
-            default:
-                throw new IllegalStateException("No grading for expect type = " + expect);
-        }
-    }
-
 }
--- a/jcstress-core/src/main/java/org/openjdk/jcstress/infra/grading/TextReportPrinter.java	Mon Mar 06 17:13:41 2017 +0100
+++ b/jcstress-core/src/main/java/org/openjdk/jcstress/infra/grading/TextReportPrinter.java	Mon Mar 06 18:15:37 2017 +0100
@@ -75,13 +75,6 @@
         );
 
         printXTests(byConfig,
-                "SPEC tests",
-                "Formally acceptable, but surprising results are observed. Implementations going beyond the minimal requirements should have none.",
-                r -> r.status() == Status.NORMAL && r.grading().hasSpec,
-                true
-        );
-
-        printXTests(byConfig,
                 "FAILED tests",
                 "Strong asserts were violated. Correct implementations should have no assert failures here.",
                 r -> r.status() == Status.NORMAL && !r.grading().isPassed,
--- a/jcstress-test-gen/src/main/resources/accessAtomic/X-ArrayAtomicityTest.java.template	Mon Mar 06 17:13:41 2017 +0100
+++ b/jcstress-test-gen/src/main/resources/accessAtomic/X-ArrayAtomicityTest.java.template	Mon Mar 06 18:15:37 2017 +0100
@@ -38,7 +38,7 @@
 #if[alwaysAtomic]
 @Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
 #else[alwaysAtomic]
-@Outcome(expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec")
+@Outcome(expect = Expect.ACCEPTABLE_INTERESTING, desc = "Non-atomic access detected, allowed by spec")
 @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
 #end[alwaysAtomic]
 @State
--- a/jcstress-test-gen/src/main/resources/accessAtomic/X-FieldAtomicityTest.java.template	Mon Mar 06 17:13:41 2017 +0100
+++ b/jcstress-test-gen/src/main/resources/accessAtomic/X-FieldAtomicityTest.java.template	Mon Mar 06 18:15:37 2017 +0100
@@ -38,7 +38,7 @@
 #if[alwaysAtomic]
 @Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
 #else[alwaysAtomic]
-@Outcome(expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec")
+@Outcome(expect = Expect.ACCEPTABLE_INTERESTING, desc = "Non-atomic access detected, allowed by spec")
 @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
 #end[alwaysAtomic]
 @State
--- a/jcstress-test-gen/src/main/resources/accessAtomic/X-VarHandleArrayAtomicityTest.java.template	Mon Mar 06 17:13:41 2017 +0100
+++ b/jcstress-test-gen/src/main/resources/accessAtomic/X-VarHandleArrayAtomicityTest.java.template	Mon Mar 06 18:15:37 2017 +0100
@@ -41,7 +41,7 @@
 #if[alwaysAtomic]
 @Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
 #else[alwaysAtomic]
-@Outcome(expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec")
+@Outcome(expect = Expect.ACCEPTABLE_INTERESTING, desc = "Non-atomic access detected, allowed by spec")
 @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
 #end[alwaysAtomic]
 @State
--- a/jcstress-test-gen/src/main/resources/accessAtomic/X-VarHandleByteArrayViewAtomicityTest.java.template	Mon Mar 06 17:13:41 2017 +0100
+++ b/jcstress-test-gen/src/main/resources/accessAtomic/X-VarHandleByteArrayViewAtomicityTest.java.template	Mon Mar 06 18:15:37 2017 +0100
@@ -43,7 +43,7 @@
 #if[alwaysAtomic]
 @Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
 #else[alwaysAtomic]
-@Outcome(expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec")
+@Outcome(expect = Expect.ACCEPTABLE_INTERESTING, desc = "Non-atomic access detected, allowed by spec")
 @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
 #end[alwaysAtomic]
 @State
--- a/jcstress-test-gen/src/main/resources/accessAtomic/X-VarHandleDirectByteBufferViewAtomicityTest.java.template	Mon Mar 06 17:13:41 2017 +0100
+++ b/jcstress-test-gen/src/main/resources/accessAtomic/X-VarHandleDirectByteBufferViewAtomicityTest.java.template	Mon Mar 06 18:15:37 2017 +0100
@@ -43,7 +43,7 @@
 #if[alwaysAtomic]
 @Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
 #else[alwaysAtomic]
-@Outcome(expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec")
+@Outcome(expect = Expect.ACCEPTABLE_INTERESTING, desc = "Non-atomic access detected, allowed by spec")
 @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
 #end[alwaysAtomic]
 @State
--- a/jcstress-test-gen/src/main/resources/accessAtomic/X-VarHandleFieldAtomicityTest.java.template	Mon Mar 06 17:13:41 2017 +0100
+++ b/jcstress-test-gen/src/main/resources/accessAtomic/X-VarHandleFieldAtomicityTest.java.template	Mon Mar 06 18:15:37 2017 +0100
@@ -41,7 +41,7 @@
 #if[alwaysAtomic]
 @Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
 #else[alwaysAtomic]
-@Outcome(expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec")
+@Outcome(expect = Expect.ACCEPTABLE_INTERESTING, desc = "Non-atomic access detected, allowed by spec")
 @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
 #end[alwaysAtomic]
 @State
--- a/jcstress-test-gen/src/main/resources/accessAtomic/X-VarHandleHeapByteBufferViewAtomicityTest.java.template	Mon Mar 06 17:13:41 2017 +0100
+++ b/jcstress-test-gen/src/main/resources/accessAtomic/X-VarHandleHeapByteBufferViewAtomicityTest.java.template	Mon Mar 06 18:15:37 2017 +0100
@@ -43,7 +43,7 @@
 #if[alwaysAtomic]
 @Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
 #else[alwaysAtomic]
-@Outcome(expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec")
+@Outcome(expect = Expect.ACCEPTABLE_INTERESTING, desc = "Non-atomic access detected, allowed by spec")
 @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
 #end[alwaysAtomic]
 @State
--- a/jcstress-test-gen/src/main/resources/fences/X-LoadLoadFenceTest.java.template	Mon Mar 06 17:13:41 2017 +0100
+++ b/jcstress-test-gen/src/main/resources/fences/X-LoadLoadFenceTest.java.template	Mon Mar 06 18:15:37 2017 +0100
@@ -38,8 +38,8 @@
 #if[alwaysAtomic]
 @Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
 #else[alwaysAtomic]
-@Outcome(id = "$value0$, .*", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, when load x in actor2 before fullFence in actor1")
-@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, if r1 is half-value, load x must get a full-value")
+@Outcome(id = "$value0$, .*", expect = Expect.ACCEPTABLE_INTERESTING, desc = "Non-atomic access detected, allowed by spec, when load x in actor2 before fullFence in actor1")
+@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_INTERESTING, desc = "Non-atomic access detected, allowed by spec, if r1 is half-value, load x must get a full-value")
 @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
 #end[alwaysAtomic]
 @State
--- a/jcstress-test-gen/src/main/resources/fences/X-LoadStoreFenceTest1.java.template	Mon Mar 06 17:13:41 2017 +0100
+++ b/jcstress-test-gen/src/main/resources/fences/X-LoadStoreFenceTest1.java.template	Mon Mar 06 18:15:37 2017 +0100
@@ -38,7 +38,7 @@
 #if[alwaysAtomic]
 @Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
 #else[alwaysAtomic]
-@Outcome(id = ".*, $value0$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, r2 only can be assigned to 0.")
+@Outcome(id = ".*, $value0$", expect = Expect.ACCEPTABLE_INTERESTING, desc = "Non-atomic access detected, allowed by spec, r2 only can be assigned to 0.")
 @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
 #end[alwaysAtomic]
 @State
--- a/jcstress-test-gen/src/main/resources/fences/X-LoadStoreFenceTest2.java.template	Mon Mar 06 17:13:41 2017 +0100
+++ b/jcstress-test-gen/src/main/resources/fences/X-LoadStoreFenceTest2.java.template	Mon Mar 06 18:15:37 2017 +0100
@@ -38,7 +38,7 @@
 #if[alwaysAtomic]
 @Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
 #else[alwaysAtomic]
-@Outcome(id = ".*, $value0$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, r2 only can be assigned to 0.")
+@Outcome(id = ".*, $value0$", expect = Expect.ACCEPTABLE_INTERESTING, desc = "Non-atomic access detected, allowed by spec, r2 only can be assigned to 0.")
 @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
 #end[alwaysAtomic]
 @State
--- a/jcstress-test-gen/src/main/resources/fences/X-StoreLoadFenceTest.java.template	Mon Mar 06 17:13:41 2017 +0100
+++ b/jcstress-test-gen/src/main/resources/fences/X-StoreLoadFenceTest.java.template	Mon Mar 06 18:15:37 2017 +0100
@@ -40,8 +40,8 @@
 @Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
 #else[alwaysAtomic]
 //if r1 is half-value or value0, store var is submitted before fullFence in actor2, r2 must be full-value, vice versa.
-@Outcome(id = "$value1$, .*", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec.")
-@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec")
+@Outcome(id = "$value1$, .*", expect = Expect.ACCEPTABLE_INTERESTING, desc = "Non-atomic access detected, allowed by spec.")
+@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_INTERESTING, desc = "Non-atomic access detected, allowed by spec")
 @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
 #end[alwaysAtomic]
 @State
--- a/jcstress-test-gen/src/main/resources/fences/X-StoreStoreFenceTest1.java.template	Mon Mar 06 17:13:41 2017 +0100
+++ b/jcstress-test-gen/src/main/resources/fences/X-StoreStoreFenceTest1.java.template	Mon Mar 06 18:15:37 2017 +0100
@@ -39,8 +39,8 @@
 #if[alwaysAtomic]
 @Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
 #else[alwaysAtomic]
-@Outcome(id = "$value0$, .*", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, when load x in actor2 before storestore Fence in actor1")
-@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, if r1 is half-value, load x must get a full-value")
+@Outcome(id = "$value0$, .*", expect = Expect.ACCEPTABLE_INTERESTING, desc = "Non-atomic access detected, allowed by spec, when load x in actor2 before storestore Fence in actor1")
+@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_INTERESTING, desc = "Non-atomic access detected, allowed by spec, if r1 is half-value, load x must get a full-value")
 @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
 #end[alwaysAtomic]
 @State
--- a/jcstress-test-gen/src/main/resources/fences/X-StoreStoreFenceTest2.java.template	Mon Mar 06 17:13:41 2017 +0100
+++ b/jcstress-test-gen/src/main/resources/fences/X-StoreStoreFenceTest2.java.template	Mon Mar 06 18:15:37 2017 +0100
@@ -39,8 +39,8 @@
 #if[alwaysAtomic]
 @Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
 #else[alwaysAtomic]
-@Outcome(id = "$value0$, .*", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, when load var in actor2 before storestore Fence in actor1")
-@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, if r1 is half-value, load var must get a full-value")
+@Outcome(id = "$value0$, .*", expect = Expect.ACCEPTABLE_INTERESTING, desc = "Non-atomic access detected, allowed by spec, when load var in actor2 before storestore Fence in actor1")
+@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_INTERESTING, desc = "Non-atomic access detected, allowed by spec, if r1 is half-value, load var must get a full-value")
 @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
 #end[alwaysAtomic]
 @State
--- a/jcstress-test-gen/src/main/resources/init/X-FieldInitTest.java.template	Mon Mar 06 17:13:41 2017 +0100
+++ b/jcstress-test-gen/src/main/resources/init/X-FieldInitTest.java.template	Mon Mar 06 18:15:37 2017 +0100
@@ -40,7 +40,7 @@
 #if[alwaysAtomic]
 @Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
 #else[alwaysAtomic]
-@Outcome(expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec.")
+@Outcome(expect = Expect.ACCEPTABLE_INTERESTING, desc = "Non-atomic access detected, allowed by spec.")
 @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
 #end[alwaysAtomic]
 @State
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/buffers/GradeChar.java	Mon Mar 06 17:13:41 2017 +0100
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/buffers/GradeChar.java	Mon Mar 06 18:15:37 2017 +0100
@@ -32,7 +32,7 @@
 @Description("Tests if operations on buffers are atomic.")
 @Outcome(id = "97", expect = Expect.ACCEPTABLE,       desc = "Seeing the complete update.")
 @Outcome(id = "0",  expect = Expect.ACCEPTABLE,       desc = "Seeing the default value, this is valid under race.")
-@Outcome(             expect = Expect.ACCEPTABLE_SPEC,  desc = "All other cases are unexpected, but legal.")
+@Outcome(           expect = Expect.ACCEPTABLE_INTERESTING,  desc = "All other cases are unexpected, but legal.")
 @Ref("http://cs.oswego.edu/pipermail/concurrency-interest/2012-December/010390.html")
 @Ref("http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-December/013133.html")
 public class GradeChar {
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/buffers/GradeDouble.java	Mon Mar 06 17:13:41 2017 +0100
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/buffers/GradeDouble.java	Mon Mar 06 18:15:37 2017 +0100
@@ -32,7 +32,7 @@
 @Description("Tests if operations on buffers are atomic.")
 @Outcome(id = "-4616189618054758400",  expect = Expect.ACCEPTABLE,       desc = "Seeing the complete update.")
 @Outcome(id = "0",                     expect = Expect.ACCEPTABLE,       desc = "Seeing the default value, this is valid under race.")
-@Outcome(                                expect = Expect.ACCEPTABLE_SPEC,  desc = "All other cases are unexpected, but legal.")
+@Outcome(                              expect = Expect.ACCEPTABLE_INTERESTING,  desc = "All other cases are unexpected, but legal.")
 @Ref("http://cs.oswego.edu/pipermail/concurrency-interest/2012-December/010390.html")
 @Ref("http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-December/013133.html")
 public class GradeDouble {
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/buffers/GradeFloat.java	Mon Mar 06 17:13:41 2017 +0100
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/buffers/GradeFloat.java	Mon Mar 06 18:15:37 2017 +0100
@@ -32,7 +32,7 @@
 @Description("Tests if operations on buffers are atomic.")
 @Outcome(id = "-1082130432",  expect = Expect.ACCEPTABLE,       desc = "Seeing the complete update.")
 @Outcome(id = "0",            expect = Expect.ACCEPTABLE,       desc = "Seeing the default value, this is valid under race.")
-@Outcome(                       expect = Expect.ACCEPTABLE_SPEC,  desc = "All other cases are unexpected, but legal.")
+@Outcome(                     expect = Expect.ACCEPTABLE_INTERESTING,  desc = "All other cases are unexpected, but legal.")
 @Ref("http://cs.oswego.edu/pipermail/concurrency-interest/2012-December/010390.html")
 @Ref("http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-December/013133.html")
 public class GradeFloat {
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/buffers/GradeInt.java	Mon Mar 06 17:13:41 2017 +0100
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/buffers/GradeInt.java	Mon Mar 06 18:15:37 2017 +0100
@@ -32,7 +32,7 @@
 @Description("Tests if operations on buffers are atomic.")
 @Outcome(id = "-1", expect = Expect.ACCEPTABLE,       desc = "Seeing the complete update.")
 @Outcome(id = "0",  expect = Expect.ACCEPTABLE,       desc = "Seeing the default value, this is valid under race.")
-@Outcome(             expect = Expect.ACCEPTABLE_SPEC,  desc = "All other cases are unexpected, but legal.")
+@Outcome(           expect = Expect.ACCEPTABLE_INTERESTING,  desc = "All other cases are unexpected, but legal.")
 @Ref("http://cs.oswego.edu/pipermail/concurrency-interest/2012-December/010390.html")
 @Ref("http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-December/013133.html")
 public class GradeInt {
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/crosscache/ByteBufferIntAtomicityTest.java	Mon Mar 06 17:13:41 2017 +0100
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/crosscache/ByteBufferIntAtomicityTest.java	Mon Mar 06 18:15:37 2017 +0100
@@ -41,7 +41,7 @@
 @Description("Tests if ByteBuffer breaks the atomicity while doing cross cache-line reads/writes.")
 @Outcome(id = "0, 0, 0, 0",     expect = Expect.ACCEPTABLE,      desc = "Seeing the default value, this is a legal race.")
 @Outcome(id = "-1, -1, -1, -1", expect = Expect.ACCEPTABLE,      desc = "Seeing the full value, this is a legal behavior.")
-@Outcome(                       expect = Expect.ACCEPTABLE_SPEC, desc = "Seeing the full value, this is a legal behavior.")
+@Outcome(                       expect = Expect.ACCEPTABLE_INTERESTING, desc = "Seeing the full value, this is a legal behavior.")
 @Ref("http://cs.oswego.edu/pipermail/concurrency-interest/2012-December/010390.html")
 @Ref("http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-December/013133.html")
 @State
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/crosscache/DirectByteBufferIntAtomicityTest.java	Mon Mar 06 17:13:41 2017 +0100
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/crosscache/DirectByteBufferIntAtomicityTest.java	Mon Mar 06 18:15:37 2017 +0100
@@ -41,7 +41,7 @@
 @Description("Tests if ByteBuffer breaks the atomicity while doing cross cache-line reads/writes.")
 @Outcome(id = "0, 0, 0, 0",     expect = Expect.ACCEPTABLE,      desc = "Seeing the default value, this is a legal race.")
 @Outcome(id = "-1, -1, -1, -1", expect = Expect.ACCEPTABLE,      desc = "Seeing the full value, this is a legal behavior.")
-@Outcome(                       expect = Expect.ACCEPTABLE_SPEC, desc = "Seeing the full value, this is a legal behavior.")
+@Outcome(                       expect = Expect.ACCEPTABLE_INTERESTING, desc = "Seeing the full value, this is a legal behavior.")
 @Ref("http://cs.oswego.edu/pipermail/concurrency-interest/2012-December/010390.html")
 @Ref("http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-December/013133.html")
 @State
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/primitives/perbyte/DoubleAtomicityTest.java	Mon Mar 06 17:13:41 2017 +0100
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/primitives/perbyte/DoubleAtomicityTest.java	Mon Mar 06 18:15:37 2017 +0100
@@ -41,7 +41,7 @@
 @JCStressTest
 @Outcome(id = "0, 0, 0, 0, 0, 0, 0, 0",         expect = Expect.ACCEPTABLE, desc = "Default value for the field. Observers are allowed to see the default value for the field, because there is the data race between reader and writer.")
 @Outcome(id = "-1, -1, -1, -1, -1, -1, -1, -1", expect = Expect.ACCEPTABLE, desc = "The value set by the actor thread. Observer sees the complete update.")
-@Outcome(                                         expect = Expect.ACCEPTABLE_SPEC, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.")
+@Outcome(                                       expect = Expect.ACCEPTABLE_INTERESTING, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.")
 @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
 @State
 public class DoubleAtomicityTest {
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/primitives/perbyte/LongAtomicityTest.java	Mon Mar 06 17:13:41 2017 +0100
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/primitives/perbyte/LongAtomicityTest.java	Mon Mar 06 18:15:37 2017 +0100
@@ -41,7 +41,7 @@
 @JCStressTest
 @Outcome(id = "0, 0, 0, 0, 0, 0, 0, 0",         expect = Expect.ACCEPTABLE, desc = "Default value for the field. Observers are allowed to see the default value for the field, because there is the data race between reader and writer.")
 @Outcome(id = "-1, -1, -1, -1, -1, -1, -1, -1", expect = Expect.ACCEPTABLE, desc = "The value set by the actor thread. Observer sees the complete update.")
-@Outcome(                                         expect = Expect.ACCEPTABLE_SPEC, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.")
+@Outcome(                                       expect = Expect.ACCEPTABLE_INTERESTING, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.")
 @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
 @State
 public class LongAtomicityTest {
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/primitives/reflect/DoubleAtomicityTest.java	Mon Mar 06 17:13:41 2017 +0100
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/primitives/reflect/DoubleAtomicityTest.java	Mon Mar 06 18:15:37 2017 +0100
@@ -43,7 +43,7 @@
 @JCStressTest
 @Outcome(id = "0.0", expect = Expect.ACCEPTABLE, desc = "Default value for the field. Observers are allowed to see the default value for the field, because there is the data race between reader and writer.")
 @Outcome(id = "NaN", expect = Expect.ACCEPTABLE, desc = "The value set by the actor thread. Observer sees the complete update.")
-@Outcome(              expect = Expect.ACCEPTABLE_SPEC, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.")
+@Outcome(            expect = Expect.ACCEPTABLE_INTERESTING, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.")
 @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
 @State
 public class DoubleAtomicityTest {
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/primitives/reflect/LongAtomicityTest.java	Mon Mar 06 17:13:41 2017 +0100
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/primitives/reflect/LongAtomicityTest.java	Mon Mar 06 18:15:37 2017 +0100
@@ -43,7 +43,7 @@
 @JCStressTest
 @Outcome(id = "0",  expect = Expect.ACCEPTABLE, desc = "Default value for the field. Observers are allowed to see the default value for the field, because there is the data race between reader and writer.")
 @Outcome(id = "-1", expect = Expect.ACCEPTABLE, desc = "The value set by the actor thread. Observer sees the complete update.")
-@Outcome(             expect = Expect.ACCEPTABLE_SPEC, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.")
+@Outcome(           expect = Expect.ACCEPTABLE_INTERESTING, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.")
 @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
 @State
 public class LongAtomicityTest {
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/booleans/AtomicBooleanPairwiseTests.java	Mon Mar 06 17:13:41 2017 +0100
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/booleans/AtomicBooleanPairwiseTests.java	Mon Mar 06 18:15:37 2017 +0100
@@ -85,7 +85,7 @@
 
     @JCStressTest
     @JCStressMeta(Meta.class)
-    @Outcome(id = "0, 0", expect = Expect.ACCEPTABLE_SPEC, desc = "T1 and T2 both spuriously failed")
+    @Outcome(id = "0, 0", expect = Expect.ACCEPTABLE_INTERESTING, desc = "T1 and T2 both spuriously failed")
     public static class WCAS_WCAS {
         @Actor public void actor1(MyState s, IntResult2 r) { r.r1 = s.weakCompareAndSet(false, true) ? 1 : 0; }
         @Actor public void actor2(MyState s, IntResult2 r) { r.r2 = s.weakCompareAndSet(false, true) ? 1 : 0; }
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/integer/AtomicIntegerArrayPairwiseTests.java	Mon Mar 06 17:13:41 2017 +0100
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/integer/AtomicIntegerArrayPairwiseTests.java	Mon Mar 06 18:15:37 2017 +0100
@@ -542,7 +542,7 @@
     @JCStressMeta(G.class)
     @Outcome(id = "5, 10", expect = Expect.ACCEPTABLE, desc = "T1 -> T2 execution")
     @Outcome(id = "1, 20", expect = Expect.ACCEPTABLE, desc = "T2 -> T1 execution")
-    @Outcome(id = "1, 10", expect = Expect.ACCEPTABLE_SPEC, desc = "T1 and T2 both spuriously failed")
+    @Outcome(id = "1, 10", expect = Expect.ACCEPTABLE_INTERESTING, desc = "T1 and T2 both spuriously failed")
     public static class WCAS_WCAS {
         @Actor public void actor1(S s, IntResult2 r) { r.r1 = s.a.weakCompareAndSet(s.idx, 0, 5) ? 5 : 1; }
         @Actor public void actor2(S s, IntResult2 r) { r.r2 = s.a.weakCompareAndSet(s.idx, 0, 20) ? 20 : 10; }
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/integer/AtomicIntegerFieldUpdaterPairwiseTests.java	Mon Mar 06 17:13:41 2017 +0100
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/integer/AtomicIntegerFieldUpdaterPairwiseTests.java	Mon Mar 06 18:15:37 2017 +0100
@@ -540,7 +540,7 @@
     @JCStressMeta(G.class)
     @Outcome(id = "5, 10", expect = Expect.ACCEPTABLE, desc = "T1 -> T2 execution")
     @Outcome(id = "1, 20", expect = Expect.ACCEPTABLE, desc = "T2 -> T1 execution")
-    @Outcome(id = "1, 10", expect = Expect.ACCEPTABLE_SPEC, desc = "T1 and T2 both spuriously failed")
+    @Outcome(id = "1, 10", expect = Expect.ACCEPTABLE_INTERESTING, desc = "T1 and T2 both spuriously failed")
     public static class WCAS_WCAS {
         @Actor public void actor1(S s, IntResult2 r) { r.r1 = s.u.weakCompareAndSet(s, 0, 5) ? 5 : 1; }
         @Actor public void actor2(S s, IntResult2 r) { r.r2 = s.u.weakCompareAndSet(s, 0, 20) ? 20 : 10; }
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/integer/AtomicIntegerPairwiseTests.java	Mon Mar 06 17:13:41 2017 +0100
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/integer/AtomicIntegerPairwiseTests.java	Mon Mar 06 18:15:37 2017 +0100
@@ -538,7 +538,7 @@
     @JCStressMeta(G.class)
     @Outcome(id = "5, 10", expect = Expect.ACCEPTABLE, desc = "T1 -> T2 execution")
     @Outcome(id = "1, 20", expect = Expect.ACCEPTABLE, desc = "T2 -> T1 execution")
-    @Outcome(id = "1, 10", expect = Expect.ACCEPTABLE_SPEC, desc = "T1 and T2 both spuriously failed")
+    @Outcome(id = "1, 10", expect = Expect.ACCEPTABLE_INTERESTING, desc = "T1 and T2 both spuriously failed")
     public static class WCAS_WCAS {
         @Actor public void actor1(S s, IntResult2 r) { r.r1 = s.weakCompareAndSet(0, 5) ? 5 : 1; }
         @Actor public void actor2(S s, IntResult2 r) { r.r2 = s.weakCompareAndSet(0, 20) ? 20 : 10; }
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/longs/AtomicLongArrayPairwiseTests.java	Mon Mar 06 17:13:41 2017 +0100
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/longs/AtomicLongArrayPairwiseTests.java	Mon Mar 06 18:15:37 2017 +0100
@@ -542,7 +542,7 @@
     @JCStressMeta(G.class)
     @Outcome(id = "5, 10", expect = Expect.ACCEPTABLE, desc = "T1 -> T2 execution")
     @Outcome(id = "1, 20", expect = Expect.ACCEPTABLE, desc = "T2 -> T1 execution")
-    @Outcome(id = "1, 10", expect = Expect.ACCEPTABLE_SPEC, desc = "T1 and T2 both spuriously failed")
+    @Outcome(id = "1, 10", expect = Expect.ACCEPTABLE_INTERESTING, desc = "T1 and T2 both spuriously failed")
     public static class WCAS_WCAS {
         @Actor public void actor1(S s, LongResult2 r) { r.r1 = s.a.weakCompareAndSet(s.idx, 0, 5) ? 5 : 1; }
         @Actor public void actor2(S s, LongResult2 r) { r.r2 = s.a.weakCompareAndSet(s.idx, 0, 20) ? 20 : 10; }
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/longs/AtomicLongFieldUpdaterPairwiseTests.java	Mon Mar 06 17:13:41 2017 +0100
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/longs/AtomicLongFieldUpdaterPairwiseTests.java	Mon Mar 06 18:15:37 2017 +0100
@@ -540,7 +540,7 @@
     @JCStressMeta(G.class)
     @Outcome(id = "5, 10", expect = Expect.ACCEPTABLE, desc = "T1 -> T2 execution")
     @Outcome(id = "1, 20", expect = Expect.ACCEPTABLE, desc = "T2 -> T1 execution")
-    @Outcome(id = "1, 10", expect = Expect.ACCEPTABLE_SPEC, desc = "T1 and T2 both spuriously failed")
+    @Outcome(id = "1, 10", expect = Expect.ACCEPTABLE_INTERESTING, desc = "T1 and T2 both spuriously failed")
     public static class WCAS_WCAS {
         @Actor public void actor1(S s, LongResult2 r) { r.r1 = s.u.weakCompareAndSet(s, 0, 5) ? 5 : 1; }
         @Actor public void actor2(S s, LongResult2 r) { r.r2 = s.u.weakCompareAndSet(s, 0, 20) ? 20 : 10; }
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/longs/AtomicLongPairwiseTests.java	Mon Mar 06 17:13:41 2017 +0100
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/longs/AtomicLongPairwiseTests.java	Mon Mar 06 18:15:37 2017 +0100
@@ -539,7 +539,7 @@
     @JCStressMeta(G.class)
     @Outcome(id = "5, 10", expect = Expect.ACCEPTABLE, desc = "T1 -> T2 execution")
     @Outcome(id = "1, 20", expect = Expect.ACCEPTABLE, desc = "T2 -> T1 execution")
-    @Outcome(id = "1, 10", expect = Expect.ACCEPTABLE_SPEC, desc = "T1 and T2 both spuriously failed")
+    @Outcome(id = "1, 10", expect = Expect.ACCEPTABLE_INTERESTING, desc = "T1 and T2 both spuriously failed")
     public static class WCAS_WCAS {
         @Actor public void actor1(S s, LongResult2 r) { r.r1 = s.weakCompareAndSet(0, 5) ? 5 : 1; }
         @Actor public void actor2(S s, LongResult2 r) { r.r2 = s.weakCompareAndSet(0, 20) ? 20 : 10; }
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/init/Grading_DoubleCanSeeMost.java	Mon Mar 06 17:13:41 2017 +0100
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/init/Grading_DoubleCanSeeMost.java	Mon Mar 06 18:15:37 2017 +0100
@@ -32,7 +32,7 @@
 @Outcome(id = "0.0",  expect = Expect.ACCEPTABLE, desc = "Seeing the default value for field. The update to the field in the constructor is lost. This is a legal JMM behavior")
 @Outcome(id = "NaN",  expect = Expect.ACCEPTABLE, desc = "The value set by the actor thread. Observer sees the complete update.")
 @Outcome(id = "42.0", expect = Expect.ACCEPTABLE, desc = "The observer sees the empty shell. This is a legal JMM behavior, since there is a race between actor and observer.")
-@Outcome(               expect = Expect.ACCEPTABLE_SPEC, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.")
+@Outcome(             expect = Expect.ACCEPTABLE_INTERESTING, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.")
 @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
 public class Grading_DoubleCanSeeMost {
 }
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/init/Grading_DoubleShouldSeeFull.java	Mon Mar 06 17:13:41 2017 +0100
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/init/Grading_DoubleShouldSeeFull.java	Mon Mar 06 18:15:37 2017 +0100
@@ -30,7 +30,7 @@
 
 @Outcome(id = "NaN",  expect = Expect.ACCEPTABLE, desc = "The value set by the actor thread. Observer sees the complete update.")
 @Outcome(id = "42.0", expect = Expect.ACCEPTABLE, desc = "The observer sees the empty shell. This is a legal JMM behavior, since there is a race between actor and observer.")
-@Outcome(               expect = Expect.ACCEPTABLE_SPEC, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.")
+@Outcome(             expect = Expect.ACCEPTABLE_INTERESTING, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.")
 @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
 public class Grading_DoubleShouldSeeFull {
 }
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/init/Grading_LongCanSeeMost.java	Mon Mar 06 17:13:41 2017 +0100
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/init/Grading_LongCanSeeMost.java	Mon Mar 06 18:15:37 2017 +0100
@@ -32,7 +32,7 @@
 @Outcome(id = "0",  expect = Expect.ACCEPTABLE, desc = "Seeing the default value for field. The update to the field in the constructor is lost. This is a legal JMM behavior")
 @Outcome(id = "-1", expect = Expect.ACCEPTABLE, desc = "The value set by the actor thread. Observer sees the complete update.")
 @Outcome(id = "42", expect = Expect.ACCEPTABLE, desc = "The observer sees the empty shell. This is a legal JMM behavior, since there is a race between actor and observer.")
-@Outcome(             expect = Expect.ACCEPTABLE_SPEC, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.")
+@Outcome(           expect = Expect.ACCEPTABLE_INTERESTING, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.")
 @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
 public class Grading_LongCanSeeMost {
 }
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/init/Grading_LongShouldSeeFull.java	Mon Mar 06 17:13:41 2017 +0100
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/init/Grading_LongShouldSeeFull.java	Mon Mar 06 18:15:37 2017 +0100
@@ -31,7 +31,7 @@
 
 @Outcome(id = "-1", expect = Expect.ACCEPTABLE, desc = "The value set by the actor thread. Observer sees the complete update.")
 @Outcome(id = "42", expect = Expect.ACCEPTABLE, desc = "The observer sees the empty shell. This is a legal JMM behavior, since there is a race between actor and observer.")
-@Outcome(             expect = Expect.ACCEPTABLE_SPEC, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.")
+@Outcome(           expect = Expect.ACCEPTABLE_INTERESTING, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.")
 @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
 public class Grading_LongShouldSeeFull {
 }