summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
author David Brazdil <dbrazdil@google.com> 2016-01-20 16:48:30 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2016-01-20 16:48:30 +0000
commit440ef2cbc76d7e2bc76cf5f15b69fc0478d7e853 (patch)
treeb2c457e09b6ebff0e1c7504d4bb1bf4bcfe1b8e6 /test
parent5b98e3c84ab634ff259a94fe6148f10533b467da (diff)
parentbc9ab1630a198efbbf730275541291321ac3d2d4 (diff)
Merge "ART: Cannot assume String.<init> called on NewInstance"
Diffstat (limited to 'test')
-rw-r--r--test/563-checker-fakestring/smali/TestCase.smali28
-rw-r--r--test/563-checker-fakestring/src/Main.java8
2 files changed, 36 insertions, 0 deletions
diff --git a/test/563-checker-fakestring/smali/TestCase.smali b/test/563-checker-fakestring/smali/TestCase.smali
index 4bd804da26..823ed1e25a 100644
--- a/test/563-checker-fakestring/smali/TestCase.smali
+++ b/test/563-checker-fakestring/smali/TestCase.smali
@@ -124,3 +124,31 @@
return-object v0
.end method
+
+# Test that the compiler does not assume that the first argument of String.<init>
+# is a NewInstance by inserting an irreducible loop between them (b/26676472).
+
+## CHECK-START-DEBUGGABLE: java.lang.String TestCase.thisNotNewInstance(byte[], boolean) register (after)
+## CHECK-DAG: InvokeStaticOrDirect env:[[<<Phi:l\d+>>,{{.*]]}}
+## CHECK-DAG: <<Phi>> Phi
+
+.method public static thisNotNewInstance([BZ)Ljava/lang/String;
+ .registers 5
+
+ new-instance v0, Ljava/lang/String;
+
+ # Irreducible loop
+ if-eqz p1, :loop_entry
+ :loop_header
+ const v1, 0x1
+ xor-int p1, p1, v1
+ :loop_entry
+ if-eqz p1, :string_init
+ goto :loop_header
+
+ :string_init
+ const-string v1, "UTF8"
+ invoke-direct {v0, p0, v1}, Ljava/lang/String;-><init>([BLjava/lang/String;)V
+ return-object v0
+
+.end method
diff --git a/test/563-checker-fakestring/src/Main.java b/test/563-checker-fakestring/src/Main.java
index 04df0f637c..5489a0d60d 100644
--- a/test/563-checker-fakestring/src/Main.java
+++ b/test/563-checker-fakestring/src/Main.java
@@ -63,5 +63,13 @@ public class Main {
String result = (String) m.invoke(null, new Object[] { testData });
assertEqual(testString, result);
}
+
+ {
+ Method m = c.getMethod("thisNotNewInstance", byte[].class, boolean.class);
+ String result = (String) m.invoke(null, new Object[] { testData, true });
+ assertEqual(testString, result);
+ result = (String) m.invoke(null, new Object[] { testData, false });
+ assertEqual(testString, result);
+ }
}
}