Mercurial > hg > graal-compiler
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; } }