summaryrefslogtreecommitdiff
path: root/test/727-checker-unresolved-class/src
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
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')
-rw-r--r--test/727-checker-unresolved-class/src/Main.java28
-rw-r--r--test/727-checker-unresolved-class/src/resolved/ResolvedPackagePrivateClass.java18
-rw-r--r--test/727-checker-unresolved-class/src/resolved/SubclassOfUnresolvedClass.java163
-rw-r--r--test/727-checker-unresolved-class/src/unresolved/UnresolvedClass.java138
4 files changed, 337 insertions, 10 deletions
diff --git a/test/727-checker-unresolved-class/src/Main.java b/test/727-checker-unresolved-class/src/Main.java
index 04b403bc2e..5b6a46a662 100644
--- a/test/727-checker-unresolved-class/src/Main.java
+++ b/test/727-checker-unresolved-class/src/Main.java
@@ -14,11 +14,31 @@
* limitations under the License.
*/
-import unresolved.UnresolvedClass;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
public class Main {
- public static void main(String[] args) {
- UnresolvedClass.$noinline$main();
- System.out.println("passed");
+ public static String TEST_NAME = "727-checker-unresolved-class";
+
+ public static ClassLoader getClassLoaderFor(String location) throws Exception {
+ try {
+ Class<?> class_loader_class = Class.forName("dalvik.system.PathClassLoader");
+ Constructor<?> ctor =
+ class_loader_class.getConstructor(String.class, ClassLoader.class);
+ /* on Dalvik, this is a DexFile; otherwise, it's null */
+ return (ClassLoader) ctor.newInstance(location + "/" + TEST_NAME + "-ex.jar",
+ Main.class.getClassLoader());
+ } catch (ClassNotFoundException e) {
+ // Running on RI. Use URLClassLoader.
+ return new java.net.URLClassLoader(
+ new java.net.URL[] { new java.net.URL("file://" + location + "/classes-ex/") });
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+ ClassLoader new_loader = getClassLoaderFor(System.getenv("DEX_LOCATION"));
+ Class<?> testClass = Class.forName("Test", true, new_loader);
+ Method testMain = testClass.getMethod("$noinline$main");
+ testMain.invoke(null);
}
}
diff --git a/test/727-checker-unresolved-class/src/resolved/ResolvedPackagePrivateClass.java b/test/727-checker-unresolved-class/src/resolved/ResolvedPackagePrivateClass.java
index 983eea9d41..132e967eda 100644
--- a/test/727-checker-unresolved-class/src/resolved/ResolvedPackagePrivateClass.java
+++ b/test/727-checker-unresolved-class/src/resolved/ResolvedPackagePrivateClass.java
@@ -17,8 +17,22 @@
package resolved;
// This class is used for compiling code that accesses its fields but it is
-// replaced by a package-private class from src2/ to make that access illegal.
+// replaced by a package-private class from src2/ with reduced access to
+// some members to test different access checks.
public class ResolvedPackagePrivateClass {
public static int publicIntField;
- static int intField;
+ public static int privateIntField;
+ public static int intField;
+
+ public static void $noinline$publicStaticMethod() {
+ System.out.println("ResolvedPackagePrivateClass.$noinline$publicStaticMethod()");
+ }
+
+ public static void $noinline$privateStaticMethod() {
+ System.out.println("ResolvedPackagePrivateClass.$noinline$privateStaticMethod()");
+ }
+
+ public static void $noinline$staticMethod() {
+ System.out.println("ResolvedPackagePrivateClass.$noinline$staticMethod()");
+ }
}
diff --git a/test/727-checker-unresolved-class/src/resolved/SubclassOfUnresolvedClass.java b/test/727-checker-unresolved-class/src/resolved/SubclassOfUnresolvedClass.java
new file mode 100644
index 0000000000..fb8327cdd5
--- /dev/null
+++ b/test/727-checker-unresolved-class/src/resolved/SubclassOfUnresolvedClass.java
@@ -0,0 +1,163 @@
+/*
+ * 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;
+
+public class SubclassOfUnresolvedClass 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("SubclassOfUnresolvedClass passed");
+ }
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass.$noinline$testPublicFieldInResolvedPackagePrivateClass() builder (after)
+ /// CHECK: UnresolvedStaticFieldSet
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass.$noinline$testPublicFieldInResolvedPackagePrivateClass() builder (after)
+ /// CHECK-NOT: StaticFieldSet
+ static void $noinline$testPublicFieldInResolvedPackagePrivateClass() {
+ // TODO: Use StaticFieldSet.
+ ResolvedPackagePrivateClass.publicIntField = 42;
+ }
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass.$noinline$testPublicFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK: UnresolvedStaticFieldSet
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass.$noinline$testPublicFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK-NOT: StaticFieldSet
+ static void $noinline$testPublicFieldInPackagePrivateClassViaResolvedPublicSubclass() {
+ // TODO: Use StaticFieldSet.
+ ResolvedPublicSubclassOfPackagePrivateClass.publicIntField = 42;
+ }
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass.$noinline$testPrivateFieldInResolvedPackagePrivateClass() builder (after)
+ /// CHECK: UnresolvedStaticFieldSet
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass.$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.SubclassOfUnresolvedClass.$noinline$testPrivateFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK: UnresolvedStaticFieldSet
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass.$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.SubclassOfUnresolvedClass.$noinline$testPackagePrivateFieldInResolvedPackagePrivateClass() builder (after)
+ /// CHECK: UnresolvedStaticFieldSet
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass.$noinline$testPackagePrivateFieldInResolvedPackagePrivateClass() builder (after)
+ /// CHECK-NOT: StaticFieldSet
+ static void $noinline$testPackagePrivateFieldInResolvedPackagePrivateClass() {
+ // TODO: Use StaticFieldSet.
+ ResolvedPackagePrivateClass.intField = 42;
+ }
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass.$noinline$testPackagePrivateFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK: UnresolvedStaticFieldSet
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass.$noinline$testPackagePrivateFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK-NOT: StaticFieldSet
+ static void $noinline$testPackagePrivateFieldInPackagePrivateClassViaResolvedPublicSubclass() {
+ // TODO: Use StaticFieldSet.
+ ResolvedPublicSubclassOfPackagePrivateClass.intField = 42;
+ }
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass.$noinline$testPublicMethodInResolvedPackagePrivateClass() builder (after)
+ /// CHECK: InvokeStaticOrDirect method_name:{{[^$]*}}$noinline$publicStaticMethod
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass.$noinline$testPublicMethodInResolvedPackagePrivateClass() builder (after)
+ /// CHECK-NOT: InvokeUnresolved method_name:{{[^$]*}}$noinline$publicStaticMethod
+ static void $noinline$testPublicMethodInResolvedPackagePrivateClass() {
+ ResolvedPackagePrivateClass.$noinline$publicStaticMethod();
+ }
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass.$noinline$testPublicMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK: InvokeStaticOrDirect method_name:{{[^$]*}}$noinline$publicStaticMethod
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass.$noinline$testPublicMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK-NOT: InvokeUnresolved method_name:{{[^$]*}}$noinline$publicStaticMethod
+ static void $noinline$testPublicMethodInPackagePrivateClassViaResolvedPublicSubclass() {
+ ResolvedPublicSubclassOfPackagePrivateClass.$noinline$publicStaticMethod();
+ }
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass.$noinline$testPrivateMethodInResolvedPackagePrivateClass() builder (after)
+ /// CHECK: InvokeUnresolved method_name:{{[^$]*}}$noinline$privateStaticMethod
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass.$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.SubclassOfUnresolvedClass.$noinline$testPrivateMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK: InvokeUnresolved method_name:{{[^$]*}}$noinline$privateStaticMethod
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass.$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.SubclassOfUnresolvedClass.$noinline$testPackagePrivateMethodInResolvedPackagePrivateClass() builder (after)
+ /// CHECK: InvokeStaticOrDirect method_name:{{[^$]*}}$noinline$staticMethod
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass.$noinline$testPackagePrivateMethodInResolvedPackagePrivateClass() builder (after)
+ /// CHECK-NOT: InvokeUnresolved method_name:{{[^$]*}}$noinline$staticMethod
+ static void $noinline$testPackagePrivateMethodInResolvedPackagePrivateClass() {
+ ResolvedPackagePrivateClass.$noinline$staticMethod();
+ }
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass.$noinline$testPackagePrivateMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK: InvokeStaticOrDirect method_name:{{[^$]*}}$noinline$staticMethod
+
+ /// CHECK-START: void resolved.SubclassOfUnresolvedClass.$noinline$testPackagePrivateMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK-NOT: InvokeUnresolved method_name:{{[^$]*}}$noinline$staticMethod
+ static void $noinline$testPackagePrivateMethodInPackagePrivateClassViaResolvedPublicSubclass() {
+ ResolvedPublicSubclassOfPackagePrivateClass.$noinline$staticMethod();
+ }
+}
diff --git a/test/727-checker-unresolved-class/src/unresolved/UnresolvedClass.java b/test/727-checker-unresolved-class/src/unresolved/UnresolvedClass.java
index 65e072de72..73110697ac 100644
--- a/test/727-checker-unresolved-class/src/unresolved/UnresolvedClass.java
+++ b/test/727-checker-unresolved-class/src/unresolved/UnresolvedClass.java
@@ -22,7 +22,20 @@ import resolved.ResolvedPublicSubclassOfPackagePrivateClass;
public class UnresolvedClass {
public static void $noinline$main() {
$noinline$testPublicFieldInResolvedPackagePrivateClass();
- $noinline$testPublicFieldInPackagePrivateClassReferencedViaResolvedPublicSubclass();
+ $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("UnresolvedClass passed");
}
/// CHECK-START: void unresolved.UnresolvedClass.$noinline$testPublicFieldInResolvedPackagePrivateClass() builder (after)
@@ -37,13 +50,130 @@ public class UnresolvedClass {
} catch (IllegalAccessError expected) {}
}
- /// CHECK-START: void unresolved.UnresolvedClass.$noinline$testPublicFieldInPackagePrivateClassReferencedViaResolvedPublicSubclass() builder (after)
+ /// CHECK-START: void unresolved.UnresolvedClass.$noinline$testPublicFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
/// CHECK: UnresolvedStaticFieldSet
- /// CHECK-START: void unresolved.UnresolvedClass.$noinline$testPublicFieldInPackagePrivateClassReferencedViaResolvedPublicSubclass() builder (after)
+ /// CHECK-START: void unresolved.UnresolvedClass.$noinline$testPublicFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
/// CHECK-NOT: StaticFieldSet
- static void $noinline$testPublicFieldInPackagePrivateClassReferencedViaResolvedPublicSubclass() {
+ static void $noinline$testPublicFieldInPackagePrivateClassViaResolvedPublicSubclass() {
// TODO: Use StaticFieldSet when the referenced class is public.
ResolvedPublicSubclassOfPackagePrivateClass.publicIntField = 42;
}
+
+ /// CHECK-START: void unresolved.UnresolvedClass.$noinline$testPrivateFieldInResolvedPackagePrivateClass() builder (after)
+ /// CHECK: UnresolvedStaticFieldSet
+
+ /// CHECK-START: void unresolved.UnresolvedClass.$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 unresolved.UnresolvedClass.$noinline$testPrivateFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK: UnresolvedStaticFieldSet
+
+ /// CHECK-START: void unresolved.UnresolvedClass.$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 unresolved.UnresolvedClass.$noinline$testPackagePrivateFieldInResolvedPackagePrivateClass() builder (after)
+ /// CHECK: UnresolvedStaticFieldSet
+
+ /// CHECK-START: void unresolved.UnresolvedClass.$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 unresolved.UnresolvedClass.$noinline$testPackagePrivateFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK: UnresolvedStaticFieldSet
+
+ /// CHECK-START: void unresolved.UnresolvedClass.$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 unresolved.UnresolvedClass.$noinline$testPublicMethodInResolvedPackagePrivateClass() builder (after)
+ /// CHECK: InvokeUnresolved method_name:{{[^$]*}}$noinline$publicStaticMethod
+
+ /// CHECK-START: void unresolved.UnresolvedClass.$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 unresolved.UnresolvedClass.$noinline$testPublicMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK: InvokeStaticOrDirect method_name:{{[^$]*}}$noinline$publicStaticMethod
+
+ /// CHECK-START: void unresolved.UnresolvedClass.$noinline$testPublicMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK-NOT: InvokeUnresolved method_name:{{[^$]*}}$noinline$publicStaticMethod
+ static void $noinline$testPublicMethodInPackagePrivateClassViaResolvedPublicSubclass() {
+ ResolvedPublicSubclassOfPackagePrivateClass.$noinline$publicStaticMethod();
+ }
+
+ /// CHECK-START: void unresolved.UnresolvedClass.$noinline$testPrivateMethodInResolvedPackagePrivateClass() builder (after)
+ /// CHECK: InvokeUnresolved method_name:{{[^$]*}}$noinline$privateStaticMethod
+
+ /// CHECK-START: void unresolved.UnresolvedClass.$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 unresolved.UnresolvedClass.$noinline$testPrivateMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK: InvokeUnresolved method_name:{{[^$]*}}$noinline$privateStaticMethod
+
+ /// CHECK-START: void unresolved.UnresolvedClass.$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 unresolved.UnresolvedClass.$noinline$testPackagePrivateMethodInResolvedPackagePrivateClass() builder (after)
+ /// CHECK: InvokeUnresolved method_name:{{[^$]*}}$noinline$staticMethod
+
+ /// CHECK-START: void unresolved.UnresolvedClass.$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 unresolved.UnresolvedClass.$noinline$testPackagePrivateMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after)
+ /// CHECK: InvokeUnresolved method_name:{{[^$]*}}$noinline$staticMethod
+
+ /// CHECK-START: void unresolved.UnresolvedClass.$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) {}
+ }
}