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