diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/543-checker-dce-trycatch/expected.txt | 0 | ||||
| -rw-r--r-- | test/543-checker-dce-trycatch/info.txt | 1 | ||||
| -rw-r--r-- | test/543-checker-dce-trycatch/smali/TestCase.smali | 200 | ||||
| -rw-r--r-- | test/543-checker-dce-trycatch/src/Main.java | 66 |
4 files changed, 0 insertions, 267 deletions
diff --git a/test/543-checker-dce-trycatch/expected.txt b/test/543-checker-dce-trycatch/expected.txt deleted file mode 100644 index e69de29bb2..0000000000 --- a/test/543-checker-dce-trycatch/expected.txt +++ /dev/null diff --git a/test/543-checker-dce-trycatch/info.txt b/test/543-checker-dce-trycatch/info.txt deleted file mode 100644 index e541938f68..0000000000 --- a/test/543-checker-dce-trycatch/info.txt +++ /dev/null @@ -1 +0,0 @@ -Tests removal of try/catch blocks by DCE.
\ No newline at end of file diff --git a/test/543-checker-dce-trycatch/smali/TestCase.smali b/test/543-checker-dce-trycatch/smali/TestCase.smali deleted file mode 100644 index 3e7193723d..0000000000 --- a/test/543-checker-dce-trycatch/smali/TestCase.smali +++ /dev/null @@ -1,200 +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 LTestCase; -.super Ljava/lang/Object; - -.method private static $inline$False()Z - .registers 1 - const/4 v0, 0x0 - return v0 -.end method - -# Test a case when one entering TryBoundary is dead but the rest of the try -# block remains live. - -## CHECK-START: int TestCase.testDeadEntry(int, int, int, int) dead_code_elimination_final (before) -## CHECK: Add - -## CHECK-START: int TestCase.testDeadEntry(int, int, int, int) dead_code_elimination_final (before) -## CHECK: TryBoundary kind:entry -## CHECK: TryBoundary kind:entry -## CHECK-NOT: TryBoundary kind:entry - -## CHECK-START: int TestCase.testDeadEntry(int, int, int, int) dead_code_elimination_final (after) -## CHECK-NOT: Add - -## CHECK-START: int TestCase.testDeadEntry(int, int, int, int) dead_code_elimination_final (after) -## CHECK: TryBoundary kind:entry -## CHECK-NOT: TryBoundary kind:entry - -.method public static testDeadEntry(IIII)I - .registers 5 - - invoke-static {}, LTestCase;->$inline$False()Z - move-result v0 - - if-eqz v0, :else - - add-int/2addr p0, p1 - - :try_start - div-int/2addr p0, p2 - - :else - div-int/2addr p0, p3 - :try_end - .catchall {:try_start .. :try_end} :catch_all - - :return - return p0 - - :catch_all - const/4 p0, -0x1 - goto :return - -.end method - -# Test a case when one exiting TryBoundary is dead but the rest of the try -# block remains live. - -## CHECK-START: int TestCase.testDeadExit(int, int, int, int) dead_code_elimination_final (before) -## CHECK: Add - -## CHECK-START: int TestCase.testDeadExit(int, int, int, int) dead_code_elimination_final (before) -## CHECK: TryBoundary kind:exit -## CHECK: TryBoundary kind:exit -## CHECK-NOT: TryBoundary kind:exit - -## CHECK-START: int TestCase.testDeadExit(int, int, int, int) dead_code_elimination_final (after) -## CHECK-NOT: Add - -## CHECK-START: int TestCase.testDeadExit(int, int, int, int) dead_code_elimination_final (after) -## CHECK: TryBoundary kind:exit -## CHECK-NOT: TryBoundary kind:exit - -.method public static testDeadExit(IIII)I - .registers 5 - - invoke-static {}, LTestCase;->$inline$False()Z - move-result v0 - - :try_start - div-int/2addr p0, p2 - - if-nez v0, :else - - div-int/2addr p0, p3 - goto :return - :try_end - .catchall {:try_start .. :try_end} :catch_all - - :else - add-int/2addr p0, p1 - - :return - return p0 - - :catch_all - const/4 p0, -0x1 - goto :return - -.end method - -# Test that a catch block remains live and consistent if some of try blocks -# throwing into it are removed. - -## CHECK-START: int TestCase.testOneTryBlockDead(int, int, int, int) dead_code_elimination_final (before) -## CHECK: TryBoundary kind:entry -## CHECK: TryBoundary kind:entry -## CHECK-NOT: TryBoundary kind:entry - -## CHECK-START: int TestCase.testOneTryBlockDead(int, int, int, int) dead_code_elimination_final (before) -## CHECK: TryBoundary kind:exit -## CHECK: TryBoundary kind:exit -## CHECK-NOT: TryBoundary kind:exit - -## CHECK-START: int TestCase.testOneTryBlockDead(int, int, int, int) dead_code_elimination_final (after) -## CHECK: TryBoundary kind:entry -## CHECK-NOT: TryBoundary kind:entry - -## CHECK-START: int TestCase.testOneTryBlockDead(int, int, int, int) dead_code_elimination_final (after) -## CHECK: TryBoundary kind:exit -## CHECK-NOT: TryBoundary kind:exit - -.method public static testOneTryBlockDead(IIII)I - .registers 5 - - invoke-static {}, LTestCase;->$inline$False()Z - move-result v0 - - :try_start_1 - div-int/2addr p0, p2 - :try_end_1 - .catchall {:try_start_1 .. :try_end_1} :catch_all - - if-eqz v0, :return - - :try_start_2 - div-int/2addr p0, p3 - :try_end_2 - .catchall {:try_start_2 .. :try_end_2} :catch_all - - :return - return p0 - - :catch_all - const/4 p0, -0x1 - goto :return - -.end method - -# Test that try block membership is recomputed. In this test case, the try entry -# stored with the merge block gets deleted and SSAChecker would fail if it was -# not replaced with the try entry from the live branch. - -.method public static testRecomputeTryMembership(IIII)I - .registers 5 - - invoke-static {}, LTestCase;->$inline$False()Z - move-result v0 - - if-eqz v0, :else - - # Dead branch - :try_start - div-int/2addr p0, p1 - goto :merge - - # Live branch - :else - div-int/2addr p0, p2 - - # Merge block. Make complex so it does not get merged with the live branch. - :merge - div-int/2addr p0, p3 - if-eqz p0, :else2 - div-int/2addr p0, p3 - :else2 - :try_end - .catchall {:try_start .. :try_end} :catch_all - - :return - return p0 - - :catch_all - const/4 p0, -0x1 - goto :return - -.end method diff --git a/test/543-checker-dce-trycatch/src/Main.java b/test/543-checker-dce-trycatch/src/Main.java deleted file mode 100644 index 6e73d0dbd1..0000000000 --- a/test/543-checker-dce-trycatch/src/Main.java +++ /dev/null @@ -1,66 +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. - */ - -public class Main { - - // Workaround for b/18051191. - class InnerClass {} - - static boolean $inline$False() { return false; } - - // DCE should only merge blocks where the first ends with a Goto. - // SSAChecker will fail if the following Throw->TryBoundary blocks are merged. - public static void doNotMergeThrow(String str) { - try { - throw new Exception(str); - } catch (Exception ex) { - return; - } - } - - // Test deletion of all try/catch blocks. Multiple catch blocks test deletion - // where TryBoundary still has exception handler successors after having removed - // some already. - - /// CHECK-START: void Main.testDeadTryCatch(boolean) dead_code_elimination_final (after) - /// CHECK-NOT: TryBoundary - - /// CHECK-START: void Main.testDeadTryCatch(boolean) dead_code_elimination_final (after) - /// CHECK: begin_block - /// CHECK: begin_block - /// CHECK: begin_block - /// CHECK-NOT: begin_block - - public static void testDeadTryCatch(boolean val) { - if ($inline$False()) { - try { - if (val) { - throw new ArithmeticException(); - } else { - throw new ArrayIndexOutOfBoundsException(); - } - } catch (ArithmeticException ex) { - System.out.println("Unexpected AE catch"); - } catch (ArrayIndexOutOfBoundsException ex) { - System.out.println("Unexpected AIIOB catch"); - } - } - } - - public static void main(String[] args) { - - } -}
\ No newline at end of file |