xref: /aosp_15_r20/art/test/122-npe/src/Main.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker /*
2*795d594fSAndroid Build Coastguard Worker  * Copyright (C) 2014 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 import java.lang.ref.WeakReference;
18*795d594fSAndroid Build Coastguard Worker 
19*795d594fSAndroid Build Coastguard Worker /**
20*795d594fSAndroid Build Coastguard Worker  * Test that null pointer exceptions are thrown by the VM.
21*795d594fSAndroid Build Coastguard Worker  */
22*795d594fSAndroid Build Coastguard Worker public class Main {
23*795d594fSAndroid Build Coastguard Worker   private int f;
main(String[] args)24*795d594fSAndroid Build Coastguard Worker   public static void main(String[] args) {
25*795d594fSAndroid Build Coastguard Worker     methodOne();
26*795d594fSAndroid Build Coastguard Worker   }
27*795d594fSAndroid Build Coastguard Worker 
methodOne()28*795d594fSAndroid Build Coastguard Worker   static void methodOne() {
29*795d594fSAndroid Build Coastguard Worker     methodTwo();
30*795d594fSAndroid Build Coastguard Worker   }
31*795d594fSAndroid Build Coastguard Worker 
callSpecial()32*795d594fSAndroid Build Coastguard Worker   private int callSpecial() {
33*795d594fSAndroid Build Coastguard Worker     return f;
34*795d594fSAndroid Build Coastguard Worker   }
35*795d594fSAndroid Build Coastguard Worker 
callFinal()36*795d594fSAndroid Build Coastguard Worker   final int callFinal() {
37*795d594fSAndroid Build Coastguard Worker     return f;
38*795d594fSAndroid Build Coastguard Worker   }
39*795d594fSAndroid Build Coastguard Worker 
methodTwo()40*795d594fSAndroid Build Coastguard Worker   static void methodTwo() {
41*795d594fSAndroid Build Coastguard Worker     NullPointerException npe = null;
42*795d594fSAndroid Build Coastguard Worker 
43*795d594fSAndroid Build Coastguard Worker     int thisLine = 43;
44*795d594fSAndroid Build Coastguard Worker 
45*795d594fSAndroid Build Coastguard Worker     new Object().getClass(); // Ensure compiled.
46*795d594fSAndroid Build Coastguard Worker     try {
47*795d594fSAndroid Build Coastguard Worker       ((Object) null).getClass();
48*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
49*795d594fSAndroid Build Coastguard Worker       npe = e;
50*795d594fSAndroid Build Coastguard Worker     }
51*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 4);
52*795d594fSAndroid Build Coastguard Worker 
53*795d594fSAndroid Build Coastguard Worker     new Main().callSpecial();  // Ensure compiled.
54*795d594fSAndroid Build Coastguard Worker     try {
55*795d594fSAndroid Build Coastguard Worker       ((Main) null).callSpecial();  // Test invokespecial.
56*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
57*795d594fSAndroid Build Coastguard Worker       npe = e;
58*795d594fSAndroid Build Coastguard Worker     }
59*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 8);
60*795d594fSAndroid Build Coastguard Worker 
61*795d594fSAndroid Build Coastguard Worker     new Main().callFinal();  // Ensure compiled.
62*795d594fSAndroid Build Coastguard Worker     try {
63*795d594fSAndroid Build Coastguard Worker       ((Main) null).callFinal();  // Test invokevirtual on final.
64*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
65*795d594fSAndroid Build Coastguard Worker       npe = e;
66*795d594fSAndroid Build Coastguard Worker     }
67*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 8);
68*795d594fSAndroid Build Coastguard Worker 
69*795d594fSAndroid Build Coastguard Worker     try {
70*795d594fSAndroid Build Coastguard Worker       ((Value) null).objectField.toString();
71*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
72*795d594fSAndroid Build Coastguard Worker       npe = e;
73*795d594fSAndroid Build Coastguard Worker     }
74*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
75*795d594fSAndroid Build Coastguard Worker 
76*795d594fSAndroid Build Coastguard Worker     try {
77*795d594fSAndroid Build Coastguard Worker       useInt(((Value) null).intField);
78*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
79*795d594fSAndroid Build Coastguard Worker       npe = e;
80*795d594fSAndroid Build Coastguard Worker     }
81*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
82*795d594fSAndroid Build Coastguard Worker 
83*795d594fSAndroid Build Coastguard Worker     try {
84*795d594fSAndroid Build Coastguard Worker       useFloat(((Value) null).floatField);
85*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
86*795d594fSAndroid Build Coastguard Worker       npe = e;
87*795d594fSAndroid Build Coastguard Worker     }
88*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
89*795d594fSAndroid Build Coastguard Worker 
90*795d594fSAndroid Build Coastguard Worker     try {
91*795d594fSAndroid Build Coastguard Worker       useLong(((Value) null).longField);
92*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
93*795d594fSAndroid Build Coastguard Worker       npe = e;
94*795d594fSAndroid Build Coastguard Worker     }
95*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
96*795d594fSAndroid Build Coastguard Worker 
97*795d594fSAndroid Build Coastguard Worker     try {
98*795d594fSAndroid Build Coastguard Worker       useDouble(((Value) null).doubleField);
99*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
100*795d594fSAndroid Build Coastguard Worker       npe = e;
101*795d594fSAndroid Build Coastguard Worker     }
102*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
103*795d594fSAndroid Build Coastguard Worker 
104*795d594fSAndroid Build Coastguard Worker     try {
105*795d594fSAndroid Build Coastguard Worker       ((Value) null).objectField = "Fisk";
106*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
107*795d594fSAndroid Build Coastguard Worker       npe = e;
108*795d594fSAndroid Build Coastguard Worker     }
109*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
110*795d594fSAndroid Build Coastguard Worker 
111*795d594fSAndroid Build Coastguard Worker     try {
112*795d594fSAndroid Build Coastguard Worker       ((Value) null).intField = 42;
113*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
114*795d594fSAndroid Build Coastguard Worker       npe = e;
115*795d594fSAndroid Build Coastguard Worker     }
116*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
117*795d594fSAndroid Build Coastguard Worker 
118*795d594fSAndroid Build Coastguard Worker     try {
119*795d594fSAndroid Build Coastguard Worker       ((Value) null).floatField = 42.0F;
120*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
121*795d594fSAndroid Build Coastguard Worker       npe = e;
122*795d594fSAndroid Build Coastguard Worker     }
123*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
124*795d594fSAndroid Build Coastguard Worker 
125*795d594fSAndroid Build Coastguard Worker     try {
126*795d594fSAndroid Build Coastguard Worker       ((Value) null).longField = 42L;
127*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
128*795d594fSAndroid Build Coastguard Worker       npe = e;
129*795d594fSAndroid Build Coastguard Worker     }
130*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
131*795d594fSAndroid Build Coastguard Worker 
132*795d594fSAndroid Build Coastguard Worker     try {
133*795d594fSAndroid Build Coastguard Worker       ((Value) null).doubleField = 42.0d;
134*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
135*795d594fSAndroid Build Coastguard Worker       npe = e;
136*795d594fSAndroid Build Coastguard Worker     }
137*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
138*795d594fSAndroid Build Coastguard Worker 
139*795d594fSAndroid Build Coastguard Worker     try {
140*795d594fSAndroid Build Coastguard Worker       useInt(((Value) null).byteField);
141*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
142*795d594fSAndroid Build Coastguard Worker       npe = e;
143*795d594fSAndroid Build Coastguard Worker     }
144*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
145*795d594fSAndroid Build Coastguard Worker 
146*795d594fSAndroid Build Coastguard Worker     try {
147*795d594fSAndroid Build Coastguard Worker       if (((Value) null).booleanField) { }
148*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
149*795d594fSAndroid Build Coastguard Worker       npe = e;
150*795d594fSAndroid Build Coastguard Worker     }
151*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
152*795d594fSAndroid Build Coastguard Worker 
153*795d594fSAndroid Build Coastguard Worker     try {
154*795d594fSAndroid Build Coastguard Worker       useInt(((Value) null).charField);
155*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
156*795d594fSAndroid Build Coastguard Worker       npe = e;
157*795d594fSAndroid Build Coastguard Worker     }
158*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
159*795d594fSAndroid Build Coastguard Worker 
160*795d594fSAndroid Build Coastguard Worker     try {
161*795d594fSAndroid Build Coastguard Worker       useInt(((Value) null).shortField);
162*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
163*795d594fSAndroid Build Coastguard Worker       npe = e;
164*795d594fSAndroid Build Coastguard Worker     }
165*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
166*795d594fSAndroid Build Coastguard Worker 
167*795d594fSAndroid Build Coastguard Worker     try {
168*795d594fSAndroid Build Coastguard Worker       ((Value) null).byteField = 42;
169*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
170*795d594fSAndroid Build Coastguard Worker       npe = e;
171*795d594fSAndroid Build Coastguard Worker     }
172*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
173*795d594fSAndroid Build Coastguard Worker 
174*795d594fSAndroid Build Coastguard Worker     try {
175*795d594fSAndroid Build Coastguard Worker       ((Value) null).booleanField = true;
176*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
177*795d594fSAndroid Build Coastguard Worker       npe = e;
178*795d594fSAndroid Build Coastguard Worker     }
179*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
180*795d594fSAndroid Build Coastguard Worker 
181*795d594fSAndroid Build Coastguard Worker     try {
182*795d594fSAndroid Build Coastguard Worker       ((Value) null).charField = '\u0042';
183*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
184*795d594fSAndroid Build Coastguard Worker       npe = e;
185*795d594fSAndroid Build Coastguard Worker     }
186*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
187*795d594fSAndroid Build Coastguard Worker 
188*795d594fSAndroid Build Coastguard Worker     try {
189*795d594fSAndroid Build Coastguard Worker       ((Value) null).shortField = 42;
190*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
191*795d594fSAndroid Build Coastguard Worker       npe = e;
192*795d594fSAndroid Build Coastguard Worker     }
193*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
194*795d594fSAndroid Build Coastguard Worker 
195*795d594fSAndroid Build Coastguard Worker     try {
196*795d594fSAndroid Build Coastguard Worker       ((Value) null).volatileObjectField.toString();
197*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
198*795d594fSAndroid Build Coastguard Worker       npe = e;
199*795d594fSAndroid Build Coastguard Worker     }
200*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
201*795d594fSAndroid Build Coastguard Worker 
202*795d594fSAndroid Build Coastguard Worker     try {
203*795d594fSAndroid Build Coastguard Worker       ((Value) null).volatileObjectField = "Fisk";
204*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
205*795d594fSAndroid Build Coastguard Worker       npe = e;
206*795d594fSAndroid Build Coastguard Worker     }
207*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
208*795d594fSAndroid Build Coastguard Worker 
209*795d594fSAndroid Build Coastguard Worker     try {
210*795d594fSAndroid Build Coastguard Worker       useInt(((Value) null).volatileIntField);
211*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
212*795d594fSAndroid Build Coastguard Worker       npe = e;
213*795d594fSAndroid Build Coastguard Worker     }
214*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
215*795d594fSAndroid Build Coastguard Worker 
216*795d594fSAndroid Build Coastguard Worker     try {
217*795d594fSAndroid Build Coastguard Worker       ((Value) null).volatileIntField = 42;
218*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
219*795d594fSAndroid Build Coastguard Worker       npe = e;
220*795d594fSAndroid Build Coastguard Worker     }
221*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
222*795d594fSAndroid Build Coastguard Worker 
223*795d594fSAndroid Build Coastguard Worker     try {
224*795d594fSAndroid Build Coastguard Worker       useFloat(((Value) null).volatileFloatField);
225*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
226*795d594fSAndroid Build Coastguard Worker       npe = e;
227*795d594fSAndroid Build Coastguard Worker     }
228*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
229*795d594fSAndroid Build Coastguard Worker 
230*795d594fSAndroid Build Coastguard Worker     try {
231*795d594fSAndroid Build Coastguard Worker       ((Value) null).volatileFloatField = 42.0F;
232*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
233*795d594fSAndroid Build Coastguard Worker       npe = e;
234*795d594fSAndroid Build Coastguard Worker     }
235*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
236*795d594fSAndroid Build Coastguard Worker 
237*795d594fSAndroid Build Coastguard Worker     try {
238*795d594fSAndroid Build Coastguard Worker       useLong(((Value) null).volatileLongField);
239*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
240*795d594fSAndroid Build Coastguard Worker       npe = e;
241*795d594fSAndroid Build Coastguard Worker     }
242*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
243*795d594fSAndroid Build Coastguard Worker 
244*795d594fSAndroid Build Coastguard Worker     try {
245*795d594fSAndroid Build Coastguard Worker       ((Value) null).volatileLongField = 42L;
246*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
247*795d594fSAndroid Build Coastguard Worker       npe = e;
248*795d594fSAndroid Build Coastguard Worker     }
249*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
250*795d594fSAndroid Build Coastguard Worker 
251*795d594fSAndroid Build Coastguard Worker     try {
252*795d594fSAndroid Build Coastguard Worker       useDouble(((Value) null).volatileDoubleField);
253*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
254*795d594fSAndroid Build Coastguard Worker       npe = e;
255*795d594fSAndroid Build Coastguard Worker     }
256*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
257*795d594fSAndroid Build Coastguard Worker 
258*795d594fSAndroid Build Coastguard Worker     try {
259*795d594fSAndroid Build Coastguard Worker       ((Value) null).volatileDoubleField = 42.0d;
260*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
261*795d594fSAndroid Build Coastguard Worker       npe = e;
262*795d594fSAndroid Build Coastguard Worker     }
263*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
264*795d594fSAndroid Build Coastguard Worker 
265*795d594fSAndroid Build Coastguard Worker     try {
266*795d594fSAndroid Build Coastguard Worker       useInt(((Value) null).volatileByteField);
267*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
268*795d594fSAndroid Build Coastguard Worker       npe = e;
269*795d594fSAndroid Build Coastguard Worker     }
270*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
271*795d594fSAndroid Build Coastguard Worker 
272*795d594fSAndroid Build Coastguard Worker     try {
273*795d594fSAndroid Build Coastguard Worker       ((Value) null).volatileByteField = 42;
274*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
275*795d594fSAndroid Build Coastguard Worker       npe = e;
276*795d594fSAndroid Build Coastguard Worker     }
277*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
278*795d594fSAndroid Build Coastguard Worker 
279*795d594fSAndroid Build Coastguard Worker     try {
280*795d594fSAndroid Build Coastguard Worker       if (((Value) null).volatileBooleanField) { }
281*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
282*795d594fSAndroid Build Coastguard Worker       npe = e;
283*795d594fSAndroid Build Coastguard Worker     }
284*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
285*795d594fSAndroid Build Coastguard Worker 
286*795d594fSAndroid Build Coastguard Worker     try {
287*795d594fSAndroid Build Coastguard Worker       ((Value) null).volatileBooleanField = true;
288*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
289*795d594fSAndroid Build Coastguard Worker       npe = e;
290*795d594fSAndroid Build Coastguard Worker     }
291*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
292*795d594fSAndroid Build Coastguard Worker 
293*795d594fSAndroid Build Coastguard Worker     try {
294*795d594fSAndroid Build Coastguard Worker       useInt(((Value) null).volatileCharField);
295*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
296*795d594fSAndroid Build Coastguard Worker       npe = e;
297*795d594fSAndroid Build Coastguard Worker     }
298*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
299*795d594fSAndroid Build Coastguard Worker 
300*795d594fSAndroid Build Coastguard Worker     try {
301*795d594fSAndroid Build Coastguard Worker       ((Value) null).volatileCharField = '\u0042';
302*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
303*795d594fSAndroid Build Coastguard Worker       npe = e;
304*795d594fSAndroid Build Coastguard Worker     }
305*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
306*795d594fSAndroid Build Coastguard Worker 
307*795d594fSAndroid Build Coastguard Worker     try {
308*795d594fSAndroid Build Coastguard Worker       useInt(((Value) null).volatileShortField);
309*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
310*795d594fSAndroid Build Coastguard Worker       npe = e;
311*795d594fSAndroid Build Coastguard Worker     }
312*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
313*795d594fSAndroid Build Coastguard Worker 
314*795d594fSAndroid Build Coastguard Worker     try {
315*795d594fSAndroid Build Coastguard Worker       ((Value) null).volatileShortField = 42;
316*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
317*795d594fSAndroid Build Coastguard Worker       npe = e;
318*795d594fSAndroid Build Coastguard Worker     }
319*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
320*795d594fSAndroid Build Coastguard Worker 
321*795d594fSAndroid Build Coastguard Worker     try {
322*795d594fSAndroid Build Coastguard Worker       ((Object[]) null)[0].toString();
323*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
324*795d594fSAndroid Build Coastguard Worker       npe = e;
325*795d594fSAndroid Build Coastguard Worker     }
326*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
327*795d594fSAndroid Build Coastguard Worker 
328*795d594fSAndroid Build Coastguard Worker     try {
329*795d594fSAndroid Build Coastguard Worker       useInt(((int[]) null)[0]);
330*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
331*795d594fSAndroid Build Coastguard Worker       npe = e;
332*795d594fSAndroid Build Coastguard Worker     }
333*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
334*795d594fSAndroid Build Coastguard Worker 
335*795d594fSAndroid Build Coastguard Worker     try {
336*795d594fSAndroid Build Coastguard Worker       useFloat(((float[]) null)[0]);
337*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
338*795d594fSAndroid Build Coastguard Worker       npe = e;
339*795d594fSAndroid Build Coastguard Worker     }
340*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
341*795d594fSAndroid Build Coastguard Worker 
342*795d594fSAndroid Build Coastguard Worker     try {
343*795d594fSAndroid Build Coastguard Worker       useLong(((long[]) null)[0]);
344*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
345*795d594fSAndroid Build Coastguard Worker       npe = e;
346*795d594fSAndroid Build Coastguard Worker     }
347*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
348*795d594fSAndroid Build Coastguard Worker 
349*795d594fSAndroid Build Coastguard Worker     try {
350*795d594fSAndroid Build Coastguard Worker       useDouble(((double[]) null)[0]);
351*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
352*795d594fSAndroid Build Coastguard Worker       npe = e;
353*795d594fSAndroid Build Coastguard Worker     }
354*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
355*795d594fSAndroid Build Coastguard Worker 
356*795d594fSAndroid Build Coastguard Worker     try {
357*795d594fSAndroid Build Coastguard Worker       ((Object[]) null)[0] = "Fisk";
358*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
359*795d594fSAndroid Build Coastguard Worker       npe = e;
360*795d594fSAndroid Build Coastguard Worker     }
361*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
362*795d594fSAndroid Build Coastguard Worker 
363*795d594fSAndroid Build Coastguard Worker     try {
364*795d594fSAndroid Build Coastguard Worker       ((int[]) null)[0] = 42;
365*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
366*795d594fSAndroid Build Coastguard Worker       npe = e;
367*795d594fSAndroid Build Coastguard Worker     }
368*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
369*795d594fSAndroid Build Coastguard Worker 
370*795d594fSAndroid Build Coastguard Worker     try {
371*795d594fSAndroid Build Coastguard Worker       ((float[]) null)[0] = 42.0F;
372*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
373*795d594fSAndroid Build Coastguard Worker       npe = e;
374*795d594fSAndroid Build Coastguard Worker     }
375*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
376*795d594fSAndroid Build Coastguard Worker 
377*795d594fSAndroid Build Coastguard Worker     try {
378*795d594fSAndroid Build Coastguard Worker       ((long[]) null)[0] = 42L;
379*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
380*795d594fSAndroid Build Coastguard Worker       npe = e;
381*795d594fSAndroid Build Coastguard Worker     }
382*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
383*795d594fSAndroid Build Coastguard Worker 
384*795d594fSAndroid Build Coastguard Worker     try {
385*795d594fSAndroid Build Coastguard Worker       ((double[]) null)[0] = 42.0d;
386*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
387*795d594fSAndroid Build Coastguard Worker       npe = e;
388*795d594fSAndroid Build Coastguard Worker     }
389*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
390*795d594fSAndroid Build Coastguard Worker 
391*795d594fSAndroid Build Coastguard Worker     try {
392*795d594fSAndroid Build Coastguard Worker       useInt(((byte[]) null)[0]);
393*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
394*795d594fSAndroid Build Coastguard Worker       npe = e;
395*795d594fSAndroid Build Coastguard Worker     }
396*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
397*795d594fSAndroid Build Coastguard Worker 
398*795d594fSAndroid Build Coastguard Worker     try {
399*795d594fSAndroid Build Coastguard Worker       if (((boolean[]) null)[0]) { }
400*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
401*795d594fSAndroid Build Coastguard Worker       npe = e;
402*795d594fSAndroid Build Coastguard Worker     }
403*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
404*795d594fSAndroid Build Coastguard Worker 
405*795d594fSAndroid Build Coastguard Worker     try {
406*795d594fSAndroid Build Coastguard Worker       useInt(((char[]) null)[0]);
407*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
408*795d594fSAndroid Build Coastguard Worker       npe = e;
409*795d594fSAndroid Build Coastguard Worker     }
410*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
411*795d594fSAndroid Build Coastguard Worker 
412*795d594fSAndroid Build Coastguard Worker     try {
413*795d594fSAndroid Build Coastguard Worker       useInt(((short[]) null)[0]);
414*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
415*795d594fSAndroid Build Coastguard Worker       npe = e;
416*795d594fSAndroid Build Coastguard Worker     }
417*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
418*795d594fSAndroid Build Coastguard Worker 
419*795d594fSAndroid Build Coastguard Worker     try {
420*795d594fSAndroid Build Coastguard Worker       ((byte[]) null)[0] = 42;
421*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
422*795d594fSAndroid Build Coastguard Worker       npe = e;
423*795d594fSAndroid Build Coastguard Worker     }
424*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
425*795d594fSAndroid Build Coastguard Worker 
426*795d594fSAndroid Build Coastguard Worker     try {
427*795d594fSAndroid Build Coastguard Worker       ((boolean[]) null)[0] = true;
428*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
429*795d594fSAndroid Build Coastguard Worker       npe = e;
430*795d594fSAndroid Build Coastguard Worker     }
431*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
432*795d594fSAndroid Build Coastguard Worker 
433*795d594fSAndroid Build Coastguard Worker     try {
434*795d594fSAndroid Build Coastguard Worker       ((char[]) null)[0] = '\u0042';
435*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
436*795d594fSAndroid Build Coastguard Worker       npe = e;
437*795d594fSAndroid Build Coastguard Worker     }
438*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
439*795d594fSAndroid Build Coastguard Worker 
440*795d594fSAndroid Build Coastguard Worker     try {
441*795d594fSAndroid Build Coastguard Worker       ((short[]) null)[0] = 42;
442*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
443*795d594fSAndroid Build Coastguard Worker       npe = e;
444*795d594fSAndroid Build Coastguard Worker     }
445*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
446*795d594fSAndroid Build Coastguard Worker 
447*795d594fSAndroid Build Coastguard Worker     try {
448*795d594fSAndroid Build Coastguard Worker       useInt(((Object[]) null).length);
449*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
450*795d594fSAndroid Build Coastguard Worker       npe = e;
451*795d594fSAndroid Build Coastguard Worker     }
452*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
453*795d594fSAndroid Build Coastguard Worker 
454*795d594fSAndroid Build Coastguard Worker     try {
455*795d594fSAndroid Build Coastguard Worker       useInt(((int[]) null).length);
456*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
457*795d594fSAndroid Build Coastguard Worker       npe = e;
458*795d594fSAndroid Build Coastguard Worker     }
459*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
460*795d594fSAndroid Build Coastguard Worker 
461*795d594fSAndroid Build Coastguard Worker     try {
462*795d594fSAndroid Build Coastguard Worker       useInt(((float[]) null).length);
463*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
464*795d594fSAndroid Build Coastguard Worker       npe = e;
465*795d594fSAndroid Build Coastguard Worker     }
466*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
467*795d594fSAndroid Build Coastguard Worker 
468*795d594fSAndroid Build Coastguard Worker     try {
469*795d594fSAndroid Build Coastguard Worker       useInt(((long[]) null).length);
470*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
471*795d594fSAndroid Build Coastguard Worker       npe = e;
472*795d594fSAndroid Build Coastguard Worker     }
473*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
474*795d594fSAndroid Build Coastguard Worker 
475*795d594fSAndroid Build Coastguard Worker     try {
476*795d594fSAndroid Build Coastguard Worker       useInt(((double[]) null).length);
477*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
478*795d594fSAndroid Build Coastguard Worker       npe = e;
479*795d594fSAndroid Build Coastguard Worker     }
480*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
481*795d594fSAndroid Build Coastguard Worker 
482*795d594fSAndroid Build Coastguard Worker     try {
483*795d594fSAndroid Build Coastguard Worker       useInt(((byte[]) null).length);
484*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
485*795d594fSAndroid Build Coastguard Worker       npe = e;
486*795d594fSAndroid Build Coastguard Worker     }
487*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
488*795d594fSAndroid Build Coastguard Worker 
489*795d594fSAndroid Build Coastguard Worker     try {
490*795d594fSAndroid Build Coastguard Worker       useInt(((boolean[]) null).length);
491*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
492*795d594fSAndroid Build Coastguard Worker       npe = e;
493*795d594fSAndroid Build Coastguard Worker     }
494*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
495*795d594fSAndroid Build Coastguard Worker 
496*795d594fSAndroid Build Coastguard Worker     try {
497*795d594fSAndroid Build Coastguard Worker       useInt(((char[]) null).length);
498*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
499*795d594fSAndroid Build Coastguard Worker       npe = e;
500*795d594fSAndroid Build Coastguard Worker     }
501*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
502*795d594fSAndroid Build Coastguard Worker 
503*795d594fSAndroid Build Coastguard Worker     try {
504*795d594fSAndroid Build Coastguard Worker       useInt(((short[]) null).length);
505*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
506*795d594fSAndroid Build Coastguard Worker       npe = e;
507*795d594fSAndroid Build Coastguard Worker     }
508*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 7);
509*795d594fSAndroid Build Coastguard Worker 
510*795d594fSAndroid Build Coastguard Worker     try {
511*795d594fSAndroid Build Coastguard Worker       Interface i = null;
512*795d594fSAndroid Build Coastguard Worker       i.methodInterface();  // Test null on invokeinterface.
513*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
514*795d594fSAndroid Build Coastguard Worker       npe = e;
515*795d594fSAndroid Build Coastguard Worker     }
516*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 8);
517*795d594fSAndroid Build Coastguard Worker 
518*795d594fSAndroid Build Coastguard Worker     try {
519*795d594fSAndroid Build Coastguard Worker       Object o = null;
520*795d594fSAndroid Build Coastguard Worker       o.toString();  // Test null on invokevirtual.
521*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
522*795d594fSAndroid Build Coastguard Worker       npe = e;
523*795d594fSAndroid Build Coastguard Worker     }
524*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 8);
525*795d594fSAndroid Build Coastguard Worker 
526*795d594fSAndroid Build Coastguard Worker     npe = null;
527*795d594fSAndroid Build Coastguard Worker     try {
528*795d594fSAndroid Build Coastguard Worker       String s = null;
529*795d594fSAndroid Build Coastguard Worker       try {
530*795d594fSAndroid Build Coastguard Worker         throw new AssertionError();
531*795d594fSAndroid Build Coastguard Worker       } finally {
532*795d594fSAndroid Build Coastguard Worker         // Cause an implicit NPE.
533*795d594fSAndroid Build Coastguard Worker         s.getClass();
534*795d594fSAndroid Build Coastguard Worker       }
535*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
536*795d594fSAndroid Build Coastguard Worker       npe = e;
537*795d594fSAndroid Build Coastguard Worker     }
538*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 13);
539*795d594fSAndroid Build Coastguard Worker 
540*795d594fSAndroid Build Coastguard Worker     npe = null;
541*795d594fSAndroid Build Coastguard Worker     try {
542*795d594fSAndroid Build Coastguard Worker       String s = null;
543*795d594fSAndroid Build Coastguard Worker       try {
544*795d594fSAndroid Build Coastguard Worker         throw new AssertionError();
545*795d594fSAndroid Build Coastguard Worker       } catch (AssertionError ex) {
546*795d594fSAndroid Build Coastguard Worker       }
547*795d594fSAndroid Build Coastguard Worker       s.getClass();
548*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
549*795d594fSAndroid Build Coastguard Worker       npe = e;
550*795d594fSAndroid Build Coastguard Worker     }
551*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 14);
552*795d594fSAndroid Build Coastguard Worker 
553*795d594fSAndroid Build Coastguard Worker     npe = null;
554*795d594fSAndroid Build Coastguard Worker     try {
555*795d594fSAndroid Build Coastguard Worker       useInt(((WeakReference<Object>) null).refersTo(null) ? 1 : 0);
556*795d594fSAndroid Build Coastguard Worker     } catch (NullPointerException e) {
557*795d594fSAndroid Build Coastguard Worker       npe = e;
558*795d594fSAndroid Build Coastguard Worker     }
559*795d594fSAndroid Build Coastguard Worker     check(npe, thisLine += 8);
560*795d594fSAndroid Build Coastguard Worker   }
561*795d594fSAndroid Build Coastguard Worker 
check(NullPointerException npe, int firstLine)562*795d594fSAndroid Build Coastguard Worker   static void check(NullPointerException npe, int firstLine) {
563*795d594fSAndroid Build Coastguard Worker     final boolean debug = false;
564*795d594fSAndroid Build Coastguard Worker     if (debug) {
565*795d594fSAndroid Build Coastguard Worker       System.out.print("Got to line ");
566*795d594fSAndroid Build Coastguard Worker       System.out.print(firstLine);
567*795d594fSAndroid Build Coastguard Worker       System.out.println();
568*795d594fSAndroid Build Coastguard Worker     }
569*795d594fSAndroid Build Coastguard Worker     StackTraceElement[] trace = npe.getStackTrace();
570*795d594fSAndroid Build Coastguard Worker     checkElement(trace[0], "Main", "methodTwo", "Main.java", firstLine);
571*795d594fSAndroid Build Coastguard Worker     checkElement(trace[1], "Main", "methodOne", "Main.java", 29);
572*795d594fSAndroid Build Coastguard Worker     checkElement(trace[2], "Main", "main", "Main.java", 25);
573*795d594fSAndroid Build Coastguard Worker   }
574*795d594fSAndroid Build Coastguard Worker 
checkElement(StackTraceElement element, String declaringClass, String methodName, String fileName, int lineNumber)575*795d594fSAndroid Build Coastguard Worker   static void checkElement(StackTraceElement element,
576*795d594fSAndroid Build Coastguard Worker                                   String declaringClass, String methodName,
577*795d594fSAndroid Build Coastguard Worker                                   String fileName, int lineNumber) {
578*795d594fSAndroid Build Coastguard Worker     assertEquals(declaringClass, element.getClassName());
579*795d594fSAndroid Build Coastguard Worker     assertEquals(methodName, element.getMethodName());
580*795d594fSAndroid Build Coastguard Worker     assertEquals(fileName, element.getFileName());
581*795d594fSAndroid Build Coastguard Worker     assertEquals(lineNumber, element.getLineNumber());
582*795d594fSAndroid Build Coastguard Worker   }
583*795d594fSAndroid Build Coastguard Worker 
assertEquals(Object expected, Object actual)584*795d594fSAndroid Build Coastguard Worker   static void assertEquals(Object expected, Object actual) {
585*795d594fSAndroid Build Coastguard Worker     if (!expected.equals(actual)) {
586*795d594fSAndroid Build Coastguard Worker       String msg = "Expected \"" + expected + "\" but got \"" + actual + "\"";
587*795d594fSAndroid Build Coastguard Worker       throw new AssertionError(msg);
588*795d594fSAndroid Build Coastguard Worker     }
589*795d594fSAndroid Build Coastguard Worker   }
590*795d594fSAndroid Build Coastguard Worker 
assertEquals(int expected, int actual)591*795d594fSAndroid Build Coastguard Worker   static void assertEquals(int expected, int actual) {
592*795d594fSAndroid Build Coastguard Worker     if (expected != actual) {
593*795d594fSAndroid Build Coastguard Worker       throw new AssertionError("Expected " + expected + " got " + actual);
594*795d594fSAndroid Build Coastguard Worker     }
595*795d594fSAndroid Build Coastguard Worker   }
596*795d594fSAndroid Build Coastguard Worker 
597*795d594fSAndroid Build Coastguard Worker   interface Interface {
methodInterface()598*795d594fSAndroid Build Coastguard Worker     void methodInterface();
599*795d594fSAndroid Build Coastguard Worker   }
600*795d594fSAndroid Build Coastguard Worker 
useInt(int i)601*795d594fSAndroid Build Coastguard Worker   static void useInt(int i) {
602*795d594fSAndroid Build Coastguard Worker   }
603*795d594fSAndroid Build Coastguard Worker 
useFloat(float f)604*795d594fSAndroid Build Coastguard Worker   static void useFloat(float f) {
605*795d594fSAndroid Build Coastguard Worker   }
606*795d594fSAndroid Build Coastguard Worker 
useDouble(double d)607*795d594fSAndroid Build Coastguard Worker   static void useDouble(double d) {
608*795d594fSAndroid Build Coastguard Worker   }
609*795d594fSAndroid Build Coastguard Worker 
useLong(long l)610*795d594fSAndroid Build Coastguard Worker   static void useLong(long l) {
611*795d594fSAndroid Build Coastguard Worker   }
612*795d594fSAndroid Build Coastguard Worker 
613*795d594fSAndroid Build Coastguard Worker   static class Value {
614*795d594fSAndroid Build Coastguard Worker     Object objectField;
615*795d594fSAndroid Build Coastguard Worker     int intField;
616*795d594fSAndroid Build Coastguard Worker     float floatField;
617*795d594fSAndroid Build Coastguard Worker     long longField;
618*795d594fSAndroid Build Coastguard Worker     double doubleField;
619*795d594fSAndroid Build Coastguard Worker     byte byteField;
620*795d594fSAndroid Build Coastguard Worker     boolean booleanField;
621*795d594fSAndroid Build Coastguard Worker     char charField;
622*795d594fSAndroid Build Coastguard Worker     short shortField;
623*795d594fSAndroid Build Coastguard Worker 
624*795d594fSAndroid Build Coastguard Worker     volatile Object volatileObjectField;
625*795d594fSAndroid Build Coastguard Worker     volatile int volatileIntField;
626*795d594fSAndroid Build Coastguard Worker     volatile float volatileFloatField;
627*795d594fSAndroid Build Coastguard Worker     volatile long volatileLongField;
628*795d594fSAndroid Build Coastguard Worker     volatile double volatileDoubleField;
629*795d594fSAndroid Build Coastguard Worker     volatile byte volatileByteField;
630*795d594fSAndroid Build Coastguard Worker     volatile boolean volatileBooleanField;
631*795d594fSAndroid Build Coastguard Worker     volatile char volatileCharField;
632*795d594fSAndroid Build Coastguard Worker     volatile short volatileShortField;
633*795d594fSAndroid Build Coastguard Worker   }
634*795d594fSAndroid Build Coastguard Worker }
635