Skip to content

Commit 56d0115

Browse files
aamCommit Queue
authored andcommitted
[vm/shared] Allow sharing of ffi structs/unions.
Deeply immutable validator runs after the FFI definitions transform so it validates the inserted annotations. ffi Arrays are not allowed to be shared at the moment. This doesn't prevent sharing structs with arrays because corresponding getter creates a new object. Whole ffi NativeType hierarchy is not tagged as deeply immutable because of Array. Updated FE test expectations: ``` $ tools/test.py -m release --vm-options -DupdateExpectations=true --timeout 600 pkg/vm/ $ dart --enable-asserts pkg/front_end/test/coverage_suite.dart --tasks=5 --add-and-remove-comments --update-expectations $ dart pkg/front_end/tool/update_expectations.dart ``` BUG=#60825 TEST=shared_test Change-Id: I50378058ddd9bc72eb1b60b22ca26ef936f5ba09 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/440523 Reviewed-by: Paul Berry <[email protected]> Commit-Queue: Alexander Aprelev <[email protected]>
1 parent 6f0909d commit 56d0115

File tree

53 files changed

+2693
-2426
lines changed

Some content is hidden

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

53 files changed

+2693
-2426
lines changed

pkg/front_end/lib/src/compute_platform_binaries_location.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ Uri computePlatformBinariesLocation({bool forceBuildDir = false}) {
5555
new Uri.file(resolvedExecutable ?? Platform.resolvedExecutable))
5656
.resolve(".");
5757
if (vmDirectory.path.endsWith("/bin/")) {
58+
// Coverage-ignore-block(suite): Not run.
5859
// Looks like the VM is in a `/bin/` directory, so this is running from a
5960
// built SDK.
6061
return vmDirectory.resolve(forceBuildDir ? "../../" : "../lib/_internal/");

pkg/front_end/test/coverage_suite_expected.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,7 @@ const Map<String, ({int hitCount, int missCount})> _expect = {
425425
),
426426
// 100.0%.
427427
"package:front_end/src/compute_platform_binaries_location.dart": (
428-
hitCount: 46,
428+
hitCount: 45,
429429
missCount: 0,
430430
),
431431
// 100.0%.

pkg/front_end/testcases/general/ffi_external_in_part_file.dart.strong.transformed.expect

Lines changed: 37 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -8,67 +8,70 @@ import "dart:_internal" as _in;
88
import "dart:ffi";
99

1010
part ffi_external_in_part_lib.dart;
11-
@#C6
11+
@#C3
12+
@#C8
1213
final class Struct1ByteInt extends ffi::Struct {
1314
synthetic constructor •() → self::Struct1ByteInt
1415
: super ffi::Struct::•()
1516
;
1617
constructor #fromTypedDataBase(synthesized core::Object #typedDataBase, synthesized core::int #offsetInBytes) → self::Struct1ByteInt
1718
: super ffi::Struct::_fromTypedDataBase(#typedDataBase, #offsetInBytes)
1819
;
19-
@#C8
20+
@#C10
2021
constructor #fromTypedData(synthesized typ::TypedData #typedData, synthesized core::int #offset, synthesized core::int #sizeInBytes) → self::Struct1ByteInt
2122
: super ffi::Struct::_fromTypedData(#typedData, #offset, #sizeInBytes)
2223
;
23-
@#C9
24-
@#C8
24+
@#C11
25+
@#C10
2526
get a0() → core::int
2627
return ffi::_loadInt8(this.{ffi::_Compound::_typedDataBase}{core::Object}, self::Struct1ByteInt::a0#offsetOf.{core::num::+}(this.{ffi::_Compound::_offsetInBytes}{core::int}){(core::num) → core::num});
27-
@#C9
28-
@#C8
28+
@#C11
29+
@#C10
2930
set a0(synthesized core::int #externalFieldValue) → void
3031
return ffi::_storeInt8(this.{ffi::_Compound::_typedDataBase}{core::Object}, self::Struct1ByteInt::a0#offsetOf.{core::num::+}(this.{ffi::_Compound::_offsetInBytes}{core::int}){(core::num) → core::num}, #externalFieldValue);
31-
@#C8
32+
@#C10
3233
static synthetic get a0#offsetOf() → core::int
33-
return #C11.{core::List::[]}(ffi::_abi()){(core::int) → core::int};
34-
@#C8
35-
static get #sizeOf() → core::int
3634
return #C13.{core::List::[]}(ffi::_abi()){(core::int) → core::int};
35+
@#C10
36+
static get #sizeOf() → core::int
37+
return #C15.{core::List::[]}(ffi::_abi()){(core::int) → core::int};
3738
}
3839
static method notMain() → void {
3940
core::print(self::returnStruct1ByteIntNative(1.{core::int::unary-}(){() → core::int}));
4041
}
41-
@#C19
42-
@#C8
42+
@#C21
43+
@#C10
4344
static method /* from org-dartlang-testcase:///ffi_external_in_part_lib.dart */ returnStruct1ByteIntNative(core::int a0) → self::Struct1ByteInt
4445
return block {
45-
_in::_nativeEffect(new self::Struct1ByteInt::#fromTypedDataBase(typ::Uint8List::•(#C12), #C10));
46+
_in::_nativeEffect(new self::Struct1ByteInt::#fromTypedDataBase(typ::Uint8List::•(#C14), #C12));
4647
} =>self::_returnStruct1ByteIntNative$Method$FfiNative(a0);
47-
@#C21
48+
@#C23
4849
external static method /* from org-dartlang-testcase:///ffi_external_in_part_lib.dart */ _returnStruct1ByteIntNative$Method$FfiNative(core::int #t0) → self::Struct1ByteInt;
4950

5051
constants {
51-
#C1 = "vm:ffi:struct-fields"
52-
#C2 = TypeLiteralConstant(ffi::Int8)
53-
#C3 = <core::Type>[#C2]
54-
#C4 = null
55-
#C5 = ffi::_FfiStructLayout {fieldTypes:#C3, packing:#C4}
56-
#C6 = core::pragma {name:#C1, options:#C5}
57-
#C7 = "vm:prefer-inline"
58-
#C8 = core::pragma {name:#C7, options:#C4}
59-
#C9 = ffi::Int8 {}
60-
#C10 = 0
61-
#C11 = <core::int>[#C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10]
62-
#C12 = 1
52+
#C1 = "vm:deeply-immutable"
53+
#C2 = null
54+
#C3 = core::pragma {name:#C1, options:#C2}
55+
#C4 = "vm:ffi:struct-fields"
56+
#C5 = TypeLiteralConstant(ffi::Int8)
57+
#C6 = <core::Type>[#C5]
58+
#C7 = ffi::_FfiStructLayout {fieldTypes:#C6, packing:#C2}
59+
#C8 = core::pragma {name:#C4, options:#C7}
60+
#C9 = "vm:prefer-inline"
61+
#C10 = core::pragma {name:#C9, options:#C2}
62+
#C11 = ffi::Int8 {}
63+
#C12 = 0
6364
#C13 = <core::int>[#C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12]
64-
#C14 = "cfe:ffi:native-marker"
65-
#C15 = "ReturnStruct1ByteInt"
66-
#C16 = "org-dartlang-testcase:///ffi_external_in_part_file.dart"
67-
#C17 = false
68-
#C18 = ffi::Native<(ffi::Int8) → self::Struct1ByteInt> {symbol:#C15, assetId:#C16, isLeaf:#C17}
69-
#C19 = core::pragma {name:#C14, options:#C18}
70-
#C20 = "vm:ffi:native"
71-
#C21 = core::pragma {name:#C20, options:#C18}
65+
#C14 = 1
66+
#C15 = <core::int>[#C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14]
67+
#C16 = "cfe:ffi:native-marker"
68+
#C17 = "ReturnStruct1ByteInt"
69+
#C18 = "org-dartlang-testcase:///ffi_external_in_part_file.dart"
70+
#C19 = false
71+
#C20 = ffi::Native<(ffi::Int8) → self::Struct1ByteInt> {symbol:#C17, assetId:#C18, isLeaf:#C19}
72+
#C21 = core::pragma {name:#C16, options:#C20}
73+
#C22 = "vm:ffi:native"
74+
#C23 = core::pragma {name:#C22, options:#C20}
7275
}
7376

7477
Extra constant evaluation status:

pkg/front_end/testcases/general/ffi_sample.dart.strong.transformed.expect

Lines changed: 41 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -21,79 +21,82 @@ import "dart:typed_data" as typ;
2121
import "dart:ffi";
2222
import "package:ffi/ffi.dart";
2323

24-
@#C7
24+
@#C3
25+
@#C9
2526
class Coordinate extends ffi::Struct {
2627
constructor #fromTypedDataBase(synthesized core::Object #typedDataBase, synthesized core::int #offsetInBytes) → self::Coordinate
2728
: super ffi::Struct::_fromTypedDataBase(#typedDataBase, #offsetInBytes)
2829
;
29-
@#C9
30+
@#C11
3031
constructor #fromTypedData(synthesized typ::TypedData #typedData, synthesized core::int #offset, synthesized core::int #sizeInBytes) → self::Coordinate
3132
: super ffi::Struct::_fromTypedData(#typedData, #offset, #sizeInBytes)
3233
;
33-
@#C10
34-
@#C9
34+
@#C12
35+
@#C11
3536
get x() → core::double
3637
return ffi::_loadDouble(this.{ffi::_Compound::_typedDataBase}{core::Object}, self::Coordinate::x#offsetOf.{core::num::+}(this.{ffi::_Compound::_offsetInBytes}{core::int}){(core::num) → core::num});
37-
@#C10
38-
@#C9
38+
@#C12
39+
@#C11
3940
set x(synthesized core::double #externalFieldValue) → void
4041
return ffi::_storeDouble(this.{ffi::_Compound::_typedDataBase}{core::Object}, self::Coordinate::x#offsetOf.{core::num::+}(this.{ffi::_Compound::_offsetInBytes}{core::int}){(core::num) → core::num}, #externalFieldValue);
41-
@#C10
42-
@#C9
42+
@#C12
43+
@#C11
4344
get y() → core::double
4445
return ffi::_loadDouble(this.{ffi::_Compound::_typedDataBase}{core::Object}, self::Coordinate::y#offsetOf.{core::num::+}(this.{ffi::_Compound::_offsetInBytes}{core::int}){(core::num) → core::num});
45-
@#C10
46-
@#C9
46+
@#C12
47+
@#C11
4748
set y(synthesized core::double #externalFieldValue) → void
4849
return ffi::_storeDouble(this.{ffi::_Compound::_typedDataBase}{core::Object}, self::Coordinate::y#offsetOf.{core::num::+}(this.{ffi::_Compound::_offsetInBytes}{core::int}){(core::num) → core::num}, #externalFieldValue);
4950
static factory allocate(ffi::Allocator allocator, core::double x, core::double y, ffi::Pointer<self::Coordinate> next) → self::Coordinate {
50-
return let final self::Coordinate #t1 = new self::Coordinate::#fromTypedDataBase(allocator.{ffi::Allocator::allocate}<self::Coordinate>(self::Coordinate::#sizeOf){(core::int, {alignment: core::int?}) → ffi::Pointer<self::Coordinate>}!, #C11) in block {
51+
return let final self::Coordinate #t1 = new self::Coordinate::#fromTypedDataBase(allocator.{ffi::Allocator::allocate}<self::Coordinate>(self::Coordinate::#sizeOf){(core::int, {alignment: core::int?}) → ffi::Pointer<self::Coordinate>}!, #C13) in block {
5152
#t1.{self::Coordinate::x} = x;
5253
#t1.{self::Coordinate::y} = y;
5354
#t1.{self::Coordinate::next} = next;
5455
} =>#t1;
5556
}
56-
@#C9
57+
@#C11
5758
static synthetic get x#offsetOf() → core::int
58-
return #C12.{core::List::[]}(ffi::_abi()){(core::int) → core::int};
59-
@#C9
60-
static synthetic get y#offsetOf() → core::int
6159
return #C14.{core::List::[]}(ffi::_abi()){(core::int) → core::int};
62-
@#C9
63-
static synthetic get next#offsetOf() → core::int
60+
@#C11
61+
static synthetic get y#offsetOf() → core::int
6462
return #C16.{core::List::[]}(ffi::_abi()){(core::int) → core::int};
65-
@#C9
63+
@#C11
64+
static synthetic get next#offsetOf() → core::int
65+
return #C18.{core::List::[]}(ffi::_abi()){(core::int) → core::int};
66+
@#C11
6667
get next() → ffi::Pointer<self::Coordinate>
6768
return ffi::_loadPointer<self::Coordinate>(this.{ffi::_Compound::_typedDataBase}{core::Object}, self::Coordinate::next#offsetOf.{core::num::+}(this.{ffi::_Compound::_offsetInBytes}{core::int}){(core::num) → core::num});
68-
@#C9
69+
@#C11
6970
set next(synthesized ffi::Pointer<self::Coordinate> #v) → void
7071
return ffi::_storePointer<self::Coordinate>(this.{ffi::_Compound::_typedDataBase}{core::Object}, self::Coordinate::next#offsetOf.{core::num::+}(this.{ffi::_Compound::_offsetInBytes}{core::int}){(core::num) → core::num}, #v);
71-
@#C9
72+
@#C11
7273
static get #sizeOf() → core::int
73-
return #C19.{core::List::[]}(ffi::_abi()){(core::int) → core::int};
74+
return #C21.{core::List::[]}(ffi::_abi()){(core::int) → core::int};
7475
}
7576
static method main() → dynamic {}
7677

7778
constants {
78-
#C1 = "vm:ffi:struct-fields"
79-
#C2 = TypeLiteralConstant(ffi::Double)
80-
#C3 = TypeLiteralConstant(ffi::Pointer<core::Object>)
81-
#C4 = <core::Type>[#C2, #C2, #C3]
82-
#C5 = null
83-
#C6 = ffi::_FfiStructLayout {fieldTypes:#C4, packing:#C5}
84-
#C7 = core::pragma {name:#C1, options:#C6}
85-
#C8 = "vm:prefer-inline"
86-
#C9 = core::pragma {name:#C8, options:#C5}
87-
#C10 = ffi::Double {}
88-
#C11 = 0
89-
#C12 = <core::int>[#C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11]
90-
#C13 = 8
79+
#C1 = "vm:deeply-immutable"
80+
#C2 = null
81+
#C3 = core::pragma {name:#C1, options:#C2}
82+
#C4 = "vm:ffi:struct-fields"
83+
#C5 = TypeLiteralConstant(ffi::Double)
84+
#C6 = TypeLiteralConstant(ffi::Pointer<core::Object>)
85+
#C7 = <core::Type>[#C5, #C5, #C6]
86+
#C8 = ffi::_FfiStructLayout {fieldTypes:#C7, packing:#C2}
87+
#C9 = core::pragma {name:#C4, options:#C8}
88+
#C10 = "vm:prefer-inline"
89+
#C11 = core::pragma {name:#C10, options:#C2}
90+
#C12 = ffi::Double {}
91+
#C13 = 0
9192
#C14 = <core::int>[#C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13]
92-
#C15 = 16
93+
#C15 = 8
9394
#C16 = <core::int>[#C15, #C15, #C15, #C15, #C15, #C15, #C15, #C15, #C15, #C15, #C15, #C15, #C15, #C15, #C15, #C15, #C15, #C15, #C15, #C15, #C15, #C15]
94-
#C17 = 24
95-
#C18 = 20
96-
#C19 = <core::int>[#C17, #C17, #C18, #C17, #C17, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C17, #C17, #C17, #C17]
95+
#C17 = 16
96+
#C18 = <core::int>[#C17, #C17, #C17, #C17, #C17, #C17, #C17, #C17, #C17, #C17, #C17, #C17, #C17, #C17, #C17, #C17, #C17, #C17, #C17, #C17, #C17, #C17]
97+
#C19 = 24
98+
#C20 = 20
99+
#C21 = <core::int>[#C19, #C19, #C20, #C19, #C19, #C19, #C19, #C19, #C20, #C19, #C19, #C19, #C19, #C20, #C19, #C19, #C19, #C19, #C19, #C19, #C19, #C19]
97100
}
98101

99102

pkg/front_end/testcases/incremental/crash_05.yaml.world.1.expect

Lines changed: 39 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,83 +3,87 @@ library from "org-dartlang-test:///lib.dart" as lib {
33

44
import "dart:ffi";
55

6-
@#C6
6+
@#C3
7+
@#C8
78
final class Y extends dart.ffi::Struct {
89
synthetic constructor •() → lib::Y
910
: super dart.ffi::Struct::•()
1011
;
1112
constructor #fromTypedDataBase(synthesized dart.core::Object #typedDataBase, synthesized dart.core::int #offsetInBytes) → lib::Y
1213
: super dart.ffi::Struct::_fromTypedDataBase(#typedDataBase, #offsetInBytes)
1314
;
14-
@#C8
15+
@#C10
1516
constructor #fromTypedData(synthesized dart.typed_data::TypedData #typedData, synthesized dart.core::int #offset, synthesized dart.core::int #sizeInBytes) → lib::Y
1617
: super dart.ffi::Struct::_fromTypedData(#typedData, #offset, #sizeInBytes)
1718
;
18-
@#C9
19-
@#C8
19+
@#C11
20+
@#C10
2021
get yy() → dart.core::int
2122
return dart.ffi::_loadUint32(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, lib::Y::yy#offsetOf.{dart.core::num::+}(this.{dart.ffi::_Compound::_offsetInBytes}{dart.core::int}){(dart.core::num) → dart.core::num});
22-
@#C9
23-
@#C8
23+
@#C11
24+
@#C10
2425
set yy(synthesized dart.core::int #externalFieldValue) → void
2526
return dart.ffi::_storeUint32(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, lib::Y::yy#offsetOf.{dart.core::num::+}(this.{dart.ffi::_Compound::_offsetInBytes}{dart.core::int}){(dart.core::num) → dart.core::num}, #externalFieldValue);
26-
@#C8
27+
@#C10
2728
static synthetic get yy#offsetOf() → dart.core::int
28-
return #C11.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int};
29-
@#C8
30-
static get #sizeOf() → dart.core::int
3129
return #C13.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int};
30+
@#C10
31+
static get #sizeOf() → dart.core::int
32+
return #C15.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int};
3233
}
3334
}
3435
library from "org-dartlang-test:///main.dart" as main {
3536

3637
import "dart:ffi";
3738
import "org-dartlang-test:///lib.dart";
3839

39-
@#C17
40+
@#C3
41+
@#C19
4042
final class X extends dart.ffi::Struct {
4143
synthetic constructor •() → main::X
4244
: super dart.ffi::Struct::•()
4345
;
4446
constructor #fromTypedDataBase(synthesized dart.core::Object #typedDataBase, synthesized dart.core::int #offsetInBytes) → main::X
4547
: super dart.ffi::Struct::_fromTypedDataBase(#typedDataBase, #offsetInBytes)
4648
;
47-
@#C8
49+
@#C10
4850
constructor #fromTypedData(synthesized dart.typed_data::TypedData #typedData, synthesized dart.core::int #offset, synthesized dart.core::int #sizeInBytes) → main::X
4951
: super dart.ffi::Struct::_fromTypedData(#typedData, #offset, #sizeInBytes)
5052
;
51-
@#C8
53+
@#C10
5254
get xx() → lib::Y
5355
return new lib::Y::#fromTypedDataBase(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, main::X::xx#offsetOf.{dart.core::num::+}(this.{dart.ffi::_Compound::_offsetInBytes}{dart.core::int}){(dart.core::num) → dart.core::num});
54-
@#C8
56+
@#C10
5557
set xx(synthesized lib::Y #externalFieldValue) → void
56-
return dart.ffi::_memCopy(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, main::X::xx#offsetOf.{dart.core::num::+}(this.{dart.ffi::_Compound::_offsetInBytes}{dart.core::int}){(dart.core::num) → dart.core::num}, #externalFieldValue.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #externalFieldValue.{dart.ffi::_Compound::_offsetInBytes}{dart.core::int}, #C13.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int});
57-
@#C8
58+
return dart.ffi::_memCopy(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, main::X::xx#offsetOf.{dart.core::num::+}(this.{dart.ffi::_Compound::_offsetInBytes}{dart.core::int}){(dart.core::num) → dart.core::num}, #externalFieldValue.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #externalFieldValue.{dart.ffi::_Compound::_offsetInBytes}{dart.core::int}, #C15.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int});
59+
@#C10
5860
static synthetic get xx#offsetOf() → dart.core::int
59-
return #C11.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int};
60-
@#C8
61-
static get #sizeOf() → dart.core::int
6261
return #C13.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int};
62+
@#C10
63+
static get #sizeOf() → dart.core::int
64+
return #C15.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int};
6365
}
6466
}
6567
constants {
66-
#C1 = "vm:ffi:struct-fields"
67-
#C2 = TypeLiteralConstant(dart.ffi::Uint32)
68-
#C3 = <dart.core::Type>[#C2]
69-
#C4 = null
70-
#C5 = dart.ffi::_FfiStructLayout {fieldTypes:#C3, packing:#C4}
71-
#C6 = dart.core::pragma {name:#C1, options:#C5}
72-
#C7 = "vm:prefer-inline"
73-
#C8 = dart.core::pragma {name:#C7, options:#C4}
74-
#C9 = dart.ffi::Uint32 {}
75-
#C10 = 0
76-
#C11 = <dart.core::int>[#C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10]
77-
#C12 = 4
68+
#C1 = "vm:deeply-immutable"
69+
#C2 = null
70+
#C3 = dart.core::pragma {name:#C1, options:#C2}
71+
#C4 = "vm:ffi:struct-fields"
72+
#C5 = TypeLiteralConstant(dart.ffi::Uint32)
73+
#C6 = <dart.core::Type>[#C5]
74+
#C7 = dart.ffi::_FfiStructLayout {fieldTypes:#C6, packing:#C2}
75+
#C8 = dart.core::pragma {name:#C4, options:#C7}
76+
#C9 = "vm:prefer-inline"
77+
#C10 = dart.core::pragma {name:#C9, options:#C2}
78+
#C11 = dart.ffi::Uint32 {}
79+
#C12 = 0
7880
#C13 = <dart.core::int>[#C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12]
79-
#C14 = TypeLiteralConstant(lib::Y)
80-
#C15 = <dart.core::Type>[#C14]
81-
#C16 = dart.ffi::_FfiStructLayout {fieldTypes:#C15, packing:#C4}
82-
#C17 = dart.core::pragma {name:#C1, options:#C16}
81+
#C14 = 4
82+
#C15 = <dart.core::int>[#C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14, #C14]
83+
#C16 = TypeLiteralConstant(lib::Y)
84+
#C17 = <dart.core::Type>[#C16]
85+
#C18 = dart.ffi::_FfiStructLayout {fieldTypes:#C17, packing:#C2}
86+
#C19 = dart.core::pragma {name:#C4, options:#C18}
8387
}
8488

8589

0 commit comments

Comments
 (0)