# HG changeset patch # User Gilles Duboscq # Date 1435497030 -7200 # Node ID bb6e6bc3b7739eabaa1be05759e0b41b3a11dc4e # Parent 1ca46ed9e31a12c6e2c277ef7cfce5c2e634e066 ExceptionObject nodes are typed non-null, make sure thrown objects are also typed non-null diff -r 1ca46ed9e31a -r bb6e6bc3b773 graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeParser.java --- 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) { diff -r 1ca46ed9e31a -r bb6e6bc3b773 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnwindNode.java --- 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; }