Skip to content

Commit 30492c3

Browse files
committed
[GR-60548] Cleanly separate word box types by class loader.
PullRequest: graal/19624
2 parents 21a0c8b + 0f00649 commit 30492c3

File tree

322 files changed

+2836
-1747
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

322 files changed

+2836
-1747
lines changed

compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/core/test/CheckGraalInvariants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,7 @@ public static void runTest(InvariantsTool tool) {
337337
verifiers.add(new VerifyVirtualizableUsage());
338338
verifiers.add(new VerifyUpdateUsages());
339339
verifiers.add(new VerifyLibGraalContextChecks());
340+
verifiers.add(new VerifyWordFactoryUsage());
340341
verifiers.add(new VerifyBailoutUsage());
341342
verifiers.add(new VerifySystemPropertyUsage());
342343
verifiers.add(new VerifyInstanceOfUsage());
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/*
2+
* Copyright (c) 2024, 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. Oracle designates this
8+
* particular file as subject to the "Classpath" exception as provided
9+
* by Oracle in the LICENSE file that accompanied this code.
10+
*
11+
* This code is distributed in the hope that it will be useful, but WITHOUT
12+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+
* version 2 for more details (a copy is included in the LICENSE file that
15+
* accompanied this code).
16+
*
17+
* You should have received a copy of the GNU General Public License version
18+
* 2 along with this work; if not, write to the Free Software Foundation,
19+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+
*
21+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+
* or visit www.oracle.com if you need additional information or have any
23+
* questions.
24+
*/
25+
package jdk.graal.compiler.core.test;
26+
27+
import jdk.graal.compiler.nodes.StructuredGraph;
28+
import jdk.graal.compiler.nodes.java.MethodCallTargetNode;
29+
import jdk.graal.compiler.nodes.spi.CoreProviders;
30+
import jdk.graal.compiler.phases.VerifyPhase;
31+
import jdk.graal.compiler.word.Word;
32+
import jdk.vm.ci.meta.ResolvedJavaType;
33+
import org.graalvm.word.WordFactory;
34+
35+
/**
36+
* Ensures that Graal compiler code uses factory methods in {@link Word} instead of
37+
* {@link WordFactory} to create word values.
38+
*/
39+
public class VerifyWordFactoryUsage extends VerifyPhase<CoreProviders> {
40+
41+
@Override
42+
public boolean checkContract() {
43+
return false;
44+
}
45+
46+
@Override
47+
protected void verify(StructuredGraph graph, CoreProviders context) {
48+
49+
ResolvedJavaType wordFactory = context.getMetaAccess().lookupJavaType(WordFactory.class);
50+
for (MethodCallTargetNode t : graph.getNodes(MethodCallTargetNode.TYPE)) {
51+
if (t.targetMethod().getDeclaringClass().equals(wordFactory)) {
52+
throw new VerificationError("accessing %s in %s is prohibited - use %s.%s instead",
53+
wordFactory.toJavaName(),
54+
graph.method().format("%H.%n(%p)"),
55+
Word.class.getName(),
56+
graph.method().format("%n(%p)"));
57+
58+
}
59+
}
60+
}
61+
}

compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/replacements/test/ObjectAccessTest.java

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@
3737
import jdk.graal.compiler.nodes.extended.JavaWriteNode;
3838
import jdk.graal.compiler.nodes.memory.address.OffsetAddressNode;
3939
import jdk.graal.compiler.word.ObjectAccess;
40+
import jdk.graal.compiler.word.Word;
4041
import org.graalvm.word.LocationIdentity;
4142
import org.graalvm.word.Pointer;
42-
import org.graalvm.word.WordFactory;
4343
import org.junit.Assert;
4444
import org.junit.Test;
4545

@@ -152,7 +152,7 @@ public static byte readByte1(Object o, int offset) {
152152

153153
@Snippet
154154
public static byte readByte2(Object o, int offset) {
155-
return ObjectAccess.readByte(o, WordFactory.signed(offset), ID);
155+
return ObjectAccess.readByte(o, Word.signed(offset), ID);
156156
}
157157

158158
@Snippet
@@ -167,7 +167,7 @@ public static void writeByte1(Object o, int offset, byte value) {
167167

168168
@Snippet
169169
public static void writeByte2(Object o, int offset, byte value) {
170-
ObjectAccess.writeByte(o, WordFactory.signed(offset), value, ID);
170+
ObjectAccess.writeByte(o, Word.signed(offset), value, ID);
171171
}
172172

173173
@Snippet
@@ -182,7 +182,7 @@ public static char readChar1(Object o, int offset) {
182182

183183
@Snippet
184184
public static char readChar2(Object o, int offset) {
185-
return ObjectAccess.readChar(o, WordFactory.signed(offset), ID);
185+
return ObjectAccess.readChar(o, Word.signed(offset), ID);
186186
}
187187

188188
@Snippet
@@ -197,7 +197,7 @@ public static void writeChar1(Object o, int offset, char value) {
197197

198198
@Snippet
199199
public static void writeChar2(Object o, int offset, char value) {
200-
ObjectAccess.writeChar(o, WordFactory.signed(offset), value, ID);
200+
ObjectAccess.writeChar(o, Word.signed(offset), value, ID);
201201
}
202202

203203
@Snippet
@@ -212,7 +212,7 @@ public static short readShort1(Object o, int offset) {
212212

213213
@Snippet
214214
public static short readShort2(Object o, int offset) {
215-
return ObjectAccess.readShort(o, WordFactory.signed(offset), ID);
215+
return ObjectAccess.readShort(o, Word.signed(offset), ID);
216216
}
217217

218218
@Snippet
@@ -227,7 +227,7 @@ public static void writeShort1(Object o, int offset, short value) {
227227

228228
@Snippet
229229
public static void writeShort2(Object o, int offset, short value) {
230-
ObjectAccess.writeShort(o, WordFactory.signed(offset), value, ID);
230+
ObjectAccess.writeShort(o, Word.signed(offset), value, ID);
231231
}
232232

233233
@Snippet
@@ -242,7 +242,7 @@ public static int readInt1(Object o, int offset) {
242242

243243
@Snippet
244244
public static int readInt2(Object o, int offset) {
245-
return ObjectAccess.readInt(o, WordFactory.signed(offset), ID);
245+
return ObjectAccess.readInt(o, Word.signed(offset), ID);
246246
}
247247

248248
@Snippet
@@ -257,7 +257,7 @@ public static void writeInt1(Object o, int offset, int value) {
257257

258258
@Snippet
259259
public static void writeInt2(Object o, int offset, int value) {
260-
ObjectAccess.writeInt(o, WordFactory.signed(offset), value, ID);
260+
ObjectAccess.writeInt(o, Word.signed(offset), value, ID);
261261
}
262262

263263
@Snippet
@@ -272,7 +272,7 @@ public static long readLong1(Object o, int offset) {
272272

273273
@Snippet
274274
public static long readLong2(Object o, int offset) {
275-
return ObjectAccess.readLong(o, WordFactory.signed(offset), ID);
275+
return ObjectAccess.readLong(o, Word.signed(offset), ID);
276276
}
277277

278278
@Snippet
@@ -287,7 +287,7 @@ public static void writeLong1(Object o, int offset, long value) {
287287

288288
@Snippet
289289
public static void writeLong2(Object o, int offset, long value) {
290-
ObjectAccess.writeLong(o, WordFactory.signed(offset), value, ID);
290+
ObjectAccess.writeLong(o, Word.signed(offset), value, ID);
291291
}
292292

293293
@Snippet
@@ -302,7 +302,7 @@ public static float readFloat1(Object o, int offset) {
302302

303303
@Snippet
304304
public static float readFloat2(Object o, int offset) {
305-
return ObjectAccess.readFloat(o, WordFactory.signed(offset), ID);
305+
return ObjectAccess.readFloat(o, Word.signed(offset), ID);
306306
}
307307

308308
@Snippet
@@ -317,7 +317,7 @@ public static void writeFloat1(Object o, int offset, float value) {
317317

318318
@Snippet
319319
public static void writeFloat2(Object o, int offset, float value) {
320-
ObjectAccess.writeFloat(o, WordFactory.signed(offset), value, ID);
320+
ObjectAccess.writeFloat(o, Word.signed(offset), value, ID);
321321
}
322322

323323
@Snippet
@@ -332,7 +332,7 @@ public static double readDouble1(Object o, int offset) {
332332

333333
@Snippet
334334
public static double readDouble2(Object o, int offset) {
335-
return ObjectAccess.readDouble(o, WordFactory.signed(offset), ID);
335+
return ObjectAccess.readDouble(o, Word.signed(offset), ID);
336336
}
337337

338338
@Snippet
@@ -347,7 +347,7 @@ public static void writeDouble1(Object o, int offset, double value) {
347347

348348
@Snippet
349349
public static void writeDouble2(Object o, int offset, double value) {
350-
ObjectAccess.writeDouble(o, WordFactory.signed(offset), value, ID);
350+
ObjectAccess.writeDouble(o, Word.signed(offset), value, ID);
351351
}
352352

353353
@Snippet
@@ -362,7 +362,7 @@ public static Object readObject1(Object o, int offset) {
362362

363363
@Snippet
364364
public static Object readObject2(Object o, int offset) {
365-
return ObjectAccess.readObject(o, WordFactory.signed(offset), ID);
365+
return ObjectAccess.readObject(o, Word.signed(offset), ID);
366366
}
367367

368368
@Snippet
@@ -377,7 +377,7 @@ public static void writeObject1(Object o, int offset, Object value) {
377377

378378
@Snippet
379379
public static void writeObject2(Object o, int offset, Object value) {
380-
ObjectAccess.writeObject(o, WordFactory.signed(offset), value, ID);
380+
ObjectAccess.writeObject(o, Word.signed(offset), value, ID);
381381
}
382382

383383
@Snippet

compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/replacements/test/PointerTest.java

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
import jdk.graal.compiler.word.WordCastNode;
4343
import org.graalvm.word.LocationIdentity;
4444
import org.graalvm.word.Pointer;
45-
import org.graalvm.word.WordFactory;
4645
import org.junit.Assert;
4746
import org.junit.Test;
4847

@@ -172,7 +171,7 @@ public static byte readByte1(Object o, int offset) {
172171

173172
@Snippet
174173
public static byte readByte2(Object o, int offset) {
175-
return Word.objectToTrackedPointer(o).readByte(WordFactory.signed(offset), ID);
174+
return Word.objectToTrackedPointer(o).readByte(Word.signed(offset), ID);
176175
}
177176

178177
@Snippet
@@ -187,7 +186,7 @@ public static void writeByte1(Object o, int offset, byte value) {
187186

188187
@Snippet
189188
public static void writeByte2(Object o, int offset, byte value) {
190-
Word.objectToTrackedPointer(o).writeByte(WordFactory.signed(offset), value, ID);
189+
Word.objectToTrackedPointer(o).writeByte(Word.signed(offset), value, ID);
191190
}
192191

193192
@Snippet
@@ -202,7 +201,7 @@ public static char readChar1(Object o, int offset) {
202201

203202
@Snippet
204203
public static char readChar2(Object o, int offset) {
205-
return Word.objectToTrackedPointer(o).readChar(WordFactory.signed(offset), ID);
204+
return Word.objectToTrackedPointer(o).readChar(Word.signed(offset), ID);
206205
}
207206

208207
@Snippet
@@ -217,7 +216,7 @@ public static void writeChar1(Object o, int offset, char value) {
217216

218217
@Snippet
219218
public static void writeChar2(Object o, int offset, char value) {
220-
Word.objectToTrackedPointer(o).writeChar(WordFactory.signed(offset), value, ID);
219+
Word.objectToTrackedPointer(o).writeChar(Word.signed(offset), value, ID);
221220
}
222221

223222
@Snippet
@@ -232,7 +231,7 @@ public static short readShort1(Object o, int offset) {
232231

233232
@Snippet
234233
public static short readShort2(Object o, int offset) {
235-
return Word.objectToTrackedPointer(o).readShort(WordFactory.signed(offset), ID);
234+
return Word.objectToTrackedPointer(o).readShort(Word.signed(offset), ID);
236235
}
237236

238237
@Snippet
@@ -247,7 +246,7 @@ public static void writeShort1(Object o, int offset, short value) {
247246

248247
@Snippet
249248
public static void writeShort2(Object o, int offset, short value) {
250-
Word.objectToTrackedPointer(o).writeShort(WordFactory.signed(offset), value, ID);
249+
Word.objectToTrackedPointer(o).writeShort(Word.signed(offset), value, ID);
251250
}
252251

253252
@Snippet
@@ -262,7 +261,7 @@ public static int readInt1(Object o, int offset) {
262261

263262
@Snippet
264263
public static int readInt2(Object o, int offset) {
265-
return Word.objectToTrackedPointer(o).readInt(WordFactory.signed(offset), ID);
264+
return Word.objectToTrackedPointer(o).readInt(Word.signed(offset), ID);
266265
}
267266

268267
@Snippet
@@ -277,7 +276,7 @@ public static void writeInt1(Object o, int offset, int value) {
277276

278277
@Snippet
279278
public static void writeInt2(Object o, int offset, int value) {
280-
Word.objectToTrackedPointer(o).writeInt(WordFactory.signed(offset), value, ID);
279+
Word.objectToTrackedPointer(o).writeInt(Word.signed(offset), value, ID);
281280
}
282281

283282
@Snippet
@@ -292,7 +291,7 @@ public static long readLong1(Object o, int offset) {
292291

293292
@Snippet
294293
public static long readLong2(Object o, int offset) {
295-
return Word.objectToTrackedPointer(o).readLong(WordFactory.signed(offset), ID);
294+
return Word.objectToTrackedPointer(o).readLong(Word.signed(offset), ID);
296295
}
297296

298297
@Snippet
@@ -307,7 +306,7 @@ public static void writeLong1(Object o, int offset, long value) {
307306

308307
@Snippet
309308
public static void writeLong2(Object o, int offset, long value) {
310-
Word.objectToTrackedPointer(o).writeLong(WordFactory.signed(offset), value, ID);
309+
Word.objectToTrackedPointer(o).writeLong(Word.signed(offset), value, ID);
311310
}
312311

313312
@Snippet
@@ -322,7 +321,7 @@ public static float readFloat1(Object o, int offset) {
322321

323322
@Snippet
324323
public static float readFloat2(Object o, int offset) {
325-
return Word.objectToTrackedPointer(o).readFloat(WordFactory.signed(offset), ID);
324+
return Word.objectToTrackedPointer(o).readFloat(Word.signed(offset), ID);
326325
}
327326

328327
@Snippet
@@ -337,7 +336,7 @@ public static void writeFloat1(Object o, int offset, float value) {
337336

338337
@Snippet
339338
public static void writeFloat2(Object o, int offset, float value) {
340-
Word.objectToTrackedPointer(o).writeFloat(WordFactory.signed(offset), value, ID);
339+
Word.objectToTrackedPointer(o).writeFloat(Word.signed(offset), value, ID);
341340
}
342341

343342
@Snippet
@@ -352,7 +351,7 @@ public static double readDouble1(Object o, int offset) {
352351

353352
@Snippet
354353
public static double readDouble2(Object o, int offset) {
355-
return Word.objectToTrackedPointer(o).readDouble(WordFactory.signed(offset), ID);
354+
return Word.objectToTrackedPointer(o).readDouble(Word.signed(offset), ID);
356355
}
357356

358357
@Snippet
@@ -367,7 +366,7 @@ public static void writeDouble1(Object o, int offset, double value) {
367366

368367
@Snippet
369368
public static void writeDouble2(Object o, int offset, double value) {
370-
Word.objectToTrackedPointer(o).writeDouble(WordFactory.signed(offset), value, ID);
369+
Word.objectToTrackedPointer(o).writeDouble(Word.signed(offset), value, ID);
371370
}
372371

373372
@Snippet
@@ -382,7 +381,7 @@ public static Object readObject1(Object o, int offset) {
382381

383382
@Snippet
384383
public static Object readObject2(Object o, int offset) {
385-
return Word.objectToTrackedPointer(o).readObject(WordFactory.signed(offset), ID);
384+
return Word.objectToTrackedPointer(o).readObject(Word.signed(offset), ID);
386385
}
387386

388387
@Snippet
@@ -397,7 +396,7 @@ public static void writeObject1(Object o, int offset, Object value) {
397396

398397
@Snippet
399398
public static void writeObject2(Object o, int offset, Object value) {
400-
Word.objectToTrackedPointer(o).writeObject(WordFactory.signed(offset), value, ID);
399+
Word.objectToTrackedPointer(o).writeObject(Word.signed(offset), value, ID);
401400
}
402401

403402
@Snippet

0 commit comments

Comments
 (0)