@@ -16,6 +16,7 @@ import 'use_flag_test_helper.dart';
16
16
const int headerSize = 8 ;
17
17
final int compressedWordSize =
18
18
sizeOf <Pointer >() == 8 && ! Platform .executable.contains ('64C' ) ? 8 : 4 ;
19
+ const int wordSize = 8 ; // analyze_snapshot is not supported on arm32
19
20
20
21
// Used to ensure we don't have multiple equivalent calls to test.
21
22
final _seenDescriptions = < String > {};
@@ -222,7 +223,8 @@ Future<void> testAOT(
222
223
223
224
// We have:
224
225
// class Base {
225
- // static int baseS = int.parse('1');
226
+ // static int baseS0 = int.parse('1');
227
+ // static int baseS1 = int.parse('2');
226
228
// int base0;
227
229
// double base1;
228
230
// Object? base2;
@@ -231,10 +233,17 @@ Future<void> testAOT(
231
233
// }
232
234
//
233
235
// This static field is never tree shaken.
234
- expectField (baseFields[0 ], name: 'baseS' , flags: ['static' ]);
236
+ expectField (baseFields[0 ], name: 'baseS0' , flags: ['static' ]);
237
+ expectField (baseFields[1 ], name: 'baseS1' , flags: ['static' ]);
238
+
239
+ // Neighboring static fields should always be one word away
240
+ final int staticFieldOffset0 = baseFields[0 ]["static_field_offset" ];
241
+ final int staticFieldOffset1 = baseFields[1 ]["static_field_offset" ];
242
+ Expect .equals (staticFieldOffset1 - staticFieldOffset0, wordSize);
243
+
235
244
if (isProduct) {
236
245
// Most [Field] objests are tree shaken.
237
- Expect .equals (1 , baseFields.length);
246
+ Expect .equals (2 , baseFields.length);
238
247
239
248
int slotOffset = 0 ;
240
249
slotOffset += expectUnknown8Bytes (
@@ -264,28 +273,28 @@ Future<void> testAOT(
264
273
);
265
274
} else {
266
275
// We don't tree shake [Field] objects in non-product builds.
267
- Expect .equals (6 , baseFields.length);
276
+ Expect .equals (7 , baseFields.length);
268
277
expectField (
269
- baseFields[1 ],
278
+ baseFields[2 ],
270
279
name: 'base0' ,
271
280
isReference: false ,
272
281
unboxedType: 'int' ,
273
282
);
274
283
expectField (
275
- baseFields[2 ],
284
+ baseFields[3 ],
276
285
name: 'base1' ,
277
286
isReference: false ,
278
287
unboxedType: 'double' ,
279
288
);
280
- expectField (baseFields[3 ], name: 'base2' );
289
+ expectField (baseFields[4 ], name: 'base2' );
281
290
expectField (
282
- baseFields[4 ],
291
+ baseFields[5 ],
283
292
name: 'base3' ,
284
293
isReference: false ,
285
294
unboxedType: 'Float32x4' ,
286
295
);
287
296
expectField (
288
- baseFields[5 ],
297
+ baseFields[6 ],
289
298
name: 'base4' ,
290
299
isReference: false ,
291
300
unboxedType: 'Float64x2' ,
@@ -296,34 +305,34 @@ Future<void> testAOT(
296
305
offsetReferences: 0 ,
297
306
offsetBytes: 0 ,
298
307
isReference: false ,
299
- fieldId: baseFieldIds[1 ],
308
+ fieldId: baseFieldIds[2 ],
300
309
);
301
310
slotOffset += expectInstanceSlot (
302
311
baseSlots[slotOffset],
303
312
offsetReferences: 0 ,
304
313
offsetBytes: 8 ,
305
314
isReference: false ,
306
- fieldId: baseFieldIds[2 ],
315
+ fieldId: baseFieldIds[3 ],
307
316
);
308
317
slotOffset += expectInstanceSlot (
309
318
baseSlots[slotOffset],
310
319
offsetReferences: 0 ,
311
320
offsetBytes: 16 ,
312
- fieldId: baseFieldIds[3 ],
321
+ fieldId: baseFieldIds[4 ],
313
322
);
314
323
slotOffset += expectInstanceSlot (
315
324
baseSlots[slotOffset],
316
325
offsetReferences: 1 ,
317
326
offsetBytes: 16 ,
318
327
isReference: false ,
319
- fieldId: baseFieldIds[4 ],
328
+ fieldId: baseFieldIds[5 ],
320
329
);
321
330
slotOffset += expectInstanceSlot (
322
331
baseSlots[slotOffset],
323
332
offsetReferences: 1 ,
324
333
offsetBytes: 32 ,
325
334
isReference: false ,
326
- fieldId: baseFieldIds[5 ],
335
+ fieldId: baseFieldIds[6 ],
327
336
);
328
337
}
329
338
// We have:
0 commit comments