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.GetPublicSubclassOfUnresolvedClass; 20*795d594fSAndroid Build Coastguard Worker import unresolved.UnresolvedPublicClass; 21*795d594fSAndroid Build Coastguard Worker 22*795d594fSAndroid Build Coastguard Worker public class PublicSubclassOfUnresolvedClass extends UnresolvedPublicClass { $noinline$main()23*795d594fSAndroid Build Coastguard Worker public static void $noinline$main() { 24*795d594fSAndroid Build Coastguard Worker $noinline$testReferrersClass(); 25*795d594fSAndroid Build Coastguard Worker $noinline$testInlinedReferrersClass(); 26*795d594fSAndroid Build Coastguard Worker $noinline$testInlinedReferrersClassFromSamePackage(); 27*795d594fSAndroid Build Coastguard Worker 28*795d594fSAndroid Build Coastguard Worker $noinline$testResolvedPublicClass(); 29*795d594fSAndroid Build Coastguard Worker $noinline$testResolvedPackagePrivateClass(); 30*795d594fSAndroid Build Coastguard Worker 31*795d594fSAndroid Build Coastguard Worker $noinline$testPublicFieldInResolvedPackagePrivateClass(); 32*795d594fSAndroid Build Coastguard Worker $noinline$testPublicFieldInPackagePrivateClassViaResolvedPublicSubclass(); 33*795d594fSAndroid Build Coastguard Worker $noinline$testPrivateFieldInResolvedPackagePrivateClass(); 34*795d594fSAndroid Build Coastguard Worker $noinline$testPrivateFieldInPackagePrivateClassViaResolvedPublicSubclass(); 35*795d594fSAndroid Build Coastguard Worker $noinline$testPackagePrivateFieldInResolvedPackagePrivateClass(); 36*795d594fSAndroid Build Coastguard Worker $noinline$testPackagePrivateFieldInPackagePrivateClassViaResolvedPublicSubclass(); 37*795d594fSAndroid Build Coastguard Worker 38*795d594fSAndroid Build Coastguard Worker $noinline$testPublicMethodInResolvedPackagePrivateClass(); 39*795d594fSAndroid Build Coastguard Worker $noinline$testPublicMethodInPackagePrivateClassViaResolvedPublicSubclass(); 40*795d594fSAndroid Build Coastguard Worker $noinline$testPrivateMethodInResolvedPackagePrivateClass(); 41*795d594fSAndroid Build Coastguard Worker $noinline$testPrivateMethodInPackagePrivateClassViaResolvedPublicSubclass(); 42*795d594fSAndroid Build Coastguard Worker $noinline$testPackagePrivateMethodInResolvedPackagePrivateClass(); 43*795d594fSAndroid Build Coastguard Worker $noinline$testPackagePrivateMethodInPackagePrivateClassViaResolvedPublicSubclass(); 44*795d594fSAndroid Build Coastguard Worker 45*795d594fSAndroid Build Coastguard Worker System.out.println("PublicSubclassOfUnresolvedClass passed"); 46*795d594fSAndroid Build Coastguard Worker } 47*795d594fSAndroid Build Coastguard Worker 48*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testReferrersClass() builder (after) 49*795d594fSAndroid Build Coastguard Worker /// CHECK: LoadClass class_name:resolved.PublicSubclassOfUnresolvedClass needs_access_check:false $noinline$testReferrersClass()50*795d594fSAndroid Build Coastguard Worker static void $noinline$testReferrersClass() { 51*795d594fSAndroid Build Coastguard Worker Class<?> c = PublicSubclassOfUnresolvedClass.class; 52*795d594fSAndroid Build Coastguard Worker } 53*795d594fSAndroid Build Coastguard Worker 54*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testInlinedReferrersClass() inliner (after) 55*795d594fSAndroid Build Coastguard Worker // CHECK: LoadClass class_name:resolved.PublicSubclassOfUnresolvedClass needs_access_check:false $noinline$testInlinedReferrersClass()56*795d594fSAndroid Build Coastguard Worker static void $noinline$testInlinedReferrersClass() { 57*795d594fSAndroid Build Coastguard Worker // TODO: Make $inline$ and enable CHECK above when we relax the verifier. b/28313047 58*795d594fSAndroid Build Coastguard Worker Class<?> c = GetPublicSubclassOfUnresolvedClass.get(); 59*795d594fSAndroid Build Coastguard Worker } 60*795d594fSAndroid Build Coastguard Worker 61*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testInlinedReferrersClassFromSamePackage() inliner (after) 62*795d594fSAndroid Build Coastguard Worker // CHECK: LoadClass class_name:resolved.PublicSubclassOfUnresolvedClass needs_access_check:false $noinline$testInlinedReferrersClassFromSamePackage()63*795d594fSAndroid Build Coastguard Worker static void $noinline$testInlinedReferrersClassFromSamePackage() { 64*795d594fSAndroid Build Coastguard Worker // TODO: Make $inline$ and enable CHECK above when we relax the verifier. b/28313047 65*795d594fSAndroid Build Coastguard Worker Class<?> c = GetPublicSubclassOfUnresolvedClassFromSamePackage.get(); 66*795d594fSAndroid Build Coastguard Worker } 67*795d594fSAndroid Build Coastguard Worker 68*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testResolvedPublicClass() builder (after) 69*795d594fSAndroid Build Coastguard Worker /// CHECK: LoadClass class_name:resolved.ResolvedPublicSubclassOfPackagePrivateClass needs_access_check:false $noinline$testResolvedPublicClass()70*795d594fSAndroid Build Coastguard Worker static void $noinline$testResolvedPublicClass() { 71*795d594fSAndroid Build Coastguard Worker Class<?> c = ResolvedPublicSubclassOfPackagePrivateClass.class; 72*795d594fSAndroid Build Coastguard Worker } 73*795d594fSAndroid Build Coastguard Worker 74*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testResolvedPackagePrivateClass() builder (after) 75*795d594fSAndroid Build Coastguard Worker /// CHECK: LoadClass class_name:resolved.ResolvedPackagePrivateClass needs_access_check:false $noinline$testResolvedPackagePrivateClass()76*795d594fSAndroid Build Coastguard Worker static void $noinline$testResolvedPackagePrivateClass() { 77*795d594fSAndroid Build Coastguard Worker Class<?> c = ResolvedPackagePrivateClass.class; 78*795d594fSAndroid Build Coastguard Worker } 79*795d594fSAndroid Build Coastguard Worker 80*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testPublicFieldInResolvedPackagePrivateClass() builder (after) 81*795d594fSAndroid Build Coastguard Worker /// CHECK: StaticFieldSet 82*795d594fSAndroid Build Coastguard Worker 83*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testPublicFieldInResolvedPackagePrivateClass() builder (after) 84*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: UnresolvedStaticFieldSet $noinline$testPublicFieldInResolvedPackagePrivateClass()85*795d594fSAndroid Build Coastguard Worker static void $noinline$testPublicFieldInResolvedPackagePrivateClass() { 86*795d594fSAndroid Build Coastguard Worker ResolvedPackagePrivateClass.publicIntField = 42; 87*795d594fSAndroid Build Coastguard Worker } 88*795d594fSAndroid Build Coastguard Worker 89*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testPublicFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after) 90*795d594fSAndroid Build Coastguard Worker /// CHECK: StaticFieldSet 91*795d594fSAndroid Build Coastguard Worker 92*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testPublicFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after) 93*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: UnresolvedStaticFieldSet $noinline$testPublicFieldInPackagePrivateClassViaResolvedPublicSubclass()94*795d594fSAndroid Build Coastguard Worker static void $noinline$testPublicFieldInPackagePrivateClassViaResolvedPublicSubclass() { 95*795d594fSAndroid Build Coastguard Worker ResolvedPublicSubclassOfPackagePrivateClass.publicIntField = 42; 96*795d594fSAndroid Build Coastguard Worker } 97*795d594fSAndroid Build Coastguard Worker 98*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testPrivateFieldInResolvedPackagePrivateClass() builder (after) 99*795d594fSAndroid Build Coastguard Worker /// CHECK: UnresolvedStaticFieldSet 100*795d594fSAndroid Build Coastguard Worker 101*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testPrivateFieldInResolvedPackagePrivateClass() builder (after) 102*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: StaticFieldSet $noinline$testPrivateFieldInResolvedPackagePrivateClass()103*795d594fSAndroid Build Coastguard Worker static void $noinline$testPrivateFieldInResolvedPackagePrivateClass() { 104*795d594fSAndroid Build Coastguard Worker try { 105*795d594fSAndroid Build Coastguard Worker ResolvedPackagePrivateClass.privateIntField = 42; 106*795d594fSAndroid Build Coastguard Worker throw new Error("Unreachable"); 107*795d594fSAndroid Build Coastguard Worker } catch (IllegalAccessError expected) {} 108*795d594fSAndroid Build Coastguard Worker } 109*795d594fSAndroid Build Coastguard Worker 110*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testPrivateFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after) 111*795d594fSAndroid Build Coastguard Worker /// CHECK: UnresolvedStaticFieldSet 112*795d594fSAndroid Build Coastguard Worker 113*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testPrivateFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after) 114*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: StaticFieldSet $noinline$testPrivateFieldInPackagePrivateClassViaResolvedPublicSubclass()115*795d594fSAndroid Build Coastguard Worker static void $noinline$testPrivateFieldInPackagePrivateClassViaResolvedPublicSubclass() { 116*795d594fSAndroid Build Coastguard Worker try { 117*795d594fSAndroid Build Coastguard Worker ResolvedPublicSubclassOfPackagePrivateClass.privateIntField = 42; 118*795d594fSAndroid Build Coastguard Worker throw new Error("Unreachable"); 119*795d594fSAndroid Build Coastguard Worker } catch (IllegalAccessError expected) {} 120*795d594fSAndroid Build Coastguard Worker } 121*795d594fSAndroid Build Coastguard Worker 122*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testPackagePrivateFieldInResolvedPackagePrivateClass() builder (after) 123*795d594fSAndroid Build Coastguard Worker /// CHECK: StaticFieldSet 124*795d594fSAndroid Build Coastguard Worker 125*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testPackagePrivateFieldInResolvedPackagePrivateClass() builder (after) 126*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: UnresolvedStaticFieldSet $noinline$testPackagePrivateFieldInResolvedPackagePrivateClass()127*795d594fSAndroid Build Coastguard Worker static void $noinline$testPackagePrivateFieldInResolvedPackagePrivateClass() { 128*795d594fSAndroid Build Coastguard Worker ResolvedPackagePrivateClass.intField = 42; 129*795d594fSAndroid Build Coastguard Worker } 130*795d594fSAndroid Build Coastguard Worker 131*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testPackagePrivateFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after) 132*795d594fSAndroid Build Coastguard Worker /// CHECK: StaticFieldSet 133*795d594fSAndroid Build Coastguard Worker 134*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testPackagePrivateFieldInPackagePrivateClassViaResolvedPublicSubclass() builder (after) 135*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: UnresolvedStaticFieldSet $noinline$testPackagePrivateFieldInPackagePrivateClassViaResolvedPublicSubclass()136*795d594fSAndroid Build Coastguard Worker static void $noinline$testPackagePrivateFieldInPackagePrivateClassViaResolvedPublicSubclass() { 137*795d594fSAndroid Build Coastguard Worker ResolvedPublicSubclassOfPackagePrivateClass.intField = 42; 138*795d594fSAndroid Build Coastguard Worker } 139*795d594fSAndroid Build Coastguard Worker 140*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testPublicMethodInResolvedPackagePrivateClass() builder (after) 141*795d594fSAndroid Build Coastguard Worker /// CHECK: InvokeStaticOrDirect method_name:{{[^$]*}}$noinline$publicStaticMethod 142*795d594fSAndroid Build Coastguard Worker 143*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testPublicMethodInResolvedPackagePrivateClass() builder (after) 144*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeUnresolved method_name:{{[^$]*}}$noinline$publicStaticMethod $noinline$testPublicMethodInResolvedPackagePrivateClass()145*795d594fSAndroid Build Coastguard Worker static void $noinline$testPublicMethodInResolvedPackagePrivateClass() { 146*795d594fSAndroid Build Coastguard Worker ResolvedPackagePrivateClass.$noinline$publicStaticMethod(); 147*795d594fSAndroid Build Coastguard Worker } 148*795d594fSAndroid Build Coastguard Worker 149*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testPublicMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after) 150*795d594fSAndroid Build Coastguard Worker /// CHECK: InvokeStaticOrDirect method_name:{{[^$]*}}$noinline$publicStaticMethod 151*795d594fSAndroid Build Coastguard Worker 152*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testPublicMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after) 153*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeUnresolved method_name:{{[^$]*}}$noinline$publicStaticMethod $noinline$testPublicMethodInPackagePrivateClassViaResolvedPublicSubclass()154*795d594fSAndroid Build Coastguard Worker static void $noinline$testPublicMethodInPackagePrivateClassViaResolvedPublicSubclass() { 155*795d594fSAndroid Build Coastguard Worker ResolvedPublicSubclassOfPackagePrivateClass.$noinline$publicStaticMethod(); 156*795d594fSAndroid Build Coastguard Worker } 157*795d594fSAndroid Build Coastguard Worker 158*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testPrivateMethodInResolvedPackagePrivateClass() builder (after) 159*795d594fSAndroid Build Coastguard Worker /// CHECK: InvokeUnresolved method_name:{{[^$]*}}$noinline$privateStaticMethod 160*795d594fSAndroid Build Coastguard Worker 161*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testPrivateMethodInResolvedPackagePrivateClass() builder (after) 162*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect method_name:{{[^$]*}}$noinline$privateStaticMethod $noinline$testPrivateMethodInResolvedPackagePrivateClass()163*795d594fSAndroid Build Coastguard Worker static void $noinline$testPrivateMethodInResolvedPackagePrivateClass() { 164*795d594fSAndroid Build Coastguard Worker try { 165*795d594fSAndroid Build Coastguard Worker ResolvedPackagePrivateClass.$noinline$privateStaticMethod(); 166*795d594fSAndroid Build Coastguard Worker throw new Error("Unreachable"); 167*795d594fSAndroid Build Coastguard Worker } catch (IllegalAccessError expected) {} 168*795d594fSAndroid Build Coastguard Worker } 169*795d594fSAndroid Build Coastguard Worker 170*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testPrivateMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after) 171*795d594fSAndroid Build Coastguard Worker /// CHECK: InvokeUnresolved method_name:{{[^$]*}}$noinline$privateStaticMethod 172*795d594fSAndroid Build Coastguard Worker 173*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testPrivateMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after) 174*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect method_name:{{[^$]*}}$noinline$privateStaticMethod $noinline$testPrivateMethodInPackagePrivateClassViaResolvedPublicSubclass()175*795d594fSAndroid Build Coastguard Worker static void $noinline$testPrivateMethodInPackagePrivateClassViaResolvedPublicSubclass() { 176*795d594fSAndroid Build Coastguard Worker try { 177*795d594fSAndroid Build Coastguard Worker ResolvedPublicSubclassOfPackagePrivateClass.$noinline$privateStaticMethod(); 178*795d594fSAndroid Build Coastguard Worker throw new Error("Unreachable"); 179*795d594fSAndroid Build Coastguard Worker } catch (IllegalAccessError expected) {} 180*795d594fSAndroid Build Coastguard Worker } 181*795d594fSAndroid Build Coastguard Worker 182*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testPackagePrivateMethodInResolvedPackagePrivateClass() builder (after) 183*795d594fSAndroid Build Coastguard Worker /// CHECK: InvokeStaticOrDirect method_name:{{[^$]*}}$noinline$staticMethod 184*795d594fSAndroid Build Coastguard Worker 185*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testPackagePrivateMethodInResolvedPackagePrivateClass() builder (after) 186*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeUnresolved method_name:{{[^$]*}}$noinline$staticMethod $noinline$testPackagePrivateMethodInResolvedPackagePrivateClass()187*795d594fSAndroid Build Coastguard Worker static void $noinline$testPackagePrivateMethodInResolvedPackagePrivateClass() { 188*795d594fSAndroid Build Coastguard Worker ResolvedPackagePrivateClass.$noinline$staticMethod(); 189*795d594fSAndroid Build Coastguard Worker } 190*795d594fSAndroid Build Coastguard Worker 191*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testPackagePrivateMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after) 192*795d594fSAndroid Build Coastguard Worker /// CHECK: InvokeStaticOrDirect method_name:{{[^$]*}}$noinline$staticMethod 193*795d594fSAndroid Build Coastguard Worker 194*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void resolved.PublicSubclassOfUnresolvedClass.$noinline$testPackagePrivateMethodInPackagePrivateClassViaResolvedPublicSubclass() builder (after) 195*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeUnresolved method_name:{{[^$]*}}$noinline$staticMethod $noinline$testPackagePrivateMethodInPackagePrivateClassViaResolvedPublicSubclass()196*795d594fSAndroid Build Coastguard Worker static void $noinline$testPackagePrivateMethodInPackagePrivateClassViaResolvedPublicSubclass() { 197*795d594fSAndroid Build Coastguard Worker ResolvedPublicSubclassOfPackagePrivateClass.$noinline$staticMethod(); 198*795d594fSAndroid Build Coastguard Worker } 199*795d594fSAndroid Build Coastguard Worker } 200