diff options
| author | 2020-08-27 17:36:24 +0100 | |
|---|---|---|
| committer | 2020-08-27 17:36:24 +0100 | |
| commit | 0280e5d21e387812b7a1719d75ef2e3a94280c60 (patch) | |
| tree | ad79993400d41f2b0de9662f230b89787a750c8a /test/727-checker-unresolved-class | |
| parent | 4100e5e2ebb9376696ae3b9f26dccde5ebcf5c7e (diff) | |
Optimizing: Improve generated code for HLoadClass...
... for resolved package-private class accessed from
unresolved compiling class in the same package.
Test: Additional tests in 727-checker-unresolved-class.
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Bug: 161898207
Change-Id: I215dcd9db2297f5c8d9547635d80975d88534579
Diffstat (limited to 'test/727-checker-unresolved-class')
3 files changed, 51 insertions, 0 deletions
diff --git a/test/727-checker-unresolved-class/src-ex/resolved/SubclassOfUnresolvedClass2.java b/test/727-checker-unresolved-class/src-ex/resolved/SubclassOfUnresolvedClass2.java index 8469cf7d2c..423fdd3fd6 100644 --- a/test/727-checker-unresolved-class/src-ex/resolved/SubclassOfUnresolvedClass2.java +++ b/test/727-checker-unresolved-class/src-ex/resolved/SubclassOfUnresolvedClass2.java @@ -23,6 +23,9 @@ import unresolved.UnresolvedClass; // loader is illegal even though the package name is the same. public class SubclassOfUnresolvedClass2 extends UnresolvedClass { public static void $noinline$main() { + $noinline$testResolvedPublicClass(); + $noinline$testResolvedPackagePrivateClass(); + $noinline$testPublicFieldInResolvedPackagePrivateClass(); $noinline$testPublicFieldInPackagePrivateClassViaResolvedPublicSubclass(); $noinline$testPrivateFieldInResolvedPackagePrivateClass(); @@ -40,6 +43,21 @@ public class SubclassOfUnresolvedClass2 extends UnresolvedClass { System.out.println("SubclassOfUnresolvedClass2 passed"); } + /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testResolvedPublicClass() builder (after) + /// CHECK: LoadClass class_name:resolved.ResolvedPublicSubclassOfPackagePrivateClass needs_access_check:false + static void $noinline$testResolvedPublicClass() { + Class<?> c = ResolvedPublicSubclassOfPackagePrivateClass.class; + } + + /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testResolvedPackagePrivateClass() builder (after) + /// CHECK: LoadClass class_name:resolved.ResolvedPackagePrivateClass needs_access_check:true + static void $noinline$testResolvedPackagePrivateClass() { + try { + Class<?> c = ResolvedPackagePrivateClass.class; + throw new Error("Unreachable"); + } catch (IllegalAccessError expected) {} + } + /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testPublicFieldInResolvedPackagePrivateClass() builder (after) /// CHECK: UnresolvedStaticFieldSet diff --git a/test/727-checker-unresolved-class/src/resolved/SubclassOfUnresolvedClass.java b/test/727-checker-unresolved-class/src/resolved/SubclassOfUnresolvedClass.java index d767411659..56a4f6a934 100644 --- a/test/727-checker-unresolved-class/src/resolved/SubclassOfUnresolvedClass.java +++ b/test/727-checker-unresolved-class/src/resolved/SubclassOfUnresolvedClass.java @@ -20,6 +20,9 @@ import unresolved.UnresolvedClass; public class SubclassOfUnresolvedClass extends UnresolvedClass { public static void $noinline$main() { + $noinline$testResolvedPublicClass(); + $noinline$testResolvedPackagePrivateClass(); + $noinline$testPublicFieldInResolvedPackagePrivateClass(); $noinline$testPublicFieldInPackagePrivateClassViaResolvedPublicSubclass(); $noinline$testPrivateFieldInResolvedPackagePrivateClass(); @@ -37,6 +40,18 @@ public class SubclassOfUnresolvedClass extends UnresolvedClass { System.out.println("SubclassOfUnresolvedClass passed"); } + /// CHECK-START: void resolved.SubclassOfUnresolvedClass.$noinline$testResolvedPublicClass() builder (after) + /// CHECK: LoadClass class_name:resolved.ResolvedPublicSubclassOfPackagePrivateClass needs_access_check:false + static void $noinline$testResolvedPublicClass() { + Class<?> c = ResolvedPublicSubclassOfPackagePrivateClass.class; + } + + /// CHECK-START: void resolved.SubclassOfUnresolvedClass.$noinline$testResolvedPackagePrivateClass() builder (after) + /// CHECK: LoadClass class_name:resolved.ResolvedPackagePrivateClass needs_access_check:false + static void $noinline$testResolvedPackagePrivateClass() { + Class<?> c = ResolvedPackagePrivateClass.class; + } + /// CHECK-START: void resolved.SubclassOfUnresolvedClass.$noinline$testPublicFieldInResolvedPackagePrivateClass() builder (after) /// CHECK: StaticFieldSet diff --git a/test/727-checker-unresolved-class/src/unresolved/UnresolvedClass.java b/test/727-checker-unresolved-class/src/unresolved/UnresolvedClass.java index eaa9493931..336c555c33 100644 --- a/test/727-checker-unresolved-class/src/unresolved/UnresolvedClass.java +++ b/test/727-checker-unresolved-class/src/unresolved/UnresolvedClass.java @@ -21,6 +21,9 @@ import resolved.ResolvedPublicSubclassOfPackagePrivateClass; public class UnresolvedClass { public static void $noinline$main() { + $noinline$testResolvedPublicClass(); + $noinline$testResolvedPackagePrivateClass(); + $noinline$testPublicFieldInResolvedPackagePrivateClass(); $noinline$testPublicFieldInPackagePrivateClassViaResolvedPublicSubclass(); $noinline$testPrivateFieldInResolvedPackagePrivateClass(); @@ -38,6 +41,21 @@ public class UnresolvedClass { System.out.println("UnresolvedClass passed"); } + /// CHECK-START: void unresolved.UnresolvedClass.$noinline$testResolvedPublicClass() builder (after) + /// CHECK: LoadClass class_name:resolved.ResolvedPublicSubclassOfPackagePrivateClass needs_access_check:false + static void $noinline$testResolvedPublicClass() { + Class<?> c = ResolvedPublicSubclassOfPackagePrivateClass.class; + } + + /// CHECK-START: void unresolved.UnresolvedClass.$noinline$testResolvedPackagePrivateClass() builder (after) + /// CHECK: LoadClass class_name:resolved.ResolvedPackagePrivateClass needs_access_check:true + static void $noinline$testResolvedPackagePrivateClass() { + try { + Class<?> c = ResolvedPackagePrivateClass.class; + throw new Error("Unreachable"); + } catch (IllegalAccessError expected) {} + } + /// CHECK-START: void unresolved.UnresolvedClass.$noinline$testPublicFieldInResolvedPackagePrivateClass() builder (after) /// CHECK: UnresolvedStaticFieldSet |