summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorNicolas Geoffray <ngeoffray@google.com>2015-06-24 10:38:27 +0100
committerNicolas Geoffray <ngeoffray@google.com>2015-06-24 16:20:16 +0100
commit574cce14025e153d87ec051926d331c5a39e5f92 (patch)
tree1efbcaf221db15cc86351a4e21634847c746f31f /test
parent310b0f5f15ac9ef8fb7ed0a12ff9ba3e4da17033 (diff)
downloadart-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.java29
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);
}
}
}