1 /*
2  * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.
8  *
9  * This code is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * version 2 for more details (a copy is included in the LICENSE file that
13  * accompanied this code).
14  *
15  * You should have received a copy of the GNU General Public License version
16  * 2 along with this work; if not, write to the Free Software Foundation,
17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20  * or visit www.oracle.com if you need additional information or have any
21  * questions.
22  */
23 
24 package nsk.jdi.ModificationWatchpointEvent.valueToBe;
25 
26 import nsk.share.*;
27 import nsk.share.jpda.*;
28 import nsk.share.jdi.*;
29 
30 
31 // This class is the debugged application in the test
32 
33 class valuetobe002a {
34 
35     static final int PASSED = 0;
36     static final int FAILED = 2;
37     static final int JCK_STATUS_BASE = 95;
38 
39     static final String COMMAND_READY = "ready";
40     static final String COMMAND_QUIT  = "quit";
41     static final String COMMAND_GO    = "go";
42     static final String COMMAND_DONE  = "done";
43 
main(String args[])44     public static void main(String args[]) {
45         System.exit(JCK_STATUS_BASE + run(args));
46     }
47 
run( String args[])48     static int run( String args[]) {
49         ArgumentHandler argHandler = new ArgumentHandler(args);
50         IOPipe pipe = argHandler.createDebugeeIOPipe();
51 
52         // create instance of checked class
53         valuetobe002aCheckedClass foo = new valuetobe002aCheckedClass();
54         // initialize fields values
55         foo.init();
56 
57         // notify debugger that debuggee started
58         pipe.println(COMMAND_READY);
59 
60         // wait for command GO from debugger
61         String command = pipe.readln();
62         if (command.equals(COMMAND_QUIT)) {
63              return PASSED;
64         }
65         if (!command.equals(COMMAND_GO)) {
66              System.err.println("TEST BUG: unknown command: " + command);
67              return FAILED;
68         }
69 
70         // perform actions
71         foo.run();
72 
73         // notify debugger that the command done
74         pipe.println(COMMAND_DONE);
75 
76         // wait for command QUIT from debugger and exit
77         command = pipe.readln();
78         if (!command.equals(COMMAND_QUIT)) {
79              System.err.println("TEST BUG: unknown command: " + command);
80              return FAILED;
81         }
82         return PASSED;
83     }
84 }
85 
86 // class for checking
87 class valuetobe002aCheckedClass {
88 
89     boolean z0, z1[], z2[][];
90     byte    b0, b1[], b2[][];
91     char    c0, c1[], c2[][];
92     double  d0, d1[], d2[][];
93     float   f0, f1[], f2[][];
94     int     i0, i1[], i2[][];
95     long    l0, l1[], l2[][];
96     short   s0, s1[], s2[][];
97 
98     static    long lS0, lS1[], lS2[][];
99     private   long lP0, lP1[], lP2[][];
100     public    long lU0, lU1[], lU2[][];
101     protected long lR0, lR1[], lR2[][];
102     transient long lT0, lT1[], lT2[][];
103     volatile  long lV0, lV1[], lV2[][];
104 
105     Boolean   Z0, Z1[], Z2[][];
106     Byte      B0, B1[], B2[][];
107     Character C0, C1[], C2[][];
108     Double    D0, D1[], D2[][];
109     Float     F0, F1[], F2[][];
110     Integer   I0, I1[], I2[][];
111     Long      L0, L1[], L2[][];
112     String    W0, W1[], W2[][];
113     Short     S0, S1[], S2[][];
114     Object    O0, O1[], O2[][];
115 
116     static    Long LS0, LS1[], LS2[][];
117     private   Long LP0, LP1[], LP2[][];
118     public    Long LU0, LU1[], LU2[][];
119     protected Long LR0, LR1[], LR2[][];
120     transient Long LT0, LT1[], LT2[][];
121     volatile  Long LV0, LV1[], LV2[][];
122 
123     interface Inter {}
124     class Class implements Inter {}
125     Class     X0, X1[], X2[][];
126     Inter     E0, E1[], E2[][];
127     static    Inter ES0, ES1[], ES2[][];
128     private   Inter EP0, EP1[], EP2[][];
129     public    Inter EU0, EU1[], EU2[][];
130     protected Inter ER0, ER1[], ER2[][];
131     transient Inter ET0, ET1[], ET2[][];
132     volatile  Inter EV0, EV1[], EV2[][];
133 
134     // initialize fields values
init()135     void init() {
136         initFields(false);
137     }
138 
139     // change fields values
run()140     void run() {
141         initFields(true);
142     }
143 
144     // calculate new fields values
initFields(boolean flag)145     void initFields(boolean flag) {
146         z0 = true;
147         b0 = java.lang.Byte.MAX_VALUE;
148         c0 = java.lang.Character.MAX_VALUE;
149         d0 = java.lang.Double.MAX_VALUE;
150         f0 = java.lang.Float.MAX_VALUE;
151         i0 = java.lang.Integer.MAX_VALUE;
152         l0 = java.lang.Long.MAX_VALUE;
153         s0 = java.lang.Short.MAX_VALUE;
154 
155         z1  = flag ? z1  : new boolean[]   {z0};
156         z2  = flag ? z2  : new boolean[][] {z1};
157         b1  = flag ? b1  : new byte[]      {b0};
158         b2  = flag ? b2  : new byte[][]    {b1};
159         c1  = flag ? c1  : new char[]      {c0};
160         c2  = flag ? c2  : new char[][]    {c1};
161         d1  = flag ? d1  : new double[]    {d0};
162         d2  = flag ? d2  : new double[][]  {d1};
163         f1  = flag ? f1  : new float[]     {f0};
164         f2  = flag ? f2  : new float[][]   {f1};
165         i1  = flag ? i1  : new int[]       {i0};
166         i2  = flag ? i2  : new int[][]     {i1};
167         l1  = flag ? l1  : new long[]      {l0};
168         l2  = flag ? l2  : new long[][]    {l1};
169         s1  = flag ? s1  : new short[]     {s0};
170         s2  = flag ? s2  : new short[][]   {s1};
171 
172         lS0 = l0;
173         lP0 = l0;
174         lU0 = l0;
175         lR0 = l0;
176         lT0 = l0;
177         lV0 = l0;
178 
179         lS1 = flag ? lS1 : new long[]      {lS0};
180         lS2 = flag ? lS2 : new long[][]    {lS1};
181         lP1 = flag ? lP1 : new long[]      {lP0};
182         lP2 = flag ? lP2 : new long[][]    {lP1};
183         lU1 = flag ? lU1 : new long[]      {lU0};
184         lU2 = flag ? lU2 : new long[][]    {lU1};
185         lR1 = flag ? lR1 : new long[]      {lR0};
186         lR2 = flag ? lR2 : new long[][]    {lR1};
187         lT1 = flag ? lT1 : new long[]      {lT0};
188         lT2 = flag ? lT2 : new long[][]    {lT1};
189         lV1 = flag ? lV1 : new long[]      {lV0};
190         lV2 = flag ? lV2 : new long[][]    {lV1};
191 
192         X0  = flag ? X0  : new Class();
193         X1  = flag ? X1  : new Class[]     {X0};
194         X2  = flag ? X2  : new Class[][]   {X1};
195         Z0  = flag ? Z0  : new Boolean(true);
196         Z1  = flag ? Z1  : new Boolean[]   {Z0};
197         Z2  = flag ? Z2  : new Boolean[][] {Z1};
198         B0  = flag ? B0  : new Byte(java.lang.Byte.MIN_VALUE);
199         B1  = flag ? B1  : new Byte[]      {B0};
200         B2  = flag ? B2  : new Byte[][]    {B1};
201         C0  = flag ? C0  : new Character(java.lang.Character.MIN_VALUE);
202         C1  = flag ? C1  : new Character[] {C0};
203         C2  = flag ? C2  : new Character[][]{C1};
204         D0  = flag ? D0  : new Double(java.lang.Double.MIN_VALUE);
205         D1  = flag ? D1  : new Double[]    {D0};
206         D2  = flag ? D2  : new Double[][]  {D1};
207         F0  = flag ? F0  : new Float(java.lang.Float.MIN_VALUE);
208         F1  = flag ? F1  : new Float[]     {F0};
209         F2  = flag ? F2  : new Float[][]   {F1};
210         I0  = flag ? I0  : new Integer(java.lang.Integer.MIN_VALUE);
211         I1  = flag ? I1  : new Integer[]   {I0};
212         I2  = flag ? I2  : new Integer[][] {I1};
213         L0  = flag ? L0  : new Long(java.lang.Long.MIN_VALUE);
214         L1  = flag ? L1  : new Long[]      {L0};
215         L2  = flag ? L2  : new Long[][]    {L1};
216         S0  = flag ? S0  : new Short(java.lang.Short.MIN_VALUE);
217         S1  = flag ? S1  : new Short[]     {S0};
218         S2  = flag ? S2  : new Short[][]   {S1};
219         W0  = flag ? W0  : new String();
220         W1  = flag ? W1  : new String[]    {W0};
221         W2  = flag ? W2  : new String[][]  {W1};
222         O0  = flag ? O0  : new Object();
223         O1  = flag ? O1  : new Object[]    {O0};
224         O2  = flag ? O2  : new Object[][]  {O1};
225 
226         LS0 = flag ? LS0 : new Long(java.lang.Long.MAX_VALUE);
227         LS1 = flag ? LS1 : new Long[]      {LS0};
228         LS2 = flag ? LS2 : new Long[][]    {LS1};
229         LP0 = flag ? LP0 : new Long(java.lang.Long.MAX_VALUE);
230         LP1 = flag ? LP1 : new Long[]      {LP0};
231         LP2 = flag ? LP2 : new Long[][]    {LP1};
232         LU0 = flag ? LU0 : new Long(java.lang.Long.MAX_VALUE);
233         LU1 = flag ? LU1 : new Long[]      {LU0};
234         LU2 = flag ? LU2 : new Long[][]    {LU1};
235         LR0 = flag ? LR0 : new Long(java.lang.Long.MAX_VALUE);
236         LR1 = flag ? LR1 : new Long[]      {LR0};
237         LR2 = flag ? LR2 : new Long[][]    {LR1};
238         LT0 = flag ? LT0 : new Long(java.lang.Long.MAX_VALUE);
239         LT1 = flag ? LT1 : new Long[]      {LT0};
240         LT2 = flag ? LT2 : new Long[][]    {LT1};
241         LV0 = flag ? LV0 : new Long(java.lang.Long.MAX_VALUE);
242         LV1 = flag ? LV1 : new Long[]      {LV0};
243         LV2 = flag ? LV2 : new Long[][]    {LV1};
244 
245         E0  = flag ? E0  : new Class();
246         E1  = flag ? E1  : new Inter[]     {E0};
247         E2  = flag ? E2  : new Inter[][]   {E1};
248         ES0 = flag ? ES0 : new Class();
249         ES1 = flag ? ES1 : new Inter[]     {ES0};
250         ES2 = flag ? ES2 : new Inter[][]   {ES1};
251         EP0 = flag ? EP0 : new Class();
252         EP1 = flag ? EP1 : new Inter[]     {EP0};
253         EP2 = flag ? EP2 : new Inter[][]   {EP1};
254         EU0 = flag ? EU0 : new Class();
255         EU1 = flag ? EU1 : new Inter[]     {EU0};
256         EU2 = flag ? EU2 : new Inter[][]   {EU1};
257         ER0 = flag ? ER0 : new Class();
258         ER1 = flag ? ER1 : new Inter[]     {ER0};
259         ER2 = flag ? ER2 : new Inter[][]   {ER1};
260         ET0 = flag ? ET0 : new Class();
261         ET1 = flag ? ET1 : new Inter[]     {ET0};
262         ET2 = flag ? ET2 : new Inter[][]   {ET1};
263         EV0 = flag ? EV0 : new Class();
264         EV1 = flag ? EV1 : new Inter[]     {EV0};
265         EV2 = flag ? EV2 : new Inter[][]   {EV1};
266     }
267 
268 }
269