diff options
author | Nicolas Geoffray <ngeoffray@google.com> | 2015-06-24 10:38:27 +0100 |
---|---|---|
committer | Nicolas Geoffray <ngeoffray@google.com> | 2015-06-24 16:20:16 +0100 |
commit | 574cce14025e153d87ec051926d331c5a39e5f92 (patch) | |
tree | 1efbcaf221db15cc86351a4e21634847c746f31f /test | |
parent | 310b0f5f15ac9ef8fb7ed0a12ff9ba3e4da17033 (diff) | |
download | art-574cce14025e153d87ec051926d331c5a39e5f92.zip art-574cce14025e153d87ec051926d331c5a39e5f92.tar.gz art-574cce14025e153d87ec051926d331c5a39e5f92.tar.bz2 |
BCE: Narrow instead of unconditionnaly overwrite the range.
bug:21862741
(cherry picked from commit a09ff9c11f07863ac57e6120a824f0d20dfaa284)
Change-Id: Ia8e903e09a7f9c2b8ef7cf3522f73f154534b81f
Diffstat (limited to 'test')
-rw-r--r-- | test/513-array-deopt/src/Main.java | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/test/513-array-deopt/src/Main.java b/test/513-array-deopt/src/Main.java index a0ae4c3..5ee4d55 100644 --- a/test/513-array-deopt/src/Main.java +++ b/test/513-array-deopt/src/Main.java @@ -19,19 +19,36 @@ public class Main { a[0] = 0; a[1] = 0; a[2] = 0; - // Up to this point, we record that the lower bound is 2. + // Up to this point, we record that the lower bound (inclusive) is 3. // The next instruction will record that the lower bound is 5. // The deoptimization code used to assume the lower bound has - // to be check it will add for the deoptimization (here, it - // would be 2). + // to be the one it will add for the deoptimization check (here, it + // would be 3). return new int[a.length - 5]; } + public static int[] foo(int[] a) { + a[0] = 0; + a[1] = 0; + a[2] = 0; + // Up to this point, we record that the lower bound (inclusive) is 3. + // The next instruction will record that the lower bound is 1. + // The deoptimization code used to assume the lower bound has + // to be the one it will add for the deoptimization check (here, it + // would be 3). + return new int[a.length - 1]; + } + public static void main(String[] args) { int[] a = new int[5]; - a = bar(a); - if (a.length != 0) { - throw new Error("Expected 0, got " + a.length); + int[] result = bar(a); + if (result.length != 0) { + throw new Error("Expected 0, got " + result.length); + } + + result = foo(a); + if (result.length != 4) { + throw new Error("Expected 5, got " + result.length); } } } |