# HG changeset patch # User Lukas Stadler # Date 1395133469 -3600 # Node ID 69dfb976fd2641d0f0c797805b4ebc9196a1489a # Parent a15776cb4e6cb90deed9c13606d5b39bf66fb53c clean state before merging iteration in PEA MergeProcessor diff -r a15776cb4e6c -r 69dfb976fd26 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/loop/LoopParseLong.java --- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/loop/LoopParseLong.java Tue Mar 18 10:01:08 2014 +0100 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/loop/LoopParseLong.java Tue Mar 18 10:04:29 2014 +0100 @@ -27,6 +27,25 @@ public class LoopParseLong extends JTTTest { + @SuppressWarnings("unused") + public static long testShortened(String s, int radix) throws NumberFormatException { + long result = 0; + boolean negative = false; + int len = s.length(); + char firstChar = s.charAt(0); + if (firstChar < '0') { + if (firstChar == '-') { + negative = true; + } else if (firstChar != '+') { + throw new NumberFormatException(); + } + if (len == 1) { + throw new NumberFormatException(); + } + } + return result; + } + public static long test(String s, int radix) throws NumberFormatException { if (s == null) { throw new NumberFormatException("null"); @@ -81,6 +100,8 @@ @LongTest public void run0() throws Throwable { + runTest("testShortened", "7", 10); + runTest("testShortened", "-100", 10); runTest("test", "7", 10); runTest("test", "-100", 10); } diff -r a15776cb4e6c -r 69dfb976fd26 graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java --- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java Tue Mar 18 10:01:08 2014 +0100 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java Tue Mar 18 10:04:29 2014 +0100 @@ -335,6 +335,13 @@ ObjectState[] objStates = new ObjectState[states.size()]; boolean materialized; do { + Iterator> iter = newState.objectStates.entrySet().iterator(); + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + if (!virtualObjTemp.contains(entry.getValue())) { + iter.remove(); + } + } mergeEffects.clear(); afterMergeEffects.clear(); materialized = false;