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