changeset 22641:9ec55c0aa29b

Fix verification of return kind.
author Roland Schatz <roland.schatz@oracle.com>
date Wed, 16 Sep 2015 12:05:27 +0200
parents 6e7994809ab4
children 3345942ec7f3
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ReturnNode.java
diffstat 1 files changed, 18 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ReturnNode.java	Wed Sep 16 11:49:07 2015 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ReturnNode.java	Wed Sep 16 12:05:27 2015 +0200
@@ -22,13 +22,17 @@
  */
 package com.oracle.graal.nodes;
 
-import jdk.internal.jvmci.meta.*;
+import jdk.internal.jvmci.code.TargetDescription;
+import jdk.internal.jvmci.meta.JavaKind;
 
-import com.oracle.graal.compiler.common.type.*;
-import com.oracle.graal.graph.*;
-import com.oracle.graal.nodeinfo.*;
-import com.oracle.graal.nodes.memory.*;
-import com.oracle.graal.nodes.spi.*;
+import com.oracle.graal.compiler.common.type.StampFactory;
+import com.oracle.graal.graph.IterableNodeType;
+import com.oracle.graal.graph.NodeClass;
+import com.oracle.graal.nodeinfo.InputType;
+import com.oracle.graal.nodeinfo.NodeInfo;
+import com.oracle.graal.nodes.memory.MemoryMapNode;
+import com.oracle.graal.nodes.spi.LIRLowerable;
+import com.oracle.graal.nodes.spi.NodeLIRBuilderTool;
 
 @NodeInfo
 public final class ReturnNode extends ControlSinkNode implements LIRLowerable, IterableNodeType {
@@ -53,6 +57,7 @@
 
     @Override
     public void generate(NodeLIRBuilderTool gen) {
+        assert verifyReturn(gen.getLIRGeneratorTool().target());
         if (result == null) {
             gen.getLIRGeneratorTool().emitReturn(JavaKind.Void, null);
         } else {
@@ -69,13 +74,16 @@
         return memoryMap;
     }
 
-    @Override
-    public boolean verify() {
+    private boolean verifyReturn(TargetDescription target) {
         if (graph().method() != null) {
             JavaKind actual = result == null ? JavaKind.Void : result.getStackKind();
             JavaKind expected = graph().method().getSignature().getReturnKind().getStackKind();
-            assertTrue(actual == expected, "return kind doesn't match: actual " + actual + ", expected: " + expected);
+            if (actual == target.wordKind && expected == JavaKind.Object) {
+                // OK, we're compiling a snippet that returns a Word
+                return true;
+            }
+            assert actual == expected : "return kind doesn't match: actual " + actual + ", expected: " + expected;
         }
-        return super.verify();
+        return true;
     }
 }