import java.io.IOException; class Blort { private static void arrayCopyTest(int k) { // A local variable assigned from an argument int j = k; // These two locals are defined once and used multiple times String[] stringArray = new String[8]; Object[] objectArray = new Object[8]; // Should cause another move to be inserted Object anotherOne = objectArray; if (anotherOne != null) { System.out.println("foo"); } // "i" is used in a loop for (int i = 0; i < stringArray.length; i++) stringArray[i] = new String(Integer.toString(i)); System.out.println("string -> object"); System.arraycopy(stringArray, 0, objectArray, 0, stringArray.length); System.out.println("object -> string"); System.arraycopy(objectArray, 0, stringArray, 0, stringArray.length); System.out.println("object -> string (modified)"); objectArray[4] = new Object(); try { System.arraycopy(objectArray, 0, stringArray, 0,stringArray.length); } catch (ArrayStoreException ase) { // "ase" is an unused local which still must be preserved System.out.println("caught ArrayStoreException (expected)"); } } private void testConstructor() { Blort foo = null; try { foo = new Blort(); } catch (Exception ex) { } System.err.println(foo); } /** * Stolen from * java/android/org/apache/http/impl/io/AbstractMessageParser.java * Simplified. * * Checks to see that local variable assignment is preserved through * phi's. The key component here is the assignment of previous = current. */ public static void parseHeaderGroup( final Object headGroup, final Object inbuffer, int maxHeaderCount, int maxLineLen) throws IOException { StringBuilder current = null; StringBuilder previous = null; for (;;) { if (current == null) { current = new StringBuilder(64); } else { current.length(); } int l = inbuffer.hashCode(); if (l == -1 || current.length() < 1) { break; } if ((current.charAt(0) == ' ' || current.charAt(0) == '\t') && previous != null) { int i = 0; while (i < current.length()) { char ch = current.charAt(i); if (ch != ' ' && ch != '\t') { break; } i++; } if (maxLineLen > 0 && previous.length() + 1 + current.length() - i > maxLineLen) { throw new IOException("Maximum line length limit exceeded"); } previous.append(' '); previous.append(current, i, current.length() - i); } else { previous = current; current = null; } if (maxHeaderCount > 0) { throw new IOException("Maximum header count exceeded"); } } } }