1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2020 The Android Open Source Project 3*795d594fSAndroid Build Coastguard Worker * 4*795d594fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*795d594fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*795d594fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*795d594fSAndroid Build Coastguard Worker * 8*795d594fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*795d594fSAndroid Build Coastguard Worker * 10*795d594fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*795d594fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*795d594fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*795d594fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*795d594fSAndroid Build Coastguard Worker * limitations under the License. 15*795d594fSAndroid Build Coastguard Worker */ 16*795d594fSAndroid Build Coastguard Worker 17*795d594fSAndroid Build Coastguard Worker package resolved; 18*795d594fSAndroid Build Coastguard Worker 19*795d594fSAndroid Build Coastguard Worker import getters.GetPublicSubclassOfUnresolvedClass2; 20*795d594fSAndroid Build Coastguard Worker import unresolved.UnresolvedPublicClass; 21*795d594fSAndroid Build Coastguard Worker 22*795d594fSAndroid Build Coastguard Worker // This class is defined by the child class loader, so access to 23*795d594fSAndroid Build Coastguard Worker // package-private classes and members defined in the parent class 24*795d594fSAndroid Build Coastguard Worker // loader is illegal even though the package name is the same. 25*795d594fSAndroid Build Coastguard Worker public class PublicSubclassOfUnresolvedClass2 extends UnresolvedPublicClass { $noinline$main()26*795d594fSAndroid Build Coastguard Worker public static void $noinline$main() { 27*795d594fSAndroid Build Coastguard Worker $noinline$testReferrersClass(); 28*795d594fSAndroid Build Coastguard Worker $noinline$testInlinedReferrersClass(); 29*795d594fSAndroid Build Coastguard Worker $noinline$testInlinedReferrersClassFromSamePackage(); 30*795d594fSAndroid Build Coastguard Worker 31*795d594fSAndroid Build Coastguard Worker $noinline$testResolvedPublicClass(); 32*795d594fSAndroid Build Coastguard Worker $noinline$testResolvedPackagePrivateClass(); 33*795d594fSAndroid Build Coastguard Worker 34*795d594fSAndroid Build Coastguard Worker $noinline$testPublicFieldInResolvedPackagePrivateClass(); 35*795d594fSAndroid Build Coastguard Worker $noinline$testPublicFieldInPackagePrivateClassViaResolvedPublicSubclass(); 36*795d594fSAndroid Build Coastguard Worker $noinline$testPrivateFieldInResolvedPackagePrivateClass(); 37*795d594fSAndroid Build Coastguard Worker $noinline$testPrivateFieldInPackagePrivateClassViaResolvedPublicSubclass(); 38*795d594fSAndroid Build Coastguard Worker $noinline$testPackagePrivateFieldInResolvedPackagePrivateClass(); 39*795d594fSAndroid Build Coastguard Worker $noinline$testPackagePrivateFieldInPackagePrivateClassViaResolvedPublicSubclass(); 40*795d594fSAndroid Build Coastguard Worker 41*795d594fSAndroid Build Coastguard Worker $noinline$testPublicMethodInResolvedPackagePrivateClass(); 42*795d594fSAndroid Build Coastguard Worker $noinline$testPublicMethodInPackagePrivateClassViaResolvedPublicSubclass(); 43*795d594fSAndroid Build Coastguard Worker $noinline$testPrivateMethodInResolvedPackagePrivateClass(); 44*795d594fSAndroid Build Coastguard Worker $noinline$testPrivateMethodInPackagePrivateClassViaResolvedPublicSubclass(); 45*795d594fSAndroid Build Coastguard Worker $noinline$testPackagePrivateMethodInResolvedPackagePrivateClass(); 46*795d594fSAndroid Build Coastguard Worker $noinline$testPackagePrivateMethodInPackagePrivateClassViaResolvedPublicSubclass(); 47*795d594fSAndroid Build Coastguard Worker 48*795d594fSAndroid Build Coastguard Worker System.out.println("PublicSubclassOfUnresolvedClass2 passed"); 49*795d594fSAndroid Build Coastguard Worker } 50*795d594fSAndroid Build Coastguard Worker 51*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testReferrersClass() builder (after) 52*795d594fSAndroid Build Coastguard Worker /// CHECK: LoadClass class_name:resolved.PublicSubclassOfUnresolvedClass2 needs_access_check:false $noinline$testReferrersClass()53*795d594fSAndroid Build Coastguard Worker static void $noinline$testReferrersClass() { 54*795d594fSAndroid Build Coastguard Worker Class<?> c = PublicSubclassOfUnresolvedClass2.class; 55*795d594fSAndroid Build Coastguard Worker } 56*795d594fSAndroid Build Coastguard Worker 57*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testInlinedReferrersClass() inliner (after) 58*795d594fSAndroid Build Coastguard Worker // CHECK: LoadClass class_name:resolved.PublicSubclassOfUnresolvedClass2 needs_access_check:false $noinline$testInlinedReferrersClass()59*795d594fSAndroid Build Coastguard Worker static void $noinline$testInlinedReferrersClass() { 60*795d594fSAndroid Build Coastguard Worker // TODO: Make $inline$ and enable CHECK above when we relax the verifier. b/28313047 61*795d594fSAndroid Build Coastguard Worker Class<?> c = GetPublicSubclassOfUnresolvedClass2.get(); 62*795d594fSAndroid Build Coastguard Worker } 63*795d594fSAndroid Build Coastguard Worker 64*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testInlinedReferrersClassFromSamePackage() inliner (after) 65*795d594fSAndroid Build Coastguard Worker // CHECK: LoadClass class_name:resolved.PublicSubclassOfUnresolvedClass2 needs_access_check:true $noinline$testInlinedReferrersClassFromSamePackage()66*795d594fSAndroid Build Coastguard Worker static void $noinline$testInlinedReferrersClassFromSamePackage() { 67*795d594fSAndroid Build Coastguard Worker // Trying to resolve this class by name in parent class loader throws NoClassDefFoundError. 68*795d594fSAndroid Build Coastguard Worker try{ 69*795d594fSAndroid Build Coastguard Worker // TODO: Make $inline$ and enable CHECK above when we relax the verifier. b/28313047 70*795d594fSAndroid Build Coastguard Worker Class<?> c = GetPublicSubclassOfUnresolvedClass2FromSamePackage.get(); 71*795d594fSAndroid Build Coastguard Worker throw new Error("Unreachable"); 72*795d594fSAndroid Build Coastguard Worker } catch (NoClassDefFoundError expected) {} 73*795d594fSAndroid Build Coastguard Worker } 74*795d594fSAndroid Build Coastguard Worker 75*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testResolvedPublicClass() builder (after) 76*795d594fSAndroid Build Coastguard Worker /// CHECK: LoadClass class_name:resolved.ResolvedPublicSubclassOfPackagePrivateClass needs_access_check:false $noinline$testResolvedPublicClass()77*795d594fSAndroid Build Coastguard Worker static void $noinline$testResolvedPublicClass() { 78*795d594fSAndroid Build Coastguard Worker Class<?> c = ResolvedPublicSubclassOfPackagePrivateClass.class; 79*795d594fSAndroid Build Coastguard Worker } 80*795d594fSAndroid Build Coastguard Worker 81*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testResolvedPackagePrivateClass() builder (after) 82*795d594fSAndroid Build Coastguard Worker /// CHECK: LoadClass class_name:resolved.ResolvedPackagePrivateClass needs_access_check:true $noinline$testResolvedPackagePrivateClass()83*795d594fSAndroid Build Coastguard Worker static void $noinline$testResolvedPackagePrivateClass() { 84*795d594fSAndroid Build Coastguard Worker try { 85*795d594fSAndroid Build Coastguard Worker Class<?> c = ResolvedPackagePrivateClass.class; 86*795d594fSAndroid Build Coastguard Worker throw new Error("Unreachable"); 87*795d594fSAndroid Build Coastguard Worker } catch (IllegalAccessError expected) {} 88*795d594fSAndroid Build Coastguard Worker } 89*795d594fSAndroid Build Coastguard Worker 90*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testPublicFieldInResolvedPackagePrivateClass() builder (after) 91*795d594fSAndroid Build Coastguard Worker /// CHECK: UnresolvedStaticFieldSet 92*795d594fSAndroid Build Coastguard Worker 93*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testPublicFieldInResolvedPackagePrivateClass() builder (after) 94*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: StaticFieldSet $noinline$testPublicFieldInResolvedPackagePrivateClass()95*795d594fSAndroid Build Coastguard Worker static void $noinline$testPublicFieldInResolvedPackagePrivateClass() { 96*795d594fSAndroid Build Coastguard Worker try { 97*795d594fSAndroid Build Coastguard Worker ResolvedPackagePrivateClass.publicIntField = 42; 98*795d594fSAndroid Build Coastguard Worker throw new Error("Unreachable"); 99*795d594fSAndroid Build Coastguard Worker } catch (IllegalAccessError expected) {} 100*795d594fSAndroid Build Coastguard Worker } 101*795d594fSAndroid Build Coastguard Worker 102*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testPublicFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after) 103*795d594fSAndroid Build Coastguard Worker /// CHECK: StaticFieldSet 104*795d594fSAndroid Build Coastguard Worker 105*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testPublicFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after) 106*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: UnresolvedStaticFieldSet $noinline$testPublicFieldInPackagePrivateClassViaResolvedPublicSubclass()107*795d594fSAndroid Build Coastguard Worker static void $noinline$testPublicFieldInPackagePrivateClassViaResolvedPublicSubclass() { 108*795d594fSAndroid Build Coastguard Worker ResolvedPublicSubclassOfPackagePrivateClass.publicIntField = 42; 109*795d594fSAndroid Build Coastguard Worker } 110*795d594fSAndroid Build Coastguard Worker 111*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testPrivateFieldInResolvedPackagePrivateClass() builder (after) 112*795d594fSAndroid Build Coastguard Worker /// CHECK: UnresolvedStaticFieldSet 113*795d594fSAndroid Build Coastguard Worker 114*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testPrivateFieldInResolvedPackagePrivateClass() builder (after) 115*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: StaticFieldSet $noinline$testPrivateFieldInResolvedPackagePrivateClass()116*795d594fSAndroid Build Coastguard Worker static void $noinline$testPrivateFieldInResolvedPackagePrivateClass() { 117*795d594fSAndroid Build Coastguard Worker try { 118*795d594fSAndroid Build Coastguard Worker ResolvedPackagePrivateClass.privateIntField = 42; 119*795d594fSAndroid Build Coastguard Worker throw new Error("Unreachable"); 120*795d594fSAndroid Build Coastguard Worker } catch (IllegalAccessError expected) {} 121*795d594fSAndroid Build Coastguard Worker } 122*795d594fSAndroid Build Coastguard Worker 123*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testPrivateFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after) 124*795d594fSAndroid Build Coastguard Worker /// CHECK: UnresolvedStaticFieldSet 125*795d594fSAndroid Build Coastguard Worker 126*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testPrivateFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after) 127*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: StaticFieldSet $noinline$testPrivateFieldInPackagePrivateClassViaResolvedPublicSubclass()128*795d594fSAndroid Build Coastguard Worker static void $noinline$testPrivateFieldInPackagePrivateClassViaResolvedPublicSubclass() { 129*795d594fSAndroid Build Coastguard Worker try { 130*795d594fSAndroid Build Coastguard Worker ResolvedPublicSubclassOfPackagePrivateClass.privateIntField = 42; 131*795d594fSAndroid Build Coastguard Worker throw new Error("Unreachable"); 132*795d594fSAndroid Build Coastguard Worker } catch (IllegalAccessError expected) {} 133*795d594fSAndroid Build Coastguard Worker } 134*795d594fSAndroid Build Coastguard Worker 135*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testPackagePrivateFieldInResolvedPackagePrivateClass() builder (after) 136*795d594fSAndroid Build Coastguard Worker /// CHECK: UnresolvedStaticFieldSet 137*795d594fSAndroid Build Coastguard Worker 138*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testPackagePrivateFieldInResolvedPackagePrivateClass() builder (after) 139*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: StaticFieldSet $noinline$testPackagePrivateFieldInResolvedPackagePrivateClass()140*795d594fSAndroid Build Coastguard Worker static void $noinline$testPackagePrivateFieldInResolvedPackagePrivateClass() { 141*795d594fSAndroid Build Coastguard Worker try { 142*795d594fSAndroid Build Coastguard Worker ResolvedPackagePrivateClass.intField = 42; 143*795d594fSAndroid Build Coastguard Worker throw new Error("Unreachable"); 144*795d594fSAndroid Build Coastguard Worker } catch (IllegalAccessError expected) {} 145*795d594fSAndroid Build Coastguard Worker } 146*795d594fSAndroid Build Coastguard Worker 147*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testPackagePrivateFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after) 148*795d594fSAndroid Build Coastguard Worker /// CHECK: UnresolvedStaticFieldSet 149*795d594fSAndroid Build Coastguard Worker 150*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testPackagePrivateFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after) 151*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: StaticFieldSet $noinline$testPackagePrivateFieldInPackagePrivateClassViaResolvedPublicSubclass()152*795d594fSAndroid Build Coastguard Worker static void $noinline$testPackagePrivateFieldInPackagePrivateClassViaResolvedPublicSubclass() { 153*795d594fSAndroid Build Coastguard Worker try { 154*795d594fSAndroid Build Coastguard Worker ResolvedPublicSubclassOfPackagePrivateClass.intField = 42; 155*795d594fSAndroid Build Coastguard Worker throw new Error("Unreachable"); 156*795d594fSAndroid Build Coastguard Worker } catch (IllegalAccessError expected) {} 157*795d594fSAndroid Build Coastguard Worker } 158*795d594fSAndroid Build Coastguard Worker 159*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testPublicMethodInResolvedPackagePrivateClass() builder (after) 160*795d594fSAndroid Build Coastguard Worker /// CHECK: InvokeUnresolved method_name:{{[^$]*}}$noinline$publicStaticMethod 161*795d594fSAndroid Build Coastguard Worker 162*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testPublicMethodInResolvedPackagePrivateClass() builder (after) 163*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect method_name:{{[^$]*}}$noinline$publicStaticMethod $noinline$testPublicMethodInResolvedPackagePrivateClass()164*795d594fSAndroid Build Coastguard Worker static void $noinline$testPublicMethodInResolvedPackagePrivateClass() { 165*795d594fSAndroid Build Coastguard Worker try { 166*795d594fSAndroid Build Coastguard Worker ResolvedPackagePrivateClass.$noinline$publicStaticMethod(); 167*795d594fSAndroid Build Coastguard Worker throw new Error("Unreachable"); 168*795d594fSAndroid Build Coastguard Worker } catch (IllegalAccessError expected) {} 169*795d594fSAndroid Build Coastguard Worker } 170*795d594fSAndroid Build Coastguard Worker 171*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testPublicMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after) 172*795d594fSAndroid Build Coastguard Worker /// CHECK: InvokeStaticOrDirect method_name:{{[^$]*}}$noinline$publicStaticMethod 173*795d594fSAndroid Build Coastguard Worker 174*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testPublicMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after) 175*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeUnresolved method_name:{{[^$]*}}$noinline$publicStaticMethod $noinline$testPublicMethodInPackagePrivateClassViaResolvedPublicSubclass()176*795d594fSAndroid Build Coastguard Worker static void $noinline$testPublicMethodInPackagePrivateClassViaResolvedPublicSubclass() { 177*795d594fSAndroid Build Coastguard Worker ResolvedPublicSubclassOfPackagePrivateClass.$noinline$publicStaticMethod(); 178*795d594fSAndroid Build Coastguard Worker } 179*795d594fSAndroid Build Coastguard Worker 180*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testPrivateMethodInResolvedPackagePrivateClass() builder (after) 181*795d594fSAndroid Build Coastguard Worker /// CHECK: InvokeUnresolved method_name:{{[^$]*}}$noinline$privateStaticMethod 182*795d594fSAndroid Build Coastguard Worker 183*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testPrivateMethodInResolvedPackagePrivateClass() builder (after) 184*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect method_name:{{[^$]*}}$noinline$privateStaticMethod $noinline$testPrivateMethodInResolvedPackagePrivateClass()185*795d594fSAndroid Build Coastguard Worker static void $noinline$testPrivateMethodInResolvedPackagePrivateClass() { 186*795d594fSAndroid Build Coastguard Worker try { 187*795d594fSAndroid Build Coastguard Worker ResolvedPackagePrivateClass.$noinline$privateStaticMethod(); 188*795d594fSAndroid Build Coastguard Worker throw new Error("Unreachable"); 189*795d594fSAndroid Build Coastguard Worker } catch (IllegalAccessError expected) {} 190*795d594fSAndroid Build Coastguard Worker } 191*795d594fSAndroid Build Coastguard Worker 192*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testPrivateMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after) 193*795d594fSAndroid Build Coastguard Worker /// CHECK: InvokeUnresolved method_name:{{[^$]*}}$noinline$privateStaticMethod 194*795d594fSAndroid Build Coastguard Worker 195*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testPrivateMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after) 196*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect method_name:{{[^$]*}}$noinline$privateStaticMethod $noinline$testPrivateMethodInPackagePrivateClassViaResolvedPublicSubclass()197*795d594fSAndroid Build Coastguard Worker static void $noinline$testPrivateMethodInPackagePrivateClassViaResolvedPublicSubclass() { 198*795d594fSAndroid Build Coastguard Worker try { 199*795d594fSAndroid Build Coastguard Worker ResolvedPublicSubclassOfPackagePrivateClass.$noinline$privateStaticMethod(); 200*795d594fSAndroid Build Coastguard Worker throw new Error("Unreachable"); 201*795d594fSAndroid Build Coastguard Worker } catch (IllegalAccessError expected) {} 202*795d594fSAndroid Build Coastguard Worker } 203*795d594fSAndroid Build Coastguard Worker 204*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testPackagePrivateMethodInResolvedPackagePrivateClass() builder (after) 205*795d594fSAndroid Build Coastguard Worker /// CHECK: InvokeUnresolved method_name:{{[^$]*}}$noinline$staticMethod 206*795d594fSAndroid Build Coastguard Worker 207*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testPackagePrivateMethodInResolvedPackagePrivateClass() builder (after) 208*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect method_name:{{[^$]*}}$noinline$staticMethod $noinline$testPackagePrivateMethodInResolvedPackagePrivateClass()209*795d594fSAndroid Build Coastguard Worker static void $noinline$testPackagePrivateMethodInResolvedPackagePrivateClass() { 210*795d594fSAndroid Build Coastguard Worker try { 211*795d594fSAndroid Build Coastguard Worker ResolvedPackagePrivateClass.$noinline$staticMethod(); 212*795d594fSAndroid Build Coastguard Worker throw new Error("Unreachable"); 213*795d594fSAndroid Build Coastguard Worker } catch (IllegalAccessError expected) {} 214*795d594fSAndroid Build Coastguard Worker } 215*795d594fSAndroid Build Coastguard Worker 216*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testPackagePrivateMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after) 217*795d594fSAndroid Build Coastguard Worker /// CHECK: InvokeUnresolved method_name:{{[^$]*}}$noinline$staticMethod 218*795d594fSAndroid Build Coastguard Worker 219*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass2.$noinline$testPackagePrivateMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after) 220*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect method_name:{{[^$]*}}$noinline$staticMethod $noinline$testPackagePrivateMethodInPackagePrivateClassViaResolvedPublicSubclass()221*795d594fSAndroid Build Coastguard Worker static void $noinline$testPackagePrivateMethodInPackagePrivateClassViaResolvedPublicSubclass() { 222*795d594fSAndroid Build Coastguard Worker try { 223*795d594fSAndroid Build Coastguard Worker ResolvedPublicSubclassOfPackagePrivateClass.$noinline$staticMethod(); 224*795d594fSAndroid Build Coastguard Worker throw new Error("Unreachable"); 225*795d594fSAndroid Build Coastguard Worker } catch (IllegalAccessError expected) {} 226*795d594fSAndroid Build Coastguard Worker } 227*795d594fSAndroid Build Coastguard Worker } 228