changeset 22500:4b4d7e7706eb

added test that VM deoptimization handles debug info containing VirtualObjects
author Doug Simon <doug.simon@oracle.com>
date Mon, 24 Aug 2015 11:24:41 +0200
parents 0e912e7580f9
children d656166c77c7
files graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PartialEscapeAnalysisTest.java
diffstat 1 files changed, 31 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PartialEscapeAnalysisTest.java	Mon Aug 24 11:13:01 2015 +0200
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PartialEscapeAnalysisTest.java	Mon Aug 24 11:24:41 2015 +0200
@@ -26,6 +26,7 @@
 
 import org.junit.*;
 
+import com.oracle.graal.api.directives.*;
 import com.oracle.graal.compiler.test.*;
 import com.oracle.graal.graph.*;
 import com.oracle.graal.nodes.*;
@@ -210,6 +211,36 @@
         testPartialEscapeAnalysis("testBoxLoopSnippet", 0, 0, BoxNode.class, UnboxNode.class);
     }
 
+    static volatile int staticField;
+    static boolean executedDeoptimizeDirective;
+
+    static class A {
+        String field;
+    }
+
+    public static Object deoptWithVirtualObjectsSnippet() {
+        A a = new A();
+        a.field = "field";
+
+        staticField = 5;
+        if (staticField == 5) {
+            GraalDirectives.deoptimize();
+            executedDeoptimizeDirective = true;
+        }
+
+        return a.field;
+    }
+
+    /**
+     * Tests deoptimizing with virtual objects in debug info.
+     */
+    @Test
+    public void testDeoptWithVirtualObjects() {
+        assertFalse(executedDeoptimizeDirective);
+        test("deoptWithVirtualObjectsSnippet");
+        assertTrue(executedDeoptimizeDirective);
+    }
+
     @SafeVarargs
     protected final void testPartialEscapeAnalysis(String snippet, double expectedProbability, int expectedCount, Class<? extends Node>... invalidNodeClasses) {
         prepareGraph(snippet, false);