# HG changeset patch # User Doug Simon # Date 1415799444 -3600 # Node ID 4571c14bb4ef7470bdc1978b9459d4ee853693e8 # Parent ddd7829c45b115d07067b06ca48d2252e81f2fd7 fix short circuit for special classes and objects when retrieving object from a replay compilation context diff -r ddd7829c45b1 -r 4571c14bb4ef graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/remote/Context.java --- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/remote/Context.java Wed Nov 12 12:55:21 2014 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/remote/Context.java Wed Nov 12 14:37:24 2014 +0100 @@ -264,12 +264,7 @@ * In addition, copies in {@link #pool} are re-used. */ private Object copy(Object root) { - if (isAssignableTo(root.getClass(), DontCopyClasses)) { - return root; - } - if (SpecialStaticFields.containsKey(root)) { - return root; - } + assert !(isAssignableTo(root.getClass(), DontCopyClasses) || SpecialStaticFields.containsKey(root)); // System.out.printf("----- %s ------%n", s(obj)); assert pool.get(root) == null; Deque worklist = new IdentityLinkedList<>(); @@ -317,12 +312,17 @@ } return (T) proxy; } else { - Object value = pool.get(obj); - if (value == null) { - if (mode == Mode.Capturing) { - value = copy(obj); - } else { - throw new GraalInternalError("No captured state for %s", obj); + Object value; + if (isAssignableTo(obj.getClass(), DontCopyClasses) || SpecialStaticFields.containsKey(obj)) { + value = obj; + } else { + value = pool.get(obj); + if (value == null) { + if (mode == Mode.Capturing) { + value = copy(obj); + } else { + throw new GraalInternalError("No captured state for %s [class=%s]", obj, obj.getClass()); + } } } return (T) value;