Skip to content

Commit 7b30d35

Browse files
aamCommit Queue
authored andcommitted
[vm/shared] Ensure field initialization uses store-release semantic for updating shared fields.
Fixes #61367 TEST=ci tsan Change-Id: I8e3e6fa1e4f4a799f19eca298be9e37c972b3343 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/447442 Reviewed-by: Ryan Macnak <[email protected]> Commit-Queue: Alexander Aprelev <[email protected]>
1 parent ada8082 commit 7b30d35

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

runtime/vm/compiler/stub_code_compiler.cc

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,12 +137,20 @@ void StubCodeCompiler::GenerateInitLateStaticFieldStub(bool is_final,
137137
Label throw_exception;
138138
if (is_final) {
139139
__ Comment("Checking that initializer did not set late final field");
140-
__ LoadFromOffset(kScratchReg, kAddressReg, 0);
140+
if (is_shared) {
141+
__ LoadAcquireFromOffset(kScratchReg, kAddressReg, 0);
142+
} else {
143+
__ LoadFromOffset(kScratchReg, kAddressReg, 0);
144+
}
141145
__ CompareObject(kScratchReg, SentinelObject());
142146
__ BranchIf(NOT_EQUAL, &throw_exception);
143147
}
144148

145-
__ StoreToOffset(kResultReg, kAddressReg, 0);
149+
if (is_shared) {
150+
__ StoreReleaseToOffset(kResultReg, kAddressReg, 0);
151+
} else {
152+
__ StoreToOffset(kResultReg, kAddressReg, 0);
153+
}
146154
__ LeaveStubFrame();
147155
__ Ret();
148156

0 commit comments

Comments
 (0)