diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/008-exceptions/src/Main.java | 6 | ||||
| -rw-r--r-- | test/444-checker-nce/src/Main.java | 52 | ||||
| -rw-r--r-- | test/450-checker-types/src/Main.java | 211 | ||||
| -rw-r--r-- | test/477-checker-bound-type/src/Main.java | 8 | ||||
| -rw-r--r-- | test/530-checker-lse/src/Main.java | 12 | ||||
| -rw-r--r-- | test/540-checker-rtp-bug/src/Main.java | 8 | ||||
| -rw-r--r-- | test/549-checker-types-merge/src/Main.java | 22 | ||||
| -rw-r--r-- | test/552-checker-primitive-typeprop/info.txt | 2 | ||||
| -rw-r--r-- | test/552-checker-primitive-typeprop/smali/ArrayGet.smali | 245 | ||||
| -rw-r--r-- | test/552-checker-primitive-typeprop/smali/SsaBuilder.smali | 52 | ||||
| -rw-r--r-- | test/552-checker-primitive-typeprop/smali/TypePropagation.smali | 136 | ||||
| -rw-r--r-- | test/552-checker-primitive-typeprop/src/Main.java | 43 | ||||
| -rw-r--r-- | test/558-switch/expected.txt (renamed from test/552-checker-primitive-typeprop/expected.txt) | 0 | ||||
| -rw-r--r-- | test/558-switch/info.txt | 2 | ||||
| -rw-r--r-- | test/558-switch/src/Main.java | 35 | ||||
| -rw-r--r-- | test/Android.run-test.mk | 73 | ||||
| -rwxr-xr-x | test/run-test | 2 |
17 files changed, 191 insertions, 718 deletions
diff --git a/test/008-exceptions/src/Main.java b/test/008-exceptions/src/Main.java index 9e3477a47b..b8231f12bd 100644 --- a/test/008-exceptions/src/Main.java +++ b/test/008-exceptions/src/Main.java @@ -60,7 +60,7 @@ public class Main { } catch (NullPointerException npe) { System.out.print("Got an NPE: "); System.out.println(npe.getMessage()); - npe.printStackTrace(); + npe.printStackTrace(System.out); } } public static void main (String args[]) { @@ -103,7 +103,7 @@ public class Main { System.out.println(e.getCause()); } } catch (Exception error) { - error.printStackTrace(); + error.printStackTrace(System.out); } } @@ -126,7 +126,7 @@ public class Main { System.out.println(e.getCause()); } } catch (Exception error) { - error.printStackTrace(); + error.printStackTrace(System.out); } } } diff --git a/test/444-checker-nce/src/Main.java b/test/444-checker-nce/src/Main.java index 865355ce97..32122e4dcd 100644 --- a/test/444-checker-nce/src/Main.java +++ b/test/444-checker-nce/src/Main.java @@ -16,11 +16,11 @@ public class Main { - /// CHECK-START: Main Main.keepTest(Main) instruction_simplifier (before) + /// CHECK-START: Main Main.keepTest(Main) instruction_simplifier_after_types (before) /// CHECK: NullCheck /// CHECK: InvokeStaticOrDirect - /// CHECK-START: Main Main.keepTest(Main) instruction_simplifier (after) + /// CHECK-START: Main Main.keepTest(Main) instruction_simplifier_after_types (after) /// CHECK: NullCheck /// CHECK: InvokeStaticOrDirect public Main keepTest(Main m) { @@ -31,7 +31,7 @@ public class Main { /// CHECK: NullCheck /// CHECK: InvokeStaticOrDirect - /// CHECK-START: Main Main.thisTest() instruction_simplifier (after) + /// CHECK-START: Main Main.thisTest() instruction_simplifier_after_types (after) /// CHECK-NOT: NullCheck /// CHECK: InvokeStaticOrDirect public Main thisTest() { @@ -45,7 +45,7 @@ public class Main { /// CHECK: NullCheck /// CHECK: InvokeStaticOrDirect - /// CHECK-START: Main Main.newInstanceRemoveTest() instruction_simplifier (after) + /// CHECK-START: Main Main.newInstanceRemoveTest() instruction_simplifier_after_types (after) /// CHECK-NOT: NullCheck public Main newInstanceRemoveTest() { Main m = new Main(); @@ -57,7 +57,7 @@ public class Main { /// CHECK: NullCheck /// CHECK: ArrayGet - /// CHECK-START: Main Main.newArrayRemoveTest() instruction_simplifier (after) + /// CHECK-START: Main Main.newArrayRemoveTest() instruction_simplifier_after_types (after) /// CHECK: NewArray /// CHECK-NOT: NullCheck /// CHECK: ArrayGet @@ -66,11 +66,11 @@ public class Main { return ms[0]; } - /// CHECK-START: Main Main.ifRemoveTest(boolean) instruction_simplifier (before) + /// CHECK-START: Main Main.ifRemoveTest(boolean) instruction_simplifier_after_types (before) /// CHECK: NewInstance /// CHECK: NullCheck - /// CHECK-START: Main Main.ifRemoveTest(boolean) instruction_simplifier (after) + /// CHECK-START: Main Main.ifRemoveTest(boolean) instruction_simplifier_after_types (after) /// CHECK: NewInstance /// CHECK-NOT: NullCheck public Main ifRemoveTest(boolean flag) { @@ -83,11 +83,11 @@ public class Main { return m.g(); } - /// CHECK-START: Main Main.ifKeepTest(boolean) instruction_simplifier (before) + /// CHECK-START: Main Main.ifKeepTest(boolean) instruction_simplifier_after_types (before) /// CHECK: NewInstance /// CHECK: NullCheck - /// CHECK-START: Main Main.ifKeepTest(boolean) instruction_simplifier (after) + /// CHECK-START: Main Main.ifKeepTest(boolean) instruction_simplifier_after_types (after) /// CHECK: NewInstance /// CHECK: NullCheck public Main ifKeepTest(boolean flag) { @@ -98,10 +98,10 @@ public class Main { return m.g(); } - /// CHECK-START: Main Main.forRemoveTest(int) instruction_simplifier (before) + /// CHECK-START: Main Main.forRemoveTest(int) instruction_simplifier_after_types (before) /// CHECK: NullCheck - /// CHECK-START: Main Main.forRemoveTest(int) instruction_simplifier (after) + /// CHECK-START: Main Main.forRemoveTest(int) instruction_simplifier_after_types (after) /// CHECK-NOT: NullCheck public Main forRemoveTest(int count) { Main a = new Main(); @@ -114,10 +114,10 @@ public class Main { return m.g(); } - /// CHECK-START: Main Main.forKeepTest(int) instruction_simplifier (before) + /// CHECK-START: Main Main.forKeepTest(int) instruction_simplifier_after_types (before) /// CHECK: NullCheck - /// CHECK-START: Main Main.forKeepTest(int) instruction_simplifier (after) + /// CHECK-START: Main Main.forKeepTest(int) instruction_simplifier_after_types (after) /// CHECK: NullCheck public Main forKeepTest(int count) { Main a = new Main(); @@ -132,10 +132,10 @@ public class Main { return m.g(); } - /// CHECK-START: Main Main.phiFlowRemoveTest(int) instruction_simplifier (before) + /// CHECK-START: Main Main.phiFlowRemoveTest(int) instruction_simplifier_after_types (before) /// CHECK: NullCheck - /// CHECK-START: Main Main.phiFlowRemoveTest(int) instruction_simplifier (after) + /// CHECK-START: Main Main.phiFlowRemoveTest(int) instruction_simplifier_after_types (after) /// CHECK-NOT: NullCheck public Main phiFlowRemoveTest(int count) { Main a = new Main(); @@ -154,10 +154,10 @@ public class Main { return n.g(); } - /// CHECK-START: Main Main.phiFlowKeepTest(int) instruction_simplifier (before) + /// CHECK-START: Main Main.phiFlowKeepTest(int) instruction_simplifier_after_types (before) /// CHECK: NullCheck - /// CHECK-START: Main Main.phiFlowKeepTest(int) instruction_simplifier (after) + /// CHECK-START: Main Main.phiFlowKeepTest(int) instruction_simplifier_after_types (after) /// CHECK: NullCheck public Main phiFlowKeepTest(int count) { Main a = new Main(); @@ -181,7 +181,7 @@ public class Main { /// CHECK-START: Main Main.scopeRemoveTest(int, Main) ssa_builder (after) /// CHECK: NullCheck - /// CHECK-START: Main Main.scopeRemoveTest(int, Main) instruction_simplifier (after) + /// CHECK-START: Main Main.scopeRemoveTest(int, Main) instruction_simplifier_after_types (after) /// CHECK-NOT: NullCheck public Main scopeRemoveTest(int count, Main a) { Main m = null; @@ -196,10 +196,10 @@ public class Main { return m; } - /// CHECK-START: Main Main.scopeKeepTest(int, Main) instruction_simplifier (before) + /// CHECK-START: Main Main.scopeKeepTest(int, Main) instruction_simplifier_after_types (before) /// CHECK: NullCheck - /// CHECK-START: Main Main.scopeKeepTest(int, Main) instruction_simplifier (after) + /// CHECK-START: Main Main.scopeKeepTest(int, Main) instruction_simplifier_after_types (after) /// CHECK: NullCheck public Main scopeKeepTest(int count, Main a) { Main m = new Main(); @@ -214,10 +214,10 @@ public class Main { return m; } - /// CHECK-START: Main Main.scopeIfNotNullRemove(Main) instruction_simplifier (before) + /// CHECK-START: Main Main.scopeIfNotNullRemove(Main) instruction_simplifier_after_types (before) /// CHECK: NullCheck - /// CHECK-START: Main Main.scopeIfNotNullRemove(Main) instruction_simplifier (after) + /// CHECK-START: Main Main.scopeIfNotNullRemove(Main) instruction_simplifier_after_types (after) /// CHECK-NOT: NullCheck public Main scopeIfNotNullRemove(Main m) { if (m != null) { @@ -226,10 +226,10 @@ public class Main { return m; } - /// CHECK-START: Main Main.scopeIfKeep(Main) instruction_simplifier (before) + /// CHECK-START: Main Main.scopeIfKeep(Main) instruction_simplifier_after_types (before) /// CHECK: NullCheck - /// CHECK-START: Main Main.scopeIfKeep(Main) instruction_simplifier (after) + /// CHECK-START: Main Main.scopeIfKeep(Main) instruction_simplifier_after_types (after) /// CHECK: NullCheck public Main scopeIfKeep(Main m) { if (m == null) { @@ -258,11 +258,11 @@ public class Main { class ListElement { private ListElement next; - /// CHECK-START: boolean ListElement.isShorter(ListElement, ListElement) instruction_simplifier (before) + /// CHECK-START: boolean ListElement.isShorter(ListElement, ListElement) instruction_simplifier_after_types (before) /// CHECK: NullCheck /// CHECK: NullCheck - /// CHECK-START: boolean ListElement.isShorter(ListElement, ListElement) instruction_simplifier (after) + /// CHECK-START: boolean ListElement.isShorter(ListElement, ListElement) instruction_simplifier_after_types (after) /// CHECK-NOT: NullCheck static boolean isShorter(ListElement x, ListElement y) { ListElement xTail = x; diff --git a/test/450-checker-types/src/Main.java b/test/450-checker-types/src/Main.java index fd4dd5ecbf..f1f80caff0 100644 --- a/test/450-checker-types/src/Main.java +++ b/test/450-checker-types/src/Main.java @@ -72,49 +72,49 @@ final class FinalException extends Exception {} public class Main { - /// CHECK-START: void Main.testSimpleRemove() instruction_simplifier (before) + /// CHECK-START: void Main.testSimpleRemove() instruction_simplifier_after_types (before) /// CHECK: CheckCast - /// CHECK-START: void Main.testSimpleRemove() instruction_simplifier (after) + /// CHECK-START: void Main.testSimpleRemove() instruction_simplifier_after_types (after) /// CHECK-NOT: CheckCast public void testSimpleRemove() { Super s = new SubclassA(); ((SubclassA)s).$noinline$g(); } - /// CHECK-START: void Main.testSimpleKeep(Super) instruction_simplifier (before) + /// CHECK-START: void Main.testSimpleKeep(Super) instruction_simplifier_after_types (before) /// CHECK: CheckCast - /// CHECK-START: void Main.testSimpleKeep(Super) instruction_simplifier (after) + /// CHECK-START: void Main.testSimpleKeep(Super) instruction_simplifier_after_types (after) /// CHECK: CheckCast public void testSimpleKeep(Super s) { ((SubclassA)s).$noinline$f(); } - /// CHECK-START: java.lang.String Main.testClassRemove() instruction_simplifier (before) + /// CHECK-START: java.lang.String Main.testClassRemove() instruction_simplifier_after_types (before) /// CHECK: CheckCast - /// CHECK-START: java.lang.String Main.testClassRemove() instruction_simplifier (after) + /// CHECK-START: java.lang.String Main.testClassRemove() instruction_simplifier_after_types (after) /// CHECK-NOT: CheckCast public String testClassRemove() { Object s = SubclassA.class; return ((Class)s).getName(); } - /// CHECK-START: java.lang.String Main.testClassKeep() instruction_simplifier (before) + /// CHECK-START: java.lang.String Main.testClassKeep() instruction_simplifier_after_types (before) /// CHECK: CheckCast - /// CHECK-START: java.lang.String Main.testClassKeep() instruction_simplifier (after) + /// CHECK-START: java.lang.String Main.testClassKeep() instruction_simplifier_after_types (after) /// CHECK: CheckCast public String testClassKeep() { Object s = SubclassA.class; return ((SubclassA)s).$noinline$h(); } - /// CHECK-START: void Main.testIfRemove(int) instruction_simplifier (before) + /// CHECK-START: void Main.testIfRemove(int) instruction_simplifier_after_types (before) /// CHECK: CheckCast - /// CHECK-START: void Main.testIfRemove(int) instruction_simplifier (after) + /// CHECK-START: void Main.testIfRemove(int) instruction_simplifier_after_types (after) /// CHECK-NOT: CheckCast public void testIfRemove(int x) { Super s; @@ -126,10 +126,10 @@ public class Main { ((SubclassA)s).$noinline$g(); } - /// CHECK-START: void Main.testIfKeep(int) instruction_simplifier (before) + /// CHECK-START: void Main.testIfKeep(int) instruction_simplifier_after_types (before) /// CHECK: CheckCast - /// CHECK-START: void Main.testIfKeep(int) instruction_simplifier (after) + /// CHECK-START: void Main.testIfKeep(int) instruction_simplifier_after_types (after) /// CHECK: CheckCast public void testIfKeep(int x) { Super s; @@ -141,10 +141,10 @@ public class Main { ((SubclassA)s).$noinline$g(); } - /// CHECK-START: void Main.testForRemove(int) instruction_simplifier (before) + /// CHECK-START: void Main.testForRemove(int) instruction_simplifier_after_types (before) /// CHECK: CheckCast - /// CHECK-START: void Main.testForRemove(int) instruction_simplifier (after) + /// CHECK-START: void Main.testForRemove(int) instruction_simplifier_after_types (after) /// CHECK-NOT: CheckCast public void testForRemove(int x) { Super s = new SubclassA(); @@ -156,10 +156,10 @@ public class Main { ((SubclassA)s).$noinline$g(); } - /// CHECK-START: void Main.testForKeep(int) instruction_simplifier (before) + /// CHECK-START: void Main.testForKeep(int) instruction_simplifier_after_types (before) /// CHECK: CheckCast - /// CHECK-START: void Main.testForKeep(int) instruction_simplifier (after) + /// CHECK-START: void Main.testForKeep(int) instruction_simplifier_after_types (after) /// CHECK: CheckCast public void testForKeep(int x) { Super s = new SubclassA(); @@ -171,10 +171,10 @@ public class Main { ((SubclassC)s).$noinline$g(); } - /// CHECK-START: void Main.testPhiFromCall(int) instruction_simplifier (before) + /// CHECK-START: void Main.testPhiFromCall(int) instruction_simplifier_after_types (before) /// CHECK: CheckCast - /// CHECK-START: void Main.testPhiFromCall(int) instruction_simplifier (after) + /// CHECK-START: void Main.testPhiFromCall(int) instruction_simplifier_after_types (after) /// CHECK: CheckCast public void testPhiFromCall(int i) { Object x; @@ -186,12 +186,11 @@ public class Main { ((SubclassC)x).$noinline$g(); } - /// CHECK-START: void Main.testInstanceOf(java.lang.Object) instruction_simplifier (before) + /// CHECK-START: void Main.testInstanceOf(java.lang.Object) instruction_simplifier_after_types (before) /// CHECK: CheckCast /// CHECK: CheckCast - /// CHECK-NOT: CheckCast - /// CHECK-START: void Main.testInstanceOf(java.lang.Object) instruction_simplifier (after) + /// CHECK-START: void Main.testInstanceOf(java.lang.Object) instruction_simplifier_after_types (after) /// CHECK-NOT: CheckCast public void testInstanceOf(Object o) { if (o instanceof SubclassC) { @@ -202,101 +201,11 @@ public class Main { } } - public static boolean $inline$InstanceofSubclassB(Object o) { return o instanceof SubclassB; } - public static boolean $inline$InstanceofSubclassC(Object o) { return o instanceof SubclassC; } - - /// CHECK-START: void Main.testInstanceOf_NotInlined(java.lang.Object) ssa_builder (after) - /// CHECK-DAG: <<Cst0:i\d+>> IntConstant 0 - /// CHECK-DAG: <<Cst1:i\d+>> IntConstant 1 - /// CHECK-DAG: <<IOf1:z\d+>> InstanceOf - /// CHECK-DAG: NotEqual [<<IOf1>>,<<Cst1>>] - /// CHECK-DAG: <<IOf2:z\d+>> InstanceOf - /// CHECK-DAG: Equal [<<IOf2>>,<<Cst0>>] - - /// CHECK-START: void Main.testInstanceOf_NotInlined(java.lang.Object) instruction_simplifier (before) - /// CHECK: CheckCast - /// CHECK: CheckCast - /// CHECK-NOT: CheckCast - - /// CHECK-START: void Main.testInstanceOf_NotInlined(java.lang.Object) instruction_simplifier (after) - /// CHECK-NOT: CheckCast - public void testInstanceOf_NotInlined(Object o) { - if ((o instanceof SubclassC) == true) { - ((SubclassC)o).$noinline$g(); - } - if ((o instanceof SubclassB) != false) { - ((SubclassB)o).$noinline$g(); - } - } - - /// CHECK-START: void Main.testNotInstanceOf_NotInlined(java.lang.Object) ssa_builder (after) - /// CHECK-DAG: <<Cst0:i\d+>> IntConstant 0 - /// CHECK-DAG: <<Cst1:i\d+>> IntConstant 1 - /// CHECK-DAG: <<IOf1:z\d+>> InstanceOf - /// CHECK-DAG: Equal [<<IOf1>>,<<Cst1>>] - /// CHECK-DAG: <<IOf2:z\d+>> InstanceOf - /// CHECK-DAG: NotEqual [<<IOf2>>,<<Cst0>>] - - /// CHECK-START: void Main.testNotInstanceOf_NotInlined(java.lang.Object) instruction_simplifier (before) - /// CHECK: CheckCast - /// CHECK: CheckCast - /// CHECK-NOT: CheckCast - - /// CHECK-START: void Main.testNotInstanceOf_NotInlined(java.lang.Object) instruction_simplifier (after) - /// CHECK-NOT: CheckCast - public void testNotInstanceOf_NotInlined(Object o) { - if ((o instanceof SubclassC) != true) { - // Empty branch to flip the condition. - } else { - ((SubclassC)o).$noinline$g(); - } - if ((o instanceof SubclassB) == false) { - // Empty branch to flip the condition. - } else { - ((SubclassB)o).$noinline$g(); - } - } - - /// CHECK-START: void Main.testInstanceOf_Inlined(java.lang.Object) inliner (after) - /// CHECK-DAG: <<IOf:z\d+>> InstanceOf - /// CHECK-DAG: If [<<IOf>>] - - /// CHECK-START: void Main.testInstanceOf_Inlined(java.lang.Object) instruction_simplifier_after_bce (before) - /// CHECK: CheckCast - /// CHECK-NOT: CheckCast - - /// CHECK-START: void Main.testInstanceOf_Inlined(java.lang.Object) instruction_simplifier_after_bce (after) - /// CHECK-NOT: CheckCast - public void testInstanceOf_Inlined(Object o) { - if (!$inline$InstanceofSubclassC(o)) { - // Empty branch to flip the condition. - } else { - ((SubclassC)o).$noinline$g(); - } - } - - /// CHECK-START: void Main.testNotInstanceOf_Inlined(java.lang.Object) inliner (after) - /// CHECK-DAG: <<IOf:z\d+>> InstanceOf - /// CHECK-DAG: <<Not:z\d+>> BooleanNot [<<IOf>>] - /// CHECK-DAG: If [<<Not>>] - - /// CHECK-START: void Main.testNotInstanceOf_Inlined(java.lang.Object) instruction_simplifier_after_bce (before) - /// CHECK: CheckCast - /// CHECK-NOT: CheckCast - - /// CHECK-START: void Main.testNotInstanceOf_Inlined(java.lang.Object) instruction_simplifier_after_bce (after) - /// CHECK-NOT: CheckCast - public void testNotInstanceOf_Inlined(Object o) { - if ($inline$InstanceofSubclassC(o)) { - ((SubclassC)o).$noinline$g(); - } - } - - /// CHECK-START: void Main.testInstanceOfKeep(java.lang.Object) instruction_simplifier (before) + /// CHECK-START: void Main.testInstanceOfKeep(java.lang.Object) instruction_simplifier_after_types (before) /// CHECK: CheckCast /// CHECK: CheckCast - /// CHECK-START: void Main.testInstanceOfKeep(java.lang.Object) instruction_simplifier (after) + /// CHECK-START: void Main.testInstanceOfKeep(java.lang.Object) instruction_simplifier_after_types (after) /// CHECK: CheckCast /// CHECK: CheckCast public void testInstanceOfKeep(Object o) { @@ -308,11 +217,11 @@ public class Main { } } - /// CHECK-START: void Main.testInstanceOfNested(java.lang.Object) instruction_simplifier (before) + /// CHECK-START: void Main.testInstanceOfNested(java.lang.Object) instruction_simplifier_after_types (before) /// CHECK: CheckCast /// CHECK: CheckCast - /// CHECK-START: void Main.testInstanceOfNested(java.lang.Object) instruction_simplifier (after) + /// CHECK-START: void Main.testInstanceOfNested(java.lang.Object) instruction_simplifier_after_types (after) /// CHECK-NOT: CheckCast public void testInstanceOfNested(Object o) { if (o instanceof SubclassC) { @@ -324,10 +233,10 @@ public class Main { } } - /// CHECK-START: void Main.testInstanceOfWithPhi(int) instruction_simplifier (before) + /// CHECK-START: void Main.testInstanceOfWithPhi(int) instruction_simplifier_after_types (before) /// CHECK: CheckCast - /// CHECK-START: void Main.testInstanceOfWithPhi(int) instruction_simplifier (after) + /// CHECK-START: void Main.testInstanceOfWithPhi(int) instruction_simplifier_after_types (after) /// CHECK-NOT: CheckCast public void testInstanceOfWithPhi(int i) { Object o; @@ -342,10 +251,10 @@ public class Main { } } - /// CHECK-START: void Main.testInstanceOfInFor(int) instruction_simplifier (before) + /// CHECK-START: void Main.testInstanceOfInFor(int) instruction_simplifier_after_types (before) /// CHECK: CheckCast - /// CHECK-START: void Main.testInstanceOfInFor(int) instruction_simplifier (after) + /// CHECK-START: void Main.testInstanceOfInFor(int) instruction_simplifier_after_types (after) /// CHECK-NOT: CheckCast public void testInstanceOfInFor(int n) { Object o = new SubclassA(); @@ -359,10 +268,10 @@ public class Main { } } - /// CHECK-START: void Main.testInstanceOfSubclass() instruction_simplifier (before) + /// CHECK-START: void Main.testInstanceOfSubclass() instruction_simplifier_after_types (before) /// CHECK: CheckCast - /// CHECK-START: void Main.testInstanceOfSubclass() instruction_simplifier (after) + /// CHECK-START: void Main.testInstanceOfSubclass() instruction_simplifier_after_types (after) /// CHECK-NOT: CheckCast public void testInstanceOfSubclass() { Object o = new SubclassA(); @@ -371,10 +280,10 @@ public class Main { } } - /// CHECK-START: void Main.testInstanceOfWithPhiSubclass(int) instruction_simplifier (before) + /// CHECK-START: void Main.testInstanceOfWithPhiSubclass(int) instruction_simplifier_after_types (before) /// CHECK: CheckCast - /// CHECK-START: void Main.testInstanceOfWithPhiSubclass(int) instruction_simplifier (after) + /// CHECK-START: void Main.testInstanceOfWithPhiSubclass(int) instruction_simplifier_after_types (after) /// CHECK-NOT: CheckCast public void testInstanceOfWithPhiSubclass(int i) { Object o; @@ -389,10 +298,10 @@ public class Main { } } - /// CHECK-START: void Main.testInstanceOfWithPhiTop(int) instruction_simplifier (before) + /// CHECK-START: void Main.testInstanceOfWithPhiTop(int) instruction_simplifier_after_types (before) /// CHECK: CheckCast - /// CHECK-START: void Main.testInstanceOfWithPhiTop(int) instruction_simplifier (after) + /// CHECK-START: void Main.testInstanceOfWithPhiTop(int) instruction_simplifier_after_types (after) /// CHECK-NOT: CheckCast public void testInstanceOfWithPhiTop(int i) { Object o; @@ -407,10 +316,10 @@ public class Main { } } - /// CHECK-START: void Main.testInstanceOfSubclassInFor(int) instruction_simplifier (before) + /// CHECK-START: void Main.testInstanceOfSubclassInFor(int) instruction_simplifier_after_types (before) /// CHECK: CheckCast - /// CHECK-START: void Main.testInstanceOfSubclassInFor(int) instruction_simplifier (after) + /// CHECK-START: void Main.testInstanceOfSubclassInFor(int) instruction_simplifier_after_types (after) /// CHECK-NOT: CheckCast public void testInstanceOfSubclassInFor(int n) { Object o = new SubclassA(); @@ -424,10 +333,10 @@ public class Main { } } - /// CHECK-START: void Main.testInstanceOfTopInFor(int) instruction_simplifier (before) + /// CHECK-START: void Main.testInstanceOfTopInFor(int) instruction_simplifier_after_types (before) /// CHECK: CheckCast - /// CHECK-START: void Main.testInstanceOfTopInFor(int) instruction_simplifier (after) + /// CHECK-START: void Main.testInstanceOfTopInFor(int) instruction_simplifier_after_types (after) /// CHECK-NOT: CheckCast public void testInstanceOfTopInFor(int n) { Object o = new SubclassA(); @@ -452,10 +361,10 @@ public class Main { public SubclassA a = new SubclassA(); public static SubclassA b = new SubclassA(); - /// CHECK-START: void Main.testInstanceFieldGetSimpleRemove() instruction_simplifier (before) + /// CHECK-START: void Main.testInstanceFieldGetSimpleRemove() instruction_simplifier_after_types (before) /// CHECK: CheckCast - /// CHECK-START: void Main.testInstanceFieldGetSimpleRemove() instruction_simplifier (after) + /// CHECK-START: void Main.testInstanceFieldGetSimpleRemove() instruction_simplifier_after_types (after) /// CHECK-NOT: CheckCast public void testInstanceFieldGetSimpleRemove() { Main m = new Main(); @@ -463,10 +372,10 @@ public class Main { ((SubclassA)a).$noinline$g(); } - /// CHECK-START: void Main.testStaticFieldGetSimpleRemove() instruction_simplifier (before) + /// CHECK-START: void Main.testStaticFieldGetSimpleRemove() instruction_simplifier_after_types (before) /// CHECK: CheckCast - /// CHECK-START: void Main.testStaticFieldGetSimpleRemove() instruction_simplifier (after) + /// CHECK-START: void Main.testStaticFieldGetSimpleRemove() instruction_simplifier_after_types (after) /// CHECK-NOT: CheckCast public void testStaticFieldGetSimpleRemove() { Super b = Main.b; @@ -475,36 +384,36 @@ public class Main { public SubclassA $noinline$getSubclass() { throw new RuntimeException(); } - /// CHECK-START: void Main.testArraySimpleRemove() instruction_simplifier (before) + /// CHECK-START: void Main.testArraySimpleRemove() instruction_simplifier_after_types (before) /// CHECK: CheckCast - /// CHECK-START: void Main.testArraySimpleRemove() instruction_simplifier (after) + /// CHECK-START: void Main.testArraySimpleRemove() instruction_simplifier_after_types (after) /// CHECK-NOT: CheckCast public void testArraySimpleRemove() { Super[] b = new SubclassA[10]; SubclassA[] c = (SubclassA[])b; } - /// CHECK-START: void Main.testInvokeSimpleRemove() instruction_simplifier (before) + /// CHECK-START: void Main.testInvokeSimpleRemove() instruction_simplifier_after_types (before) /// CHECK: CheckCast - /// CHECK-START: void Main.testInvokeSimpleRemove() instruction_simplifier (after) + /// CHECK-START: void Main.testInvokeSimpleRemove() instruction_simplifier_after_types (after) /// CHECK-NOT: CheckCast public void testInvokeSimpleRemove() { Super b = $noinline$getSubclass(); ((SubclassA)b).$noinline$g(); } - /// CHECK-START: void Main.testArrayGetSimpleRemove() instruction_simplifier (before) + /// CHECK-START: void Main.testArrayGetSimpleRemove() instruction_simplifier_after_types (before) /// CHECK: CheckCast - /// CHECK-START: void Main.testArrayGetSimpleRemove() instruction_simplifier (after) + /// CHECK-START: void Main.testArrayGetSimpleRemove() instruction_simplifier_after_types (after) /// CHECK-NOT: CheckCast public void testArrayGetSimpleRemove() { Super[] a = new SubclassA[10]; ((SubclassA)a[0]).$noinline$g(); } - /// CHECK-START: int Main.testLoadExceptionInCatchNonExact(int, int) ssa_builder (after) + /// CHECK-START: int Main.testLoadExceptionInCatchNonExact(int, int) reference_type_propagation (after) /// CHECK: LoadException klass:java.lang.ArithmeticException can_be_null:false exact:false public int testLoadExceptionInCatchNonExact(int x, int y) { try { @@ -514,7 +423,7 @@ public class Main { } } - /// CHECK-START: int Main.testLoadExceptionInCatchExact(int) ssa_builder (after) + /// CHECK-START: int Main.testLoadExceptionInCatchExact(int) reference_type_propagation (after) /// CHECK: LoadException klass:FinalException can_be_null:false exact:true public int testLoadExceptionInCatchExact(int x) { try { @@ -528,7 +437,7 @@ public class Main { } } - /// CHECK-START: int Main.testLoadExceptionInCatchAll(int, int) ssa_builder (after) + /// CHECK-START: int Main.testLoadExceptionInCatchAll(int, int) reference_type_propagation (after) /// CHECK: LoadException klass:java.lang.Throwable can_be_null:false exact:false public int testLoadExceptionInCatchAll(int x, int y) { try { @@ -549,7 +458,7 @@ public class Main { return genericFinal.get(); } - /// CHECK-START: SubclassC Main.inlineGenerics() ssa_builder (after) + /// CHECK-START: SubclassC Main.inlineGenerics() reference_type_propagation (after) /// CHECK: <<Invoke:l\d+>> InvokeStaticOrDirect klass:SubclassC exact:false /// CHECK-NEXT: Return [<<Invoke>>] @@ -561,7 +470,7 @@ public class Main { return c; } - /// CHECK-START: Final Main.inlineGenericsFinal() ssa_builder (after) + /// CHECK-START: Final Main.inlineGenericsFinal() reference_type_propagation (after) /// CHECK: <<Invoke:l\d+>> InvokeStaticOrDirect klass:Final exact:true /// CHECK-NEXT: Return [<<Invoke>>] @@ -603,7 +512,7 @@ public class Main { return new SubclassA(); } - /// CHECK-START: void Main.updateNodesInTheSameBlockAsPhi(boolean) ssa_builder (after) + /// CHECK-START: void Main.updateNodesInTheSameBlockAsPhi(boolean) reference_type_propagation (after) /// CHECK: <<Phi:l\d+>> Phi klass:Super /// CHECK: NullCheck [<<Phi>>] klass:Super @@ -625,7 +534,7 @@ public class Main { /// CHECK: CheckCast [<<Param>>,<<Clazz>>] /// CHECK: BoundType [<<Param>>] can_be_null:true - /// CHECK-START: java.lang.String Main.checkcastPreserveNullCheck(java.lang.Object) instruction_simplifier (after) + /// CHECK-START: java.lang.String Main.checkcastPreserveNullCheck(java.lang.Object) instruction_simplifier_after_types (after) /// CHECK: <<This:l\d+>> ParameterValue /// CHECK: <<Param:l\d+>> ParameterValue /// CHECK: <<Clazz:l\d+>> LoadClass @@ -637,7 +546,7 @@ public class Main { } - /// CHECK-START: void Main.argumentCheck(Super, double, SubclassA, Final) ssa_builder (after) + /// CHECK-START: void Main.argumentCheck(Super, double, SubclassA, Final) reference_type_propagation (after) /// CHECK: ParameterValue klass:Main can_be_null:false exact:false /// CHECK: ParameterValue klass:Super can_be_null:true exact:false /// CHECK: ParameterValue @@ -653,7 +562,7 @@ public class Main { private int mainField = 0; - /// CHECK-START: SuperInterface Main.getWiderType(boolean, Interface, OtherInterface) ssa_builder (after) + /// CHECK-START: SuperInterface Main.getWiderType(boolean, Interface, OtherInterface) reference_type_propagation (after) /// CHECK: <<Phi:l\d+>> Phi klass:java.lang.Object /// CHECK: Return [<<Phi>>] private SuperInterface getWiderType(boolean cond, Interface a, OtherInterface b) { @@ -709,7 +618,7 @@ public class Main { getSuper(); } - /// CHECK-START: void Main.testLoopPhiWithNullFirstInput(boolean) ssa_builder (after) + /// CHECK-START: void Main.testLoopPhiWithNullFirstInput(boolean) reference_type_propagation (after) /// CHECK-DAG: <<Null:l\d+>> NullConstant /// CHECK-DAG: <<Main:l\d+>> NewInstance klass:Main exact:true /// CHECK-DAG: <<LoopPhi:l\d+>> Phi [<<Null>>,<<LoopPhi>>,<<Main>>] klass:Main exact:true @@ -722,7 +631,7 @@ public class Main { } } - /// CHECK-START: void Main.testLoopPhisWithNullAndCrossUses(boolean) ssa_builder (after) + /// CHECK-START: void Main.testLoopPhisWithNullAndCrossUses(boolean) reference_type_propagation (after) /// CHECK-DAG: <<Null:l\d+>> NullConstant /// CHECK-DAG: <<PhiA:l\d+>> Phi [<<Null>>,<<PhiB:l\d+>>,<<PhiA>>] klass:java.lang.Object exact:false /// CHECK-DAG: <<PhiB>> Phi [<<Null>>,<<PhiB>>,<<PhiA>>] klass:java.lang.Object exact:false @@ -738,7 +647,7 @@ public class Main { } } - /// CHECK-START: java.lang.Object[] Main.testInstructionsWithUntypedParent() ssa_builder (after) + /// CHECK-START: java.lang.Object[] Main.testInstructionsWithUntypedParent() reference_type_propagation (after) /// CHECK-DAG: <<Null:l\d+>> NullConstant /// CHECK-DAG: <<LoopPhi:l\d+>> Phi [<<Null>>,<<Phi:l\d+>>] klass:java.lang.Object[] exact:true /// CHECK-DAG: <<Array:l\d+>> NewArray klass:java.lang.Object[] exact:true diff --git a/test/477-checker-bound-type/src/Main.java b/test/477-checker-bound-type/src/Main.java index 0f65e44678..c873702408 100644 --- a/test/477-checker-bound-type/src/Main.java +++ b/test/477-checker-bound-type/src/Main.java @@ -17,7 +17,7 @@ public class Main { - /// CHECK-START: java.lang.Object Main.boundTypeForIf(java.lang.Object) ssa_builder (after) + /// CHECK-START: java.lang.Object Main.boundTypeForIf(java.lang.Object) reference_type_propagation (after) /// CHECK: BoundType public static Object boundTypeForIf(Object a) { if (a != null) { @@ -27,7 +27,7 @@ public class Main { } } - /// CHECK-START: java.lang.Object Main.boundTypeForInstanceOf(java.lang.Object) ssa_builder (after) + /// CHECK-START: java.lang.Object Main.boundTypeForInstanceOf(java.lang.Object) reference_type_propagation (after) /// CHECK: BoundType public static Object boundTypeForInstanceOf(Object a) { if (a instanceof Main) { @@ -37,7 +37,7 @@ public class Main { } } - /// CHECK-START: java.lang.Object Main.noBoundTypeForIf(java.lang.Object) ssa_builder (after) + /// CHECK-START: java.lang.Object Main.noBoundTypeForIf(java.lang.Object) reference_type_propagation (after) /// CHECK-NOT: BoundType public static Object noBoundTypeForIf(Object a) { if (a == null) { @@ -47,7 +47,7 @@ public class Main { } } - /// CHECK-START: java.lang.Object Main.noBoundTypeForInstanceOf(java.lang.Object) ssa_builder (after) + /// CHECK-START: java.lang.Object Main.noBoundTypeForInstanceOf(java.lang.Object) reference_type_propagation (after) /// CHECK-NOT: BoundType public static Object noBoundTypeForInstanceOf(Object a) { if (a instanceof Main) { diff --git a/test/530-checker-lse/src/Main.java b/test/530-checker-lse/src/Main.java index ced3e50d41..98251e4af3 100644 --- a/test/530-checker-lse/src/Main.java +++ b/test/530-checker-lse/src/Main.java @@ -453,14 +453,16 @@ public class Main { } /// CHECK-START: float Main.test19(float[], float[]) load_store_elimination (before) - /// CHECK: {{f\d+}} ArrayGet - /// CHECK: {{f\d+}} ArrayGet + /// CHECK: <<IntTypeValue:i\d+>> ArrayGet + /// CHECK: ArraySet + /// CHECK: <<FloatTypeValue:f\d+>> ArrayGet /// CHECK-START: float Main.test19(float[], float[]) load_store_elimination (after) - /// CHECK: {{f\d+}} ArrayGet - /// CHECK-NOT: {{f\d+}} ArrayGet + /// CHECK: <<IntTypeValue:i\d+>> ArrayGet + /// CHECK: ArraySet + /// CHECK: <<FloatTypeValue:f\d+>> ArrayGet - // I/F, J/D aliasing should not happen any more and LSE should eliminate the load. + // I/F, J/D aliasing should keep the load/store. static float test19(float[] fa1, float[] fa2) { fa1[0] = fa2[0]; return fa1[0]; diff --git a/test/540-checker-rtp-bug/src/Main.java b/test/540-checker-rtp-bug/src/Main.java index 9a9f0b6048..e9f16c04d9 100644 --- a/test/540-checker-rtp-bug/src/Main.java +++ b/test/540-checker-rtp-bug/src/Main.java @@ -21,14 +21,14 @@ final class Final { } public class Main { - /// CHECK-START: Final Main.testKeepCheckCast(java.lang.Object, boolean) ssa_builder (after) + /// CHECK-START: Final Main.testKeepCheckCast(java.lang.Object, boolean) reference_type_propagation (after) /// CHECK: <<Phi:l\d+>> Phi klass:java.lang.Object /// CHECK: <<Class:l\d+>> LoadClass /// CHECK: CheckCast [<<Phi>>,<<Class>>] /// CHECK: <<Ret:l\d+>> BoundType [<<Phi>>] klass:Final /// CHECK: Return [<<Ret>>] - /// CHECK-START: Final Main.testKeepCheckCast(java.lang.Object, boolean) instruction_simplifier (after) + /// CHECK-START: Final Main.testKeepCheckCast(java.lang.Object, boolean) instruction_simplifier_after_types (after) /// CHECK: <<Phi:l\d+>> Phi /// CHECK: <<Class:l\d+>> LoadClass /// CHECK: CheckCast [<<Phi>>,<<Class>>] @@ -43,7 +43,7 @@ public class Main { return (Final) x; } - /// CHECK-START: void Main.testKeepInstanceOf(java.lang.Object, boolean) ssa_builder (after) + /// CHECK-START: void Main.testKeepInstanceOf(java.lang.Object, boolean) reference_type_propagation (after) /// CHECK: <<Phi:l\d+>> Phi klass:java.lang.Object /// CHECK: <<Class:l\d+>> LoadClass /// CHECK: InstanceOf [<<Phi>>,<<Class>>] @@ -65,7 +65,7 @@ public class Main { } } - /// CHECK-START: java.lang.String Main.testNoInline(java.lang.Object, boolean) ssa_builder (after) + /// CHECK-START: java.lang.String Main.testNoInline(java.lang.Object, boolean) reference_type_propagation (after) /// CHECK: <<Phi:l\d+>> Phi klass:java.lang.Object /// CHECK: <<NC:l\d+>> NullCheck [<<Phi>>] /// CHECK: <<Ret:l\d+>> InvokeVirtual [<<NC>>] method_name:java.lang.Object.toString diff --git a/test/549-checker-types-merge/src/Main.java b/test/549-checker-types-merge/src/Main.java index 917073b1c9..dc27f10427 100644 --- a/test/549-checker-types-merge/src/Main.java +++ b/test/549-checker-types-merge/src/Main.java @@ -38,14 +38,14 @@ class ClassImplementsInterfaceA extends ClassSuper implements InterfaceA {} public class Main { - /// CHECK-START: java.lang.Object Main.testMergeNullContant(boolean) ssa_builder (after) + /// CHECK-START: java.lang.Object Main.testMergeNullContant(boolean) reference_type_propagation (after) /// CHECK: <<Phi:l\d+>> Phi klass:Main /// CHECK: Return [<<Phi>>] private Object testMergeNullContant(boolean cond) { return cond ? null : new Main(); } - /// CHECK-START: java.lang.Object Main.testMergeClasses(boolean, ClassExtendsA, ClassExtendsB) ssa_builder (after) + /// CHECK-START: java.lang.Object Main.testMergeClasses(boolean, ClassExtendsA, ClassExtendsB) reference_type_propagation (after) /// CHECK: <<Phi:l\d+>> Phi klass:ClassSuper /// CHECK: Return [<<Phi>>] private Object testMergeClasses(boolean cond, ClassExtendsA a, ClassExtendsB b) { @@ -53,7 +53,7 @@ public class Main { return cond ? a : b; } - /// CHECK-START: java.lang.Object Main.testMergeClasses(boolean, ClassExtendsA, ClassSuper) ssa_builder (after) + /// CHECK-START: java.lang.Object Main.testMergeClasses(boolean, ClassExtendsA, ClassSuper) reference_type_propagation (after) /// CHECK: <<Phi:l\d+>> Phi klass:ClassSuper /// CHECK: Return [<<Phi>>] private Object testMergeClasses(boolean cond, ClassExtendsA a, ClassSuper b) { @@ -61,7 +61,7 @@ public class Main { return cond ? a : b; } - /// CHECK-START: java.lang.Object Main.testMergeClasses(boolean, ClassSuper, ClassSuper) ssa_builder (after) + /// CHECK-START: java.lang.Object Main.testMergeClasses(boolean, ClassSuper, ClassSuper) reference_type_propagation (after) /// CHECK: <<Phi:l\d+>> Phi klass:ClassSuper /// CHECK: Return [<<Phi>>] private Object testMergeClasses(boolean cond, ClassSuper a, ClassSuper b) { @@ -69,7 +69,7 @@ public class Main { return cond ? a : b; } - /// CHECK-START: java.lang.Object Main.testMergeClasses(boolean, ClassOtherSuper, ClassSuper) ssa_builder (after) + /// CHECK-START: java.lang.Object Main.testMergeClasses(boolean, ClassOtherSuper, ClassSuper) reference_type_propagation (after) /// CHECK: <<Phi:l\d+>> Phi klass:java.lang.Object /// CHECK: Return [<<Phi>>] private Object testMergeClasses(boolean cond, ClassOtherSuper a, ClassSuper b) { @@ -77,7 +77,7 @@ public class Main { return cond ? a : b; } - /// CHECK-START: java.lang.Object Main.testMergeClassWithInterface(boolean, ClassImplementsInterfaceA, InterfaceSuper) ssa_builder (after) + /// CHECK-START: java.lang.Object Main.testMergeClassWithInterface(boolean, ClassImplementsInterfaceA, InterfaceSuper) reference_type_propagation (after) /// CHECK: <<Phi:l\d+>> Phi klass:InterfaceSuper /// CHECK: Return [<<Phi>>] private Object testMergeClassWithInterface(boolean cond, ClassImplementsInterfaceA a, InterfaceSuper b) { @@ -85,7 +85,7 @@ public class Main { return cond ? a : b; } - /// CHECK-START: java.lang.Object Main.testMergeClassWithInterface(boolean, ClassSuper, InterfaceSuper) ssa_builder (after) + /// CHECK-START: java.lang.Object Main.testMergeClassWithInterface(boolean, ClassSuper, InterfaceSuper) reference_type_propagation (after) /// CHECK: <<Phi:l\d+>> Phi klass:java.lang.Object /// CHECK: Return [<<Phi>>] private Object testMergeClassWithInterface(boolean cond, ClassSuper a, InterfaceSuper b) { @@ -93,7 +93,7 @@ public class Main { return cond ? a : b; } - /// CHECK-START: java.lang.Object Main.testMergeInterfaces(boolean, InterfaceExtendsA, InterfaceSuper) ssa_builder (after) + /// CHECK-START: java.lang.Object Main.testMergeInterfaces(boolean, InterfaceExtendsA, InterfaceSuper) reference_type_propagation (after) /// CHECK: <<Phi:l\d+>> Phi klass:InterfaceSuper /// CHECK: Return [<<Phi>>] private Object testMergeInterfaces(boolean cond, InterfaceExtendsA a, InterfaceSuper b) { @@ -101,7 +101,7 @@ public class Main { return cond ? a : b; } - /// CHECK-START: java.lang.Object Main.testMergeInterfaces(boolean, InterfaceSuper, InterfaceSuper) ssa_builder (after) + /// CHECK-START: java.lang.Object Main.testMergeInterfaces(boolean, InterfaceSuper, InterfaceSuper) reference_type_propagation (after) /// CHECK: <<Phi:l\d+>> Phi klass:InterfaceSuper /// CHECK: Return [<<Phi>>] private Object testMergeInterfaces(boolean cond, InterfaceSuper a, InterfaceSuper b) { @@ -109,7 +109,7 @@ public class Main { return cond ? a : b; } - /// CHECK-START: java.lang.Object Main.testMergeInterfaces(boolean, InterfaceExtendsA, InterfaceExtendsB) ssa_builder (after) + /// CHECK-START: java.lang.Object Main.testMergeInterfaces(boolean, InterfaceExtendsA, InterfaceExtendsB) reference_type_propagation (after) /// CHECK: <<Phi:l\d+>> Phi klass:java.lang.Object /// CHECK: Return [<<Phi>>] private Object testMergeInterfaces(boolean cond, InterfaceExtendsA a, InterfaceExtendsB b) { @@ -117,7 +117,7 @@ public class Main { return cond ? a : b; } - /// CHECK-START: java.lang.Object Main.testMergeInterfaces(boolean, InterfaceSuper, InterfaceOtherSuper) ssa_builder (after) + /// CHECK-START: java.lang.Object Main.testMergeInterfaces(boolean, InterfaceSuper, InterfaceOtherSuper) reference_type_propagation (after) /// CHECK: <<Phi:l\d+>> Phi klass:java.lang.Object /// CHECK: Return [<<Phi>>] private Object testMergeInterfaces(boolean cond, InterfaceSuper a, InterfaceOtherSuper b) { diff --git a/test/552-checker-primitive-typeprop/info.txt b/test/552-checker-primitive-typeprop/info.txt deleted file mode 100644 index 9d69056915..0000000000 --- a/test/552-checker-primitive-typeprop/info.txt +++ /dev/null @@ -1,2 +0,0 @@ -Test that phis with environment uses which can be properly typed are kept -in --debuggable mode.
\ No newline at end of file diff --git a/test/552-checker-primitive-typeprop/smali/ArrayGet.smali b/test/552-checker-primitive-typeprop/smali/ArrayGet.smali deleted file mode 100644 index 042fa0c80c..0000000000 --- a/test/552-checker-primitive-typeprop/smali/ArrayGet.smali +++ /dev/null @@ -1,245 +0,0 @@ -# Copyright (C) 2015 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -.class public LArrayGet; -.super Ljava/lang/Object; - - -# Test phi with fixed-type ArrayGet as an input and a matching second input. -# The phi should be typed accordingly. - -## CHECK-START: void ArrayGet.matchingFixedType(float[], float) ssa_builder (after) -## CHECK-NOT: Phi - -## CHECK-START-DEBUGGABLE: void ArrayGet.matchingFixedType(float[], float) ssa_builder (after) -## CHECK-DAG: <<Arg1:f\d+>> ParameterValue -## CHECK-DAG: <<Aget:f\d+>> ArrayGet -## CHECK-DAG: {{f\d+}} Phi [<<Aget>>,<<Arg1>>] reg:0 -.method public static matchingFixedType([FF)V - .registers 8 - - const v0, 0x0 - const v1, 0x1 - - aget v0, p0, v0 # read value - add-float v2, v0, v1 # float use fixes type - - float-to-int v2, p1 - if-eqz v2, :after - move v0, p1 - :after - # v0 = Phi [ArrayGet, Arg1] => float - - invoke-static {}, Ljava/lang/System;->nanoTime()J # create an env use - return-void -.end method - - -# Test phi with fixed-type ArrayGet as an input and a conflicting second input. -# The phi should be eliminated due to the conflict. - -## CHECK-START: void ArrayGet.conflictingFixedType(float[], int) ssa_builder (after) -## CHECK-NOT: Phi - -## CHECK-START-DEBUGGABLE: void ArrayGet.conflictingFixedType(float[], int) ssa_builder (after) -## CHECK-NOT: Phi -.method public static conflictingFixedType([FI)V - .registers 8 - - const v0, 0x0 - const v1, 0x1 - - aget v0, p0, v0 # read value - add-float v2, v0, v1 # float use fixes type - - if-eqz p1, :after - move v0, p1 - :after - # v0 = Phi [ArrayGet, Arg1] => conflict - - invoke-static {}, Ljava/lang/System;->nanoTime()J # create an env use - return-void -.end method - - -# Same test as the one above, only this time tests that type of ArrayGet is not -# changed. - -## CHECK-START: void ArrayGet.conflictingFixedType2(int[], float) ssa_builder (after) -## CHECK-NOT: Phi - -## CHECK-START-DEBUGGABLE: void ArrayGet.conflictingFixedType2(int[], float) ssa_builder (after) -## CHECK-NOT: Phi - -## CHECK-START-DEBUGGABLE: void ArrayGet.conflictingFixedType2(int[], float) ssa_builder (after) -## CHECK: {{i\d+}} ArrayGet -.method public static conflictingFixedType2([IF)V - .registers 8 - - const v0, 0x0 - const v1, 0x1 - - aget v0, p0, v0 # read value - add-int v2, v0, v1 # int use fixes type - - float-to-int v2, p1 - if-eqz v2, :after - move v0, p1 - :after - # v0 = Phi [ArrayGet, Arg1] => conflict - - invoke-static {}, Ljava/lang/System;->nanoTime()J # create an env use - return-void -.end method - - -# Test phi with free-type ArrayGet as an input and a matching second input. -# The phi should be typed accordingly. - -## CHECK-START: void ArrayGet.matchingFreeType(float[], float) ssa_builder (after) -## CHECK-NOT: Phi - -## CHECK-START-DEBUGGABLE: void ArrayGet.matchingFreeType(float[], float) ssa_builder (after) -## CHECK-DAG: <<Arg1:f\d+>> ParameterValue -## CHECK-DAG: <<Aget:f\d+>> ArrayGet -## CHECK-DAG: ArraySet [{{l\d+}},{{i\d+}},<<Aget>>] -## CHECK-DAG: {{f\d+}} Phi [<<Aget>>,<<Arg1>>] reg:0 -.method public static matchingFreeType([FF)V - .registers 8 - - const v0, 0x0 - const v1, 0x1 - - aget v0, p0, v0 # read value, should be float but has no typed use - aput v0, p0, v1 # aput does not disambiguate the type - - float-to-int v2, p1 - if-eqz v2, :after - move v0, p1 - :after - # v0 = Phi [ArrayGet, Arg1] => float - - invoke-static {}, Ljava/lang/System;->nanoTime()J # create an env use - return-void -.end method - - -# Test phi with free-type ArrayGet as an input and a conflicting second input. -# The phi will be kept and typed according to the second input despite the -# conflict. - -## CHECK-START: void ArrayGet.conflictingFreeType(int[], float) ssa_builder (after) -## CHECK-NOT: Phi - -## CHECK-START-DEBUGGABLE: void ArrayGet.conflictingFreeType(int[], float) ssa_builder (after) -## CHECK-NOT: Phi - -.method public static conflictingFreeType([IF)V - .registers 8 - - const v0, 0x0 - const v1, 0x1 - - aget v0, p0, v0 # read value, should be int but has no typed use - aput v0, p0, v1 - - float-to-int v2, p1 - if-eqz v2, :after - move v0, p1 - :after - # v0 = Phi [ArrayGet, Arg1] => float - - invoke-static {}, Ljava/lang/System;->nanoTime()J # create an env use - return-void -.end method - - -# Test that real use of ArrayGet is propagated through phis. The following test -# case uses ArrayGet indirectly through two phis. It also creates an unused -# conflicting phi which should not be preserved. - -## CHECK-START: void ArrayGet.conflictingPhiUses(int[], float, boolean, boolean, boolean) ssa_builder (after) -## CHECK: InvokeStaticOrDirect env:[[{{i\d+}},{{i\d+}},_,{{i\d+}},{{.*}} - -.method public static conflictingPhiUses([IFZZZ)V - .registers 10 - - const v0, 0x0 - - # Create v1 = Phi [0x0, int ArrayGet] - move v1, v0 - if-eqz p2, :else1 - aget v1, p0, v0 - :else1 - - # Create v2 = Phi [v1, float] - move v2, v1 - if-eqz p3, :else2 - move v2, p1 - :else2 - - # Create v3 = Phi [v1, int] - move v3, v1 - if-eqz p4, :else3 - move v3, v0 - :else3 - - # Use v3 as int. - add-int/lit8 v4, v3, 0x2a - - # Create env uses. - invoke-static {}, Ljava/lang/System;->nanoTime()J - - return-void -.end method - -# Test that the right ArrayGet equivalent is always selected. The following test -# case uses ArrayGet as float through one phi and as an indeterminate type through -# another. The situation needs to be resolved so that only one instruction -# remains. - -## CHECK-START: void ArrayGet.typedVsUntypedPhiUse(float[], float, boolean, boolean) ssa_builder (after) -## CHECK: {{f\d+}} ArrayGet - -## CHECK-START: void ArrayGet.typedVsUntypedPhiUse(float[], float, boolean, boolean) ssa_builder (after) -## CHECK-NOT: {{i\d+}} ArrayGet - -.method public static typedVsUntypedPhiUse([FFZZ)V - .registers 10 - - const v0, 0x0 - - # v1 = float ArrayGet - aget v1, p0, v0 - - # Create v2 = Phi [v1, 0.0f] - move v2, v1 - if-eqz p2, :else1 - move v2, v0 - :else1 - - # Use v2 as float - cmpl-float v2, v2, p1 - - # Create v3 = Phi [v1, 0.0f] - move v3, v1 - if-eqz p3, :else2 - move v3, v0 - :else2 - - # Use v3 without a determinate type. - aput v3, p0, v0 - - return-void -.end method diff --git a/test/552-checker-primitive-typeprop/smali/SsaBuilder.smali b/test/552-checker-primitive-typeprop/smali/SsaBuilder.smali deleted file mode 100644 index 395feaaf61..0000000000 --- a/test/552-checker-primitive-typeprop/smali/SsaBuilder.smali +++ /dev/null @@ -1,52 +0,0 @@ -# Copyright (C) 2015 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -.class public LSsaBuilder; -.super Ljava/lang/Object; - -# Check that a dead phi with a live equivalent is replaced in an environment. The -# following test case throws an exception and uses v0 afterwards. However, v0 -# contains a phi that is interpreted as int for the environment, and as float for -# instruction use. SsaBuilder must substitute the int variant before removing it, -# otherwise running the code with an array short enough to throw will crash at -# runtime because v0 is undefined. - -## CHECK-START: int SsaBuilder.environmentPhi(boolean, int[]) ssa_builder (after) -## CHECK-DAG: <<Cst0:f\d+>> FloatConstant 0 -## CHECK-DAG: <<Cst2:f\d+>> FloatConstant 2 -## CHECK-DAG: <<Phi:f\d+>> Phi [<<Cst0>>,<<Cst2>>] -## CHECK-DAG: BoundsCheck env:[[<<Phi>>,{{i\d+}},{{z\d+}},{{l\d+}}]] - -.method public static environmentPhi(Z[I)I - .registers 4 - - const v0, 0x0 - if-eqz p0, :else - const v0, 0x40000000 - :else - # v0 = phi that can be both int and float - - :try_start - const v1, 0x3 - aput v1, p1, v1 - const v0, 0x1 # generate catch phi for v0 - const v1, 0x4 - aput v1, p1, v1 - :try_end - .catchall {:try_start .. :try_end} :use_as_float - - :use_as_float - float-to-int v0, v0 - return v0 -.end method
\ No newline at end of file diff --git a/test/552-checker-primitive-typeprop/smali/TypePropagation.smali b/test/552-checker-primitive-typeprop/smali/TypePropagation.smali deleted file mode 100644 index 58682a1923..0000000000 --- a/test/552-checker-primitive-typeprop/smali/TypePropagation.smali +++ /dev/null @@ -1,136 +0,0 @@ -# Copyright (C) 2015 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -.class public LTypePropagation; -.super Ljava/lang/Object; - -## CHECK-START-DEBUGGABLE: void TypePropagation.mergeDeadPhi(boolean, boolean, int, float, float) ssa_builder (after) -## CHECK-NOT: Phi -.method public static mergeDeadPhi(ZZIFF)V - .registers 8 - - if-eqz p0, :after1 - move p2, p3 - :after1 - # p2 = merge(int,float) = conflict - - if-eqz p1, :after2 - move p2, p4 - :after2 - # p2 = merge(conflict,float) = conflict - - invoke-static {}, Ljava/lang/System;->nanoTime()J # create an env use - return-void -.end method - -## CHECK-START-DEBUGGABLE: void TypePropagation.mergeSameType(boolean, int, int) ssa_builder (after) -## CHECK: {{i\d+}} Phi -## CHECK-NOT: Phi -.method public static mergeSameType(ZII)V - .registers 8 - if-eqz p0, :after - move p1, p2 - :after - # p1 = merge(int,int) = int - invoke-static {}, Ljava/lang/System;->nanoTime()J # create an env use - return-void -.end method - -## CHECK-START-DEBUGGABLE: void TypePropagation.mergeVoidInput(boolean, boolean, int, int) ssa_builder (after) -## CHECK: {{i\d+}} Phi -## CHECK: {{i\d+}} Phi -## CHECK-NOT: Phi -.method public static mergeVoidInput(ZZII)V - .registers 8 - :loop - # p2 = void (loop phi) => p2 = merge(int,int) = int - if-eqz p0, :after - move p2, p3 - :after - # p2 = merge(void,int) = int - if-eqz p1, :loop - invoke-static {}, Ljava/lang/System;->nanoTime()J # create an env use - return-void -.end method - -## CHECK-START-DEBUGGABLE: void TypePropagation.mergeDifferentSize(boolean, int, long) ssa_builder (after) -## CHECK-NOT: Phi -.method public static mergeDifferentSize(ZIJ)V - .registers 8 - if-eqz p0, :after - move-wide p1, p2 - :after - # p1 = merge(int,long) = conflict - invoke-static {}, Ljava/lang/System;->nanoTime()J # create an env use - return-void -.end method - -## CHECK-START-DEBUGGABLE: void TypePropagation.mergeRefFloat(boolean, float, java.lang.Object) ssa_builder (after) -## CHECK-NOT: Phi -.method public static mergeRefFloat(ZFLjava/lang/Object;)V - .registers 8 - if-eqz p0, :after - move-object p1, p2 - :after - # p1 = merge(float,reference) = conflict - invoke-static {}, Ljava/lang/System;->nanoTime()J # create an env use - return-void -.end method - -## CHECK-START-DEBUGGABLE: void TypePropagation.mergeIntFloat_Success(boolean, float) ssa_builder (after) -## CHECK: {{f\d+}} Phi -## CHECK-NOT: Phi -.method public static mergeIntFloat_Success(ZF)V - .registers 8 - if-eqz p0, :after - const/4 p1, 0x0 - :after - # p1 = merge(float,0x0) = float - invoke-static {}, Ljava/lang/System;->nanoTime()J # create an env use - return-void -.end method - -## CHECK-START-DEBUGGABLE: void TypePropagation.mergeIntFloat_Fail(boolean, int, float) ssa_builder (after) -## CHECK-NOT: Phi -.method public static mergeIntFloat_Fail(ZIF)V - .registers 8 - if-eqz p0, :after - move p1, p2 - :after - # p1 = merge(int,float) = conflict - invoke-static {}, Ljava/lang/System;->nanoTime()J # create an env use - return-void -.end method - -## CHECK-START-DEBUGGABLE: void TypePropagation.updateAllUsersOnConflict(boolean, boolean, int, float, int) ssa_builder (after) -## CHECK-NOT: Phi -.method public static updateAllUsersOnConflict(ZZIFI)V - .registers 8 - - :loop1 - # loop phis for all args - # p2 = merge(int,float) = float? => conflict - move p2, p3 - if-eqz p0, :loop1 - - :loop2 - # loop phis for all args - # requests float equivalent of p4 phi in loop1 => conflict - # propagates conflict to loop2's phis - move p2, p4 - if-eqz p1, :loop2 - - invoke-static {}, Ljava/lang/System;->nanoTime()J # create an env use - return-void -.end method diff --git a/test/552-checker-primitive-typeprop/src/Main.java b/test/552-checker-primitive-typeprop/src/Main.java deleted file mode 100644 index fe2343e48a..0000000000 --- a/test/552-checker-primitive-typeprop/src/Main.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2015 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import java.lang.reflect.Method; - -public class Main { - - // Workaround for b/18051191. - class InnerClass {} - - private static void assertEquals(int expected, int actual) { - if (expected != actual) { - throw new Error("Wrong result, expected=" + expected + ", actual=" + actual); - } - } - - public static void main(String[] args) throws Exception { - Class<?> c = Class.forName("SsaBuilder"); - Method m = c.getMethod("environmentPhi", new Class[] { boolean.class, int[].class }); - - int[] array = new int[3]; - int result; - - result = (Integer) m.invoke(null, new Object[] { true, array } ); - assertEquals(2, result); - - result = (Integer) m.invoke(null, new Object[] { false, array } ); - assertEquals(0, result); - } -} diff --git a/test/552-checker-primitive-typeprop/expected.txt b/test/558-switch/expected.txt index e69de29bb2..e69de29bb2 100644 --- a/test/552-checker-primitive-typeprop/expected.txt +++ b/test/558-switch/expected.txt diff --git a/test/558-switch/info.txt b/test/558-switch/info.txt new file mode 100644 index 0000000000..07283ffcd9 --- /dev/null +++ b/test/558-switch/info.txt @@ -0,0 +1,2 @@ +Regression test for optimizing that used to generate invalid +code for arm. diff --git a/test/558-switch/src/Main.java b/test/558-switch/src/Main.java new file mode 100644 index 0000000000..f44231e436 --- /dev/null +++ b/test/558-switch/src/Main.java @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +public class Main { + public static boolean testMethod(int statusCode) { + switch (statusCode) { + case 303: + case 301: + case 302: + case 307: + return true; + default: + return false; + } //end of switch + } + + public static void main(String[] args) { + if (!testMethod(301)) { + throw new Error("Unexpected result"); + } + } +} diff --git a/test/Android.run-test.mk b/test/Android.run-test.mk index 54ceb753fe..7589f8f7cc 100644 --- a/test/Android.run-test.mk +++ b/test/Android.run-test.mk @@ -511,43 +511,54 @@ endif TEST_ART_BROKEN_OPTIMIZING_DEBUGGABLE_RUN_TESTS := -# Tests that should fail in the read barrier configuration. -# 055: Exceeds run time limits due to read barrier instrumentation. -# 137: Read barrier forces interpreter. Cannot run this with the interpreter. -# 484: Baker's fast path based read barrier compiler instrumentation generates code containing -# more parallel moves (at least on x86), thus some Checker assertions may fail. -# 537: Expects an array copy to be intrinsified, but calling-on-slowpath intrinsics are not yet -# handled in the read barrier configuration. -# 554: Cannot run in interpreter mode and this rule covers both: the compiler and the interpreter. -TEST_ART_BROKEN_READ_BARRIER_RUN_TESTS := \ - 055-enum-performance \ - 137-cfi \ - 484-checker-register-hints \ - 537-checker-arraycopy \ + +# Tests that should fail in the read barrier configuration with the default (Quick) compiler. +# 137: Quick has no support for read barriers and punts to the +# interpreter, but CFI unwinding expects managed frames. +# 554: Quick does not support JIT profiling. +TEST_ART_BROKEN_DEFAULT_READ_BARRIER_RUN_TESTS := \ + 137-cfi \ 554-jit-profile-file +# Tests that should fail in the read barrier configuration with the Optimizing compiler. +# 484: Baker's fast path based read barrier compiler instrumentation generates code containing +# more parallel moves on x86, thus some Checker assertions may fail. +# 537: Expects an array copy to be intrinsified on x86-64, but calling-on-slowpath intrinsics are +# not yet handled in the read barrier configuration. +TEST_ART_BROKEN_OPTIMIZING_READ_BARRIER_RUN_TESTS := \ + 484-checker-register-hints \ + 537-checker-arraycopy + ifeq ($(ART_USE_READ_BARRIER),true) - ART_TEST_KNOWN_BROKEN += $(call all-run-test-names,$(TARGET_TYPES),$(RUN_TYPES), \ - $(PREBUILD_TYPES),$(COMPILER_TYPES),$(RELOCATE_TYPES),$(TRACE_TYPES),$(GC_TYPES), \ - $(JNI_TYPES),$(IMAGE_TYPES),$(PICTEST_TYPES),$(DEBUGGABLE_TYPES), \ - $(TEST_ART_BROKEN_READ_BARRIER_RUN_TESTS),$(ALL_ADDRESS_SIZES)) + ifneq (,$(filter default,$(COMPILER_TYPES))) + ART_TEST_KNOWN_BROKEN += $(call all-run-test-names,$(TARGET_TYPES),$(RUN_TYPES), \ + $(PREBUILD_TYPES),default,$(RELOCATE_TYPES),$(TRACE_TYPES),$(GC_TYPES), \ + $(JNI_TYPES),$(IMAGE_TYPES),$(PICTEST_TYPES),$(DEBUGGABLE_TYPES), \ + $(TEST_ART_BROKEN_DEFAULT_READ_BARRIER_RUN_TESTS),$(ALL_ADDRESS_SIZES)) + endif + + ifneq (,$(filter optimizing,$(COMPILER_TYPES))) + ART_TEST_KNOWN_BROKEN += $(call all-run-test-names,$(TARGET_TYPES),$(RUN_TYPES), \ + $(PREBUILD_TYPES),optimizing,$(RELOCATE_TYPES),$(TRACE_TYPES),$(GC_TYPES), \ + $(JNI_TYPES),$(IMAGE_TYPES),$(PICTEST_TYPES),$(DEBUGGABLE_TYPES), \ + $(TEST_ART_BROKEN_OPTIMIZING_READ_BARRIER_RUN_TESTS),$(ALL_ADDRESS_SIZES)) + endif endif -TEST_ART_BROKEN_READ_BARRIER_RUN_TESTS := +TEST_ART_BROKEN_DEFAULT_READ_BARRIER_RUN_TESTS := +TEST_ART_BROKEN_OPTIMIZING_READ_BARRIER_RUN_TESTS := # Tests that should fail in the heap poisoning configuration with the default (Quick) compiler. -# 137: Quick punts to the interpreter, and this test cannot run this with the interpreter. +# 137: Quick has no support for read barriers and punts to the +# interpreter, but CFI unwinding expects managed frames. +# 554: Quick does not support JIT profiling. TEST_ART_BROKEN_DEFAULT_HEAP_POISONING_RUN_TESTS := \ - 137-cfi + 137-cfi \ + 554-jit-profile-file # Tests that should fail in the heap poisoning configuration with the Optimizing compiler. -# 055-enum-performance: Exceeds run time limits due to heap poisoning instrumentation. +# 055: Exceeds run time limits due to heap poisoning instrumentation (on ARM and ARM64 devices). TEST_ART_BROKEN_OPTIMIZING_HEAP_POISONING_RUN_TESTS := \ 055-enum-performance -# Tests that should fail in the heap poisoning configuration with the interpreter. -# 137: Cannot run this with the interpreter. -TEST_ART_BROKEN_INTERPRETER_HEAP_POISONING_RUN_TESTS := \ - 137-cfi \ - 554-jit-profile-file ifeq ($(ART_HEAP_POISONING),true) ifneq (,$(filter default,$(COMPILER_TYPES))) @@ -563,18 +574,10 @@ ifeq ($(ART_HEAP_POISONING),true) $(IMAGE_TYPES),$(PICTEST_TYPES),$(DEBUGGABLE_TYPES), \ $(TEST_ART_BROKEN_OPTIMIZING_HEAP_POISONING_RUN_TESTS),$(ALL_ADDRESS_SIZES)) endif - - ifneq (,$(filter interpreter,$(COMPILER_TYPES))) - ART_TEST_KNOWN_BROKEN += $(call all-run-test-names,$(TARGET_TYPES),$(RUN_TYPES), \ - $(PREBUILD_TYPES),interpreter,$(RELOCATE_TYPES),$(TRACE_TYPES),$(GC_TYPES),$(JNI_TYPES), \ - $(IMAGE_TYPES),$(PICTEST_TYPES),$(DEBUGGABLE_TYPES), \ - $(TEST_ART_BROKEN_INTERPRETER_HEAP_POISONING_RUN_TESTS),$(ALL_ADDRESS_SIZES)) - endif endif -TEST_ART_BROKEN_INTERPRETER_HEAP_POISONING_RUN_TESTS := -TEST_ART_BROKEN_OPTIMIZING_HEAP_POISONING_RUN_TESTS := TEST_ART_BROKEN_DEFAULT_HEAP_POISONING_RUN_TESTS := +TEST_ART_BROKEN_OPTIMIZING_HEAP_POISONING_RUN_TESTS := # Clear variables ahead of appending to them when defining tests. $(foreach target, $(TARGET_TYPES), $(eval ART_RUN_TEST_$(call name-to-var,$(target))_RULES :=)) diff --git a/test/run-test b/test/run-test index 6e13b8a976..60e008c8bb 100755 --- a/test/run-test +++ b/test/run-test @@ -41,7 +41,7 @@ else fi checker="${progdir}/../tools/checker/checker.py" export JAVA="java" -export JAVAC="javac -g" +export JAVAC="javac -g -source 1.7 -target 1.7 -Xlint:-options" export RUN="${progdir}/etc/run-test-jar" export DEX_LOCATION=/data/run-test/${test_dir} export NEED_DEX="true" |