diff options
| author | 2018-07-04 15:31:27 +0000 | |
|---|---|---|
| committer | 2018-07-04 15:31:27 +0000 | |
| commit | ea9b308e4548b704e21f4d587d9006ddc9db7b9e (patch) | |
| tree | 7800ba6d720e36d2511022ccc5329962bdb44b45 | |
| parent | 64cdf56aeac47ab2dfd4f6437f976de9a9ad372d (diff) | |
| parent | ab86413a9b5fab9eb7d3967d30277b2e7b580e9a (diff) | |
Merge "Move a 530-checker-lse test from java to smali"
| -rw-r--r-- | test/530-checker-lse/smali/Main.smali | 32 | ||||
| -rw-r--r-- | test/530-checker-lse/src/Main.java | 21 |
2 files changed, 34 insertions, 19 deletions
diff --git a/test/530-checker-lse/smali/Main.smali b/test/530-checker-lse/smali/Main.smali index 267801760f..4c18266c01 100644 --- a/test/530-checker-lse/smali/Main.smali +++ b/test/530-checker-lse/smali/Main.smali @@ -124,6 +124,38 @@ goto :goto_5 .end method +## CHECK-START: int Main2.test10(TestClass) load_store_elimination (before) +## CHECK: StaticFieldGet +## CHECK: InstanceFieldGet +## CHECK: StaticFieldSet +## CHECK: InstanceFieldGet + +## CHECK-START: int Main2.test10(TestClass) load_store_elimination (after) +## CHECK: StaticFieldGet +## CHECK: InstanceFieldGet +## CHECK: StaticFieldSet +## CHECK-NOT: NullCheck +## CHECK-NOT: InstanceFieldGet + +# Original java source: +# +# // Static fields shouldn't alias with instance fields. +# static int test10(TestClass obj) { +# TestClass.si += obj.i; +# return obj.i; +# } + +.method public static test10(LTestClass;)I + .registers 3 + .param p0, "obj" # LTestClass; + sget v0, LTestClass;->si:I + iget v1, p0, LTestClass;->i:I + add-int/2addr v0, v1 + sput v0, LTestClass;->si:I + iget p0, p0, LTestClass;->i:I + return p0 +.end method + ## CHECK-START: int Main2.test23(boolean) load_store_elimination (before) ## CHECK: NewInstance ## CHECK: InstanceFieldSet diff --git a/test/530-checker-lse/src/Main.java b/test/530-checker-lse/src/Main.java index 541ae8bc07..22bff0aaf5 100644 --- a/test/530-checker-lse/src/Main.java +++ b/test/530-checker-lse/src/Main.java @@ -251,24 +251,6 @@ public class Main { return obj2.i; } - /// CHECK-START: int Main.test10(TestClass) load_store_elimination (before) - /// CHECK: StaticFieldGet - /// CHECK: InstanceFieldGet - /// CHECK: StaticFieldSet - - /// CHECK-START: int Main.test10(TestClass) load_store_elimination (after) - /// CHECK: StaticFieldGet - /// CHECK: InstanceFieldGet - /// CHECK: StaticFieldSet - /// CHECK-NOT: NullCheck - /// CHECK-NOT: InstanceFieldGet - - // Static fields shouldn't alias with instance fields. - static int test10(TestClass obj) { - TestClass.si += obj.i; - return obj.i; - } - /// CHECK-START: int Main.test11(TestClass) load_store_elimination (before) /// CHECK: InstanceFieldSet /// CHECK: InstanceFieldGet @@ -1176,6 +1158,7 @@ public class Main { Class main2 = Class.forName("Main2"); Method test4 = main2.getMethod("test4", TestClass.class, boolean.class); Method test5 = main2.getMethod("test5", TestClass.class, boolean.class); + Method test10 = main2.getMethod("test10", TestClass.class); Method test23 = main2.getMethod("test23", boolean.class); Method test24 = main2.getMethod("test24"); @@ -1198,7 +1181,7 @@ public class Main { obj2 = new TestClass(); obj1.next = obj2; assertIntEquals(test9(new TestClass()), 1); - assertIntEquals(test10(new TestClass(3, 4)), 3); + assertIntEquals((int)test10.invoke(null, new TestClass(3, 4)), 3); assertIntEquals(TestClass.si, 3); assertIntEquals(test11(new TestClass()), 10); assertIntEquals(test12(new TestClass(), new TestClass()), 10); |