summaryrefslogtreecommitdiffstats
path: root/test/082-inline-execute
diff options
context:
space:
mode:
authorVladimir Marko <vmarko@google.com>2015-01-26 14:06:46 +0000
committerVladimir Marko <vmarko@google.com>2015-01-26 14:32:39 +0000
commit00ca84730a21578dcc6b47bd8e08b78ab9b2dded (patch)
tree5af68aefc28464ccb209fff525ab2fb374f1d236 /test/082-inline-execute
parent081d27817608c2ea035f2473c4ea1062a79bccef (diff)
downloadart-00ca84730a21578dcc6b47bd8e08b78ab9b2dded.zip
art-00ca84730a21578dcc6b47bd8e08b78ab9b2dded.tar.gz
art-00ca84730a21578dcc6b47bd8e08b78ab9b2dded.tar.bz2
Quick: Fix range check for intrinsic String.charAt() on x86.
Bug: 19125146 Change-Id: I274190a7a60cd2e29a854738ed1ec99a9e611969
Diffstat (limited to 'test/082-inline-execute')
-rw-r--r--test/082-inline-execute/src/Main.java38
1 files changed, 37 insertions, 1 deletions
diff --git a/test/082-inline-execute/src/Main.java b/test/082-inline-execute/src/Main.java
index a737ccd..5561a09 100644
--- a/test/082-inline-execute/src/Main.java
+++ b/test/082-inline-execute/src/Main.java
@@ -130,7 +130,11 @@ public class Main {
Assert.assertEquals('N', testStr.charAt(0));
Assert.assertEquals('o', testStr.charAt(1));
Assert.assertEquals(' ', testStr.charAt(10));
- Assert.assertEquals('e', testStr.charAt(testStr.length()-1));
+ Assert.assertEquals('e', testStr.charAt(14)); // 14 = testStr.length()-1 as a constant.
+ Assert.assertEquals('N', test_String_charAt_inner(testStr, 0));
+ Assert.assertEquals('o', test_String_charAt_inner(testStr, 1));
+ Assert.assertEquals(' ', test_String_charAt_inner(testStr, 10));
+ Assert.assertEquals('e', test_String_charAt_inner(testStr, testStr.length()-1));
test_String_charAtExc();
test_String_charAtExc2();
@@ -148,6 +152,33 @@ public class Main {
Assert.fail();
} catch (StringIndexOutOfBoundsException expected) {
}
+ try {
+ testStr.charAt(15); // 15 = "Now is the time".length()
+ Assert.fail();
+ } catch (StringIndexOutOfBoundsException expected) {
+ }
+ try {
+ test_String_charAt_inner(testStr, -1);
+ Assert.fail();
+ } catch (StringIndexOutOfBoundsException expected) {
+ }
+ try {
+ test_String_charAt_inner(testStr, 80);
+ Assert.fail();
+ } catch (StringIndexOutOfBoundsException expected) {
+ }
+ try {
+ test_String_charAt_inner(testStr, 15); // 15 = "Now is the time".length()
+ Assert.fail();
+ } catch (StringIndexOutOfBoundsException expected) {
+ }
+
+ String strEmpty = "";
+ try {
+ strEmpty.charAt(0);
+ Assert.fail();
+ } catch (StringIndexOutOfBoundsException expected) {
+ }
String strNull = null;
try {
@@ -157,6 +188,11 @@ public class Main {
}
}
+ private static char test_String_charAt_inner(String s, int index) {
+ // Using non-constant index here (assuming that this method wasn't inlined).
+ return s.charAt(index);
+ }
+
private static void test_String_charAtExc2() {
try {
test_String_charAtExc3();