changeset 22117:bb6e6bc3b773

ExceptionObject nodes are typed non-null, make sure thrown objects are also typed non-null
author Gilles Duboscq <gilles.m.duboscq@oracle.com>
date Sun, 28 Jun 2015 15:10:30 +0200
parents 1ca46ed9e31a
children 6b5221d7b5c1
files graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeParser.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnwindNode.java
diffstat 2 files changed, 5 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeParser.java	Mon Jun 29 16:45:09 2015 +0200
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeParser.java	Sun Jun 28 15:10:30 2015 +0200
@@ -1065,8 +1065,10 @@
         genInfoPointNode(InfopointReason.LINE_NUMBER, null);
 
         ValueNode exception = frameState.pop(Kind.Object);
-        append(new FixedGuardNode(graph.unique(new IsNullNode(exception)), NullCheckException, InvalidateReprofile, true));
-        lastInstr.setNext(handleException(exception, bci()));
+        FixedGuardNode nullCheck = append(new FixedGuardNode(graph.unique(new IsNullNode(exception)), NullCheckException, InvalidateReprofile, true));
+        PiNode nonNullException = graph.unique(new PiNode(exception, exception.stamp().join(objectNonNull())));
+        nonNullException.setGuard(nullCheck);
+        lastInstr.setNext(handleException(nonNullException, bci()));
     }
 
     protected ValueNode createCheckCast(ResolvedJavaType type, ValueNode object, JavaTypeProfile profileForTypeCheck, boolean forStoreCheck) {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnwindNode.java	Mon Jun 29 16:45:09 2015 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnwindNode.java	Sun Jun 28 15:10:30 2015 +0200
@@ -44,7 +44,7 @@
 
     public UnwindNode(ValueNode exception) {
         super(TYPE, StampFactory.forVoid());
-        assert exception == null || exception.getKind() == Kind.Object;
+        assert exception.getKind() == Kind.Object;
         this.exception = exception;
     }