summaryrefslogtreecommitdiff
path: root/test/2241-checker-inline-try-catch/src/Main.java
diff options
context:
space:
mode:
author Santiago Aboy Solanes <solanes@google.com> 2022-12-06 18:13:10 +0000
committer Santiago Aboy Solanes <solanes@google.com> 2022-12-07 14:27:00 +0000
commit343b9d9e103e281a4c4c337edb83d23473e28bcc (patch)
tree43eaa2d050ba315fe83bcdb2c7e2f6272bf42073 /test/2241-checker-inline-try-catch/src/Main.java
parente3b4be4508b24b45596be5cd0262412770a13f6b (diff)
Allow inlining invokes that contain try catches into catch blocks
Since catch blocks are never considered try blocks, we can guarantee that its invokes are not inside a TryBoundary (which is the blocker for enabling inlining of try catch invokes inside try blocks). Bug: 227283224 Test: art/test/testrunner/testrunner.py --host --64 --optimizing -b Change-Id: I747e2e8c2515e36041ad3966ca6a6388ef7d91df
Diffstat (limited to 'test/2241-checker-inline-try-catch/src/Main.java')
-rw-r--r--test/2241-checker-inline-try-catch/src/Main.java37
1 files changed, 28 insertions, 9 deletions
diff --git a/test/2241-checker-inline-try-catch/src/Main.java b/test/2241-checker-inline-try-catch/src/Main.java
index a76a99bd89..a80fbd7053 100644
--- a/test/2241-checker-inline-try-catch/src/Main.java
+++ b/test/2241-checker-inline-try-catch/src/Main.java
@@ -23,7 +23,8 @@ public class Main {
$noinline$testTryCatchFinally();
$noinline$testTryCatchFinallyDifferentInputs();
$noinline$testRecursiveTryCatch();
- $noinline$testDoNotInlineInsideTryOrCatch();
+ $noinline$testDoNotInlineInsideTryInlineInsideCatch();
+ $noinline$testInlineInsideNestedCatches();
$noinline$testBeforeAfterTryCatch();
$noinline$testDifferentTypes();
$noinline$testRawThrow();
@@ -88,28 +89,46 @@ public class Main {
$noinline$assertEquals(1, $inline$OOBTryCatchLevel4(numbers));
}
- // Tests that we don't inline inside outer tries or catches.
- /// CHECK-START: void Main.$noinline$testDoNotInlineInsideTryOrCatch() inliner (before)
- /// CHECK: InvokeStaticOrDirect method_name:Main.DoNotInlineOOBTryCatch
+ // Tests that we don't inline inside outer tries, but we do inline inside of catches.
+ /// CHECK-START: void Main.$noinline$testDoNotInlineInsideTryInlineInsideCatch() inliner (before)
/// CHECK: InvokeStaticOrDirect method_name:Main.DoNotInlineOOBTryCatch
+ /// CHECK: InvokeStaticOrDirect method_name:Main.$inline$OOBTryCatch
- /// CHECK-START: void Main.$noinline$testDoNotInlineInsideTryOrCatch() inliner (after)
- /// CHECK: InvokeStaticOrDirect method_name:Main.DoNotInlineOOBTryCatch
+ /// CHECK-START: void Main.$noinline$testDoNotInlineInsideTryInlineInsideCatch() inliner (after)
/// CHECK: InvokeStaticOrDirect method_name:Main.DoNotInlineOOBTryCatch
- private static void $noinline$testDoNotInlineInsideTryOrCatch() {
+ private static void $noinline$testDoNotInlineInsideTryInlineInsideCatch() {
int val = 0;
try {
int[] numbers = {};
val = DoNotInlineOOBTryCatch(numbers);
} catch (Exception ex) {
unreachable();
- // This is unreachable but we will still compile it so it works for checker purposes
+ // This is unreachable but we will still compile it so it works for checking that it inlines.
int[] numbers = {};
- DoNotInlineOOBTryCatch(numbers);
+ $inline$OOBTryCatch(numbers);
}
$noinline$assertEquals(1, val);
}
+ private static void $noinline$emptyMethod() {}
+
+ private static void $inline$testInlineInsideNestedCatches_inner() {
+ try {
+ $noinline$emptyMethod();
+ } catch (Exception ex) {
+ int[] numbers = {};
+ $noinline$assertEquals(1, $inline$OOBTryCatch(numbers));
+ }
+ }
+
+ private static void $noinline$testInlineInsideNestedCatches() {
+ try {
+ $noinline$emptyMethod();
+ } catch (Exception ex) {
+ $inline$testInlineInsideNestedCatches_inner();
+ }
+ }
+
// Tests that outer tries or catches don't affect as long as we are not inlining the inner
// try/catch inside of them.
private static void $noinline$testBeforeAfterTryCatch() {