summaryrefslogtreecommitdiff
path: root/test/727-checker-unresolved-class/src-ex
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2020-08-18 09:29:51 +0100
committer Vladimir Marko <vmarko@google.com> 2020-08-24 09:32:55 +0000
commitcfd65805a5b3b0437e355b8044a05ee6c9d352c5 (patch)
treec91f72b2fe4325cbbc21b6d4a889ea87a7c3608f /test/727-checker-unresolved-class/src-ex
parent095dc4611b8001861f8d0e621f9df704a933754a (diff)
Optimizing: Fix weak method access check.
And improve generated code for accessing package private methods from unresolved compiling class in the same package. Test: Additional test in 727-checker-unresolved-class Test: testrunner.py --host --optimizing --interpreter --jvm -t 727 Test: testrunner.py --host --optimizing Bug: 161898207 Change-Id: Ia34552d90620e8e0398099522a5a52b4a45df15d
Diffstat (limited to 'test/727-checker-unresolved-class/src-ex')
-rw-r--r--test/727-checker-unresolved-class/src-ex/Test.java27
-rw-r--r--test/727-checker-unresolved-class/src-ex/resolved/SubclassOfUnresolvedClass2.java181
2 files changed, 208 insertions, 0 deletions
diff --git a/test/727-checker-unresolved-class/src-ex/Test.java b/test/727-checker-unresolved-class/src-ex/Test.java
new file mode 100644
index 0000000000..1dd03c29ad
--- /dev/null
+++ b/test/727-checker-unresolved-class/src-ex/Test.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import resolved.SubclassOfUnresolvedClass;
+import resolved.SubclassOfUnresolvedClass2;
+import unresolved.UnresolvedClass;
+
+public class Test {
+ public static void $noinline$main() {
+ UnresolvedClass.$noinline$main();
+ SubclassOfUnresolvedClass.$noinline$main();
+ SubclassOfUnresolvedClass2.$noinline$main();
+ }
+}
diff --git a/test/727-checker-unresolved-class/src-ex/resolved/SubclassOfUnresolvedClass2.java b/test/727-checker-unresolved-class/src-ex/resolved/SubclassOfUnresolvedClass2.java
new file mode 100644
index 0000000000..41b5e8b8d4
--- /dev/null
+++ b/test/727-checker-unresolved-class/src-ex/resolved/SubclassOfUnresolvedClass2.java
@@ -0,0 +1,181 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package resolved;
+
+import unresolved.UnresolvedClass;
+
+// This class is defined by the child class loader, so access to
+// package-private classes and members defined in the parent class
+// loader is illegal even though the package name is the same.
+public class SubclassOfUnresolvedClass2 extends UnresolvedClass {
+ public static void $noinline$main() {
+ $noinline$testPublicFieldInResolvedPackagePrivateClass();
+ $noinline$testPublicFieldInPackagePrivateClassViaResolvedPublicSubclass();
+ $noinline$testPrivateFieldInResolvedPackagePrivateClass();
+ $noinline$testPrivateFieldInPackagePrivateClassViaResolvedPublicSubclass();
+ $noinline$testPackagePrivateFieldInResolvedPackagePrivateClass();
+ $noinline$testPackagePrivateFieldInPackagePrivateClassViaResolvedPublicSubclass();
+
+ $noinline$testPublicMethodInResolvedPackagePrivateClass();
+ $noinline$testPublicMethodInPackagePrivateClassViaResolvedPublicSubclass();
+ $noinline$testPrivateMethodInResolvedPackagePrivateClass();
+ $noinline$testPrivateMethodInPackagePrivateClassViaResolvedPublicSubclass();
+ $noinline$testPackagePrivateMethodInResolvedPackagePrivateClass();
+ $noinline$testPackagePrivateMethodInPackagePrivateClassViaResolvedPublicSubclass();
+
+ System.out.println("SubclassOfUnresolvedClass2 passed");
+ }
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testPublicFieldInResolvedPackagePrivateClass() builder (after)
+ /// CHECK: UnresolvedStaticFieldSet
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testPublicFieldInResolvedPackagePrivateClass() builder (after)
+ /// CHECK-NOT: StaticFieldSet
+ static void $noinline$testPublicFieldInResolvedPackagePrivateClass() {
+ try {
+ ResolvedPackagePrivateClass.publicIntField = 42;
+ throw new Error("Unreachable");
+ } catch (IllegalAccessError expected) {}
+ }
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testPublicFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK: UnresolvedStaticFieldSet
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testPublicFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK-NOT: StaticFieldSet
+ static void $noinline$testPublicFieldInPackagePrivateClassViaResolvedPublicSubclass() {
+ // TODO: Use StaticFieldSet.
+ ResolvedPublicSubclassOfPackagePrivateClass.publicIntField = 42;
+ }
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testPrivateFieldInResolvedPackagePrivateClass() builder (after)
+ /// CHECK: UnresolvedStaticFieldSet
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testPrivateFieldInResolvedPackagePrivateClass() builder (after)
+ /// CHECK-NOT: StaticFieldSet
+ static void $noinline$testPrivateFieldInResolvedPackagePrivateClass() {
+ try {
+ ResolvedPackagePrivateClass.privateIntField = 42;
+ throw new Error("Unreachable");
+ } catch (IllegalAccessError expected) {}
+ }
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testPrivateFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK: UnresolvedStaticFieldSet
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testPrivateFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK-NOT: StaticFieldSet
+ static void $noinline$testPrivateFieldInPackagePrivateClassViaResolvedPublicSubclass() {
+ try {
+ ResolvedPublicSubclassOfPackagePrivateClass.privateIntField = 42;
+ throw new Error("Unreachable");
+ } catch (IllegalAccessError expected) {}
+ }
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testPackagePrivateFieldInResolvedPackagePrivateClass() builder (after)
+ /// CHECK: UnresolvedStaticFieldSet
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testPackagePrivateFieldInResolvedPackagePrivateClass() builder (after)
+ /// CHECK-NOT: StaticFieldSet
+ static void $noinline$testPackagePrivateFieldInResolvedPackagePrivateClass() {
+ try {
+ ResolvedPackagePrivateClass.intField = 42;
+ throw new Error("Unreachable");
+ } catch (IllegalAccessError expected) {}
+ }
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testPackagePrivateFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK: UnresolvedStaticFieldSet
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testPackagePrivateFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK-NOT: StaticFieldSet
+ static void $noinline$testPackagePrivateFieldInPackagePrivateClassViaResolvedPublicSubclass() {
+ try {
+ ResolvedPublicSubclassOfPackagePrivateClass.intField = 42;
+ throw new Error("Unreachable");
+ } catch (IllegalAccessError expected) {}
+ }
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testPublicMethodInResolvedPackagePrivateClass() builder (after)
+ /// CHECK: InvokeUnresolved method_name:{{[^$]*}}$noinline$publicStaticMethod
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testPublicMethodInResolvedPackagePrivateClass() builder (after)
+ /// CHECK-NOT: InvokeStaticOrDirect method_name:{{[^$]*}}$noinline$publicStaticMethod
+ static void $noinline$testPublicMethodInResolvedPackagePrivateClass() {
+ try {
+ ResolvedPackagePrivateClass.$noinline$publicStaticMethod();
+ throw new Error("Unreachable");
+ } catch (IllegalAccessError expected) {}
+ }
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testPublicMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK: InvokeStaticOrDirect method_name:{{[^$]*}}$noinline$publicStaticMethod
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testPublicMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK-NOT: InvokeUnresolved method_name:{{[^$]*}}$noinline$publicStaticMethod
+ static void $noinline$testPublicMethodInPackagePrivateClassViaResolvedPublicSubclass() {
+ ResolvedPublicSubclassOfPackagePrivateClass.$noinline$publicStaticMethod();
+ }
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testPrivateMethodInResolvedPackagePrivateClass() builder (after)
+ /// CHECK: InvokeUnresolved method_name:{{[^$]*}}$noinline$privateStaticMethod
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testPrivateMethodInResolvedPackagePrivateClass() builder (after)
+ /// CHECK-NOT: InvokeStaticOrDirect method_name:{{[^$]*}}$noinline$privateStaticMethod
+ static void $noinline$testPrivateMethodInResolvedPackagePrivateClass() {
+ try {
+ ResolvedPackagePrivateClass.$noinline$privateStaticMethod();
+ throw new Error("Unreachable");
+ } catch (IllegalAccessError expected) {}
+ }
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testPrivateMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK: InvokeUnresolved method_name:{{[^$]*}}$noinline$privateStaticMethod
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testPrivateMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK-NOT: InvokeStaticOrDirect method_name:{{[^$]*}}$noinline$privateStaticMethod
+ static void $noinline$testPrivateMethodInPackagePrivateClassViaResolvedPublicSubclass() {
+ try {
+ ResolvedPublicSubclassOfPackagePrivateClass.$noinline$privateStaticMethod();
+ throw new Error("Unreachable");
+ } catch (IllegalAccessError expected) {}
+ }
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testPackagePrivateMethodInResolvedPackagePrivateClass() builder (after)
+ /// CHECK: InvokeUnresolved method_name:{{[^$]*}}$noinline$staticMethod
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testPackagePrivateMethodInResolvedPackagePrivateClass() builder (after)
+ /// CHECK-NOT: InvokeStaticOrDirect method_name:{{[^$]*}}$noinline$staticMethod
+ static void $noinline$testPackagePrivateMethodInResolvedPackagePrivateClass() {
+ try {
+ ResolvedPackagePrivateClass.$noinline$staticMethod();
+ throw new Error("Unreachable");
+ } catch (IllegalAccessError expected) {}
+ }
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testPackagePrivateMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK: InvokeUnresolved method_name:{{[^$]*}}$noinline$staticMethod
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass2.$noinline$testPackagePrivateMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK-NOT: InvokeStaticOrDirect method_name:{{[^$]*}}$noinline$staticMethod
+ static void $noinline$testPackagePrivateMethodInPackagePrivateClassViaResolvedPublicSubclass() {
+ try {
+ ResolvedPublicSubclassOfPackagePrivateClass.$noinline$staticMethod();
+ throw new Error("Unreachable");
+ } catch (IllegalAccessError expected) {}
+ }
+}