# HG changeset patch # User Bernhard Urban # Date 1403879102 -7200 # Node ID a501d56c86565b7aad119c99d4895c305c391caa # Parent 11528f64d79d296d7120917df5ba7a045e6a1f3b truffle compiler: cut off assertion errors too diff -r 11528f64d79d -r a501d56c8656 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCacheImpl.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCacheImpl.java Fri Jun 27 14:04:51 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCacheImpl.java Fri Jun 27 16:25:02 2014 +0200 @@ -250,9 +250,11 @@ private boolean tryCutOffRuntimeExceptions(MethodCallTargetNode methodCallTargetNode) { if (methodCallTargetNode.targetMethod().isConstructor()) { ResolvedJavaType runtimeException = providers.getMetaAccess().lookupJavaType(RuntimeException.class); + ResolvedJavaType assertionError = providers.getMetaAccess().lookupJavaType(AssertionError.class); ResolvedJavaType controlFlowException = providers.getMetaAccess().lookupJavaType(ControlFlowException.class); ResolvedJavaType exceptionType = Objects.requireNonNull(StampTool.typeOrNull(methodCallTargetNode.receiver().stamp())); - if (runtimeException.isAssignableFrom(methodCallTargetNode.targetMethod().getDeclaringClass()) && !controlFlowException.isAssignableFrom(exceptionType)) { + ResolvedJavaType declaringClass = methodCallTargetNode.targetMethod().getDeclaringClass(); + if ((assertionError.isAssignableFrom(declaringClass) || runtimeException.isAssignableFrom(declaringClass)) && !controlFlowException.isAssignableFrom(exceptionType)) { DeoptimizeNode deoptNode = methodCallTargetNode.graph().add(new DeoptimizeNode(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.UnreachedCode)); FixedNode invokeNode = methodCallTargetNode.invoke().asNode(); invokeNode.replaceAtPredecessor(deoptNode);