Mercurial > hg > truffle
changeset 5802:93f6ad9a0596
added null check for receiver of non-static invokes
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Tue, 10 Jul 2012 10:36:08 +0200 |
parents | a24d30822e4f |
children | 5d329d42dd73 |
files | graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/Invoke.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java graal/com.oracle.graal.snippets.test/src/com/oracle/graal/snippets/InvokeTest.java |
diffstat | 4 files changed, 22 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/Invoke.java Tue Jul 10 10:08:49 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/Invoke.java Tue Jul 10 10:36:08 2012 +0200 @@ -24,8 +24,9 @@ import com.oracle.graal.graph.*; import com.oracle.graal.nodes.java.*; +import com.oracle.graal.nodes.spi.*; -public interface Invoke extends StateSplit { +public interface Invoke extends StateSplit, Lowerable { FixedNode next();
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java Tue Jul 10 10:08:49 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java Tue Jul 10 10:36:08 2012 +0200 @@ -95,6 +95,15 @@ } @Override + public void lower(LoweringTool tool) { + NodeInputList<ValueNode> parameters = callTarget.arguments(); + ValueNode firstParam = parameters.size() <= 0 ? null : parameters.get(0); + if (!callTarget.isStatic() && firstParam.kind() == Kind.Object && !firstParam.objectStamp().nonNull()) { + dependencies().add(tool.createNullCheckGuard(firstParam, leafGraphId)); + } + } + + @Override public void generate(LIRGeneratorTool gen) { gen.emitInvoke(this); }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java Tue Jul 10 10:08:49 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java Tue Jul 10 10:36:08 2012 +0200 @@ -127,6 +127,15 @@ } @Override + public void lower(LoweringTool tool) { + NodeInputList<ValueNode> parameters = callTarget.arguments(); + ValueNode firstParam = parameters.size() <= 0 ? null : parameters.get(0); + if (!callTarget.isStatic() && firstParam.kind() == Kind.Object && !firstParam.objectStamp().nonNull()) { + dependencies().add(tool.createNullCheckGuard(firstParam, leafGraphId)); + } + } + + @Override public void generate(LIRGeneratorTool gen) { gen.emitInvoke(this); }
--- a/graal/com.oracle.graal.snippets.test/src/com/oracle/graal/snippets/InvokeTest.java Tue Jul 10 10:08:49 2012 +0200 +++ b/graal/com.oracle.graal.snippets.test/src/com/oracle/graal/snippets/InvokeTest.java Tue Jul 10 10:36:08 2012 +0200 @@ -93,7 +93,8 @@ } public static String invokevirtual2(A a, String s) { - return a.virtualMethod(s) + a.virtualMethod(s); + a.virtualMethod(s); + return a.virtualMethod(s); } public static String invokeinterface(I i, String s) {