[XL] Change in dart/sdk[main]: [vm/shared] Ensure stores into shared static variables are checked.

0 views
Skip to first unread message

Alexander Markov (Gerrit)

unread,
Dec 19, 2025, 12:17:40 PM (2 days ago) Dec 19
to Alexander Aprelev, Alexander Markov, Slava Egorov, Commit Queue, dart-vm-compil...@google.com, rev...@dartlang.org, vm-...@dartlang.org
Attention needed from Alexander Aprelev

Alexander Markov added 14 comments

Commit Message
Line 14, Patchset 3 (Latest):Change-Id: I27416773fd77077018739ea4dbcc6e4695e67be8
Alexander Markov . unresolved

Please add
```
Cq-Include-Trybots: luci.dart.try:vm-dyn-linux-debug-x64-try,vm-dyn-mac-debug-arm64-try,vm-aot-dyn-linux-debug-x64-try
```
to test interpreter in the debug mode.

File runtime/vm/compiler/backend/il_arm.cc
Line 2943, Patchset 3 (Latest): __ ldrb(temp, compiler::FieldAddress(
Alexander Markov . unresolved

Nit: consider loading the whole word to match other architectures (and avoid possible performance penalties).

Line 2956, Patchset 3 (Latest): __ CompareImmediate(temp, kFirstTypedDataCid);
__ b(&allow_store, LT);
__ CompareImmediate(temp, kLastTypedDataCid);
__ b(checked_store_into_shared_slow_path->entry_label(), LT);
Alexander Markov . unresolved

Why do we need to go to the runtime for `TypedData`? As per https://github.com/dart-lang/language/blob/main/working/333%20-%20shared%20memory%20multithreading/proposal.md, all TypedData instances are allowed.

(also in other `il_<arch>.cc`)

File runtime/vm/ffi_callback_metadata.h
Line 369, Patchset 3 (Latest): ObjectPtr object_ptr,
Alexander Markov . unresolved

Consider passing a handle instead of raw object pointer as handle is created anyway. Passing a raw object pointer is unsafe, so we need to ensure that safepoints are not happening for the whole duration of the function call (e.g. caller needs to use `NoSafepointScope`).

(also for other functions)

Line 40, Patchset 3 (Latest): ObjectPtr offendingValue_;
Alexander Markov . unresolved

How can we make sure raw pointer is not cached across a safepoint?

File runtime/vm/ffi_callback_metadata.cc
Line 387, Patchset 3 (Latest): auto& object = Object::Handle(zone, object_ptr);
Alexander Markov . unresolved

Creating a handle for each tested object seems expensive. Consider rewriting this checking as a helper class with a few cached and reused handles.

Line 401, Patchset 3 (Latest): if (object.IsImmutable()) {
Alexander Markov . unresolved

Should we also test `IsCanonical()` bit to allow arbitrary compile-time constant objects, as mentioned in https://github.com/dart-lang/language/blob/main/working/333%20-%20shared%20memory%20multithreading/proposal.md?

Consider also doing this in the fast-path before calling runtime.

Line 409, Patchset 3 (Latest): Context::Handle(zone, Context::RawCast(object.ptr()));
Alexander Markov . unresolved

Nit: we can continue using the same handle via `Context::Cast(object)`.

Line 412, Patchset 3 (Latest): CheckIfTriviallyImmutableHelper(zone, context.At(i), visited, result);
Alexander Markov . unresolved

Consider using a worklist instead of recursion to avoid stack overflows in case of deep chains of closures. This would also make it easier to reuse handles.

Line 428, Patchset 3 (Latest): const auto& function = Function::Handle(closure.function());
Alexander Markov . unresolved

Nit: `zone, `

Line 435, Patchset 3 (Latest):}
Alexander Markov . unresolved

Consider adding a separate `IsShareable` bit which we can set on closures to avoid repeated checking. Or maybe `IsImmutable` should be split to `IsDeeplyImmutable` and `IsShallowImmutable`, then we can set `IsShallowImmutable` on closures when they are created and `IsDeeplyImmutable` after they are checked.

Line 461, Patchset 3 (Latest): message ^= String::NewFormatted(
Alexander Markov . unresolved

This would create a new object which involves a safepoint. We should avoid having raw object pointers (e.g. `object_ptr`) when safepoint can be triggered.

File runtime/vm/interpreter.cc
Line 3719, Patchset 3 (Latest): FfiCallbackMetadata::CheckIfTriviallyImmutable(thread->zone(), value,
Alexander Markov . unresolved

Similarly to compiled code, we should guard this code with `FLAG_experimental_shared_data` and do all fast-path checks (e.g. test ImmutableBit and ClosureCid) before calling into a slower check which may create handles or throw an exception. Also, we should do a proper runtime call via `INVOKE_RUNTIME`. The same runtime entry can be used both for compiled code and the interpreter.

File runtime/vm/object.cc
Line 13499, Patchset 3 (Latest): if (is_shared()) {
Alexander Markov . unresolved

`FLAG_experimental_shared_data && is_shared()` to match behavior of the compiled code.

Open in Gerrit

Related details

Attention is currently required from:
  • Alexander Aprelev
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement satisfiedCommit-Message-Has-TEST
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: I27416773fd77077018739ea4dbcc6e4695e67be8
Gerrit-Change-Number: 469103
Gerrit-PatchSet: 3
Gerrit-Owner: Alexander Aprelev <a...@google.com>
Gerrit-Reviewer: Alexander Aprelev <a...@google.com>
Gerrit-Reviewer: Alexander Markov <alexm...@google.com>
Gerrit-CC: Slava Egorov <veg...@google.com>
Gerrit-Attention: Alexander Aprelev <a...@google.com>
Gerrit-Comment-Date: Fri, 19 Dec 2025 17:17:37 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Alexander Aprelev (Gerrit)

unread,
Dec 19, 2025, 1:41:46 PM (2 days ago) Dec 19
to Alexander Aprelev, Alexander Markov, Slava Egorov, Commit Queue, dart-vm-compil...@google.com, rev...@dartlang.org, vm-...@dartlang.org
Attention needed from Alexander Markov

Alexander Aprelev voted and added 12 comments

Votes added by Alexander Aprelev

Commit-Queue+1

12 comments

Patchset-level comments
File-level comment, Patchset 5 (Latest):
Alexander Aprelev . resolved

thank you for the comments so far!

Commit Message
Line 14, Patchset 3:Change-Id: I27416773fd77077018739ea4dbcc6e4695e67be8
Alexander Markov . resolved

Please add
```
Cq-Include-Trybots: luci.dart.try:vm-dyn-linux-debug-x64-try,vm-dyn-mac-debug-arm64-try,vm-aot-dyn-linux-debug-x64-try
```
to test interpreter in the debug mode.

Alexander Aprelev

Done

File runtime/vm/compiler/backend/il_arm.cc
Line 2943, Patchset 3: __ ldrb(temp, compiler::FieldAddress(
Alexander Markov . resolved

Nit: consider loading the whole word to match other architectures (and avoid possible performance penalties).

Alexander Aprelev

Done

Line 2956, Patchset 3: __ CompareImmediate(temp, kFirstTypedDataCid);

__ b(&allow_store, LT);
__ CompareImmediate(temp, kLastTypedDataCid);
__ b(checked_store_into_shared_slow_path->entry_label(), LT);
Alexander Markov . resolved

Why do we need to go to the runtime for `TypedData`? As per https://github.com/dart-lang/language/blob/main/working/333%20-%20shared%20memory%20multithreading/proposal.md, all TypedData instances are allowed.

(also in other `il_<arch>.cc`)

Alexander Aprelev

Done

File runtime/vm/ffi_callback_metadata.h
Line 369, Patchset 3: ObjectPtr object_ptr,
Alexander Markov . resolved

Consider passing a handle instead of raw object pointer as handle is created anyway. Passing a raw object pointer is unsafe, so we need to ensure that safepoints are not happening for the whole duration of the function call (e.g. caller needs to use `NoSafepointScope`).

(also for other functions)

Alexander Aprelev

The use in interpreter.cc is such that it requires no safepoints, so it seems reasonable to have this highlighted via explicit ObjectPtr passing..

Line 40, Patchset 3: ObjectPtr offendingValue_;
Alexander Markov . resolved

How can we make sure raw pointer is not cached across a safepoint?

Alexander Aprelev

That's the purpose of this class is - to hold values while we can't allocate during running the interpreter.

File runtime/vm/ffi_callback_metadata.cc
Line 401, Patchset 3: if (object.IsImmutable()) {
Alexander Markov . resolved

Should we also test `IsCanonical()` bit to allow arbitrary compile-time constant objects, as mentioned in https://github.com/dart-lang/language/blob/main/working/333%20-%20shared%20memory%20multithreading/proposal.md?

Consider also doing this in the fast-path before calling runtime.

Alexander Aprelev

Done

Line 409, Patchset 3: Context::Handle(zone, Context::RawCast(object.ptr()));
Alexander Markov . resolved

Nit: we can continue using the same handle via `Context::Cast(object)`.

Alexander Aprelev

Done

Line 428, Patchset 3: const auto& function = Function::Handle(closure.function());
Alexander Markov . resolved

Nit: `zone, `

Alexander Aprelev

Done

Line 461, Patchset 3: message ^= String::NewFormatted(
Alexander Markov . resolved

This would create a new object which involves a safepoint. We should avoid having raw object pointers (e.g. `object_ptr`) when safepoint can be triggered.

Alexander Aprelev

Done

File runtime/vm/interpreter.cc
Line 3719, Patchset 3: FfiCallbackMetadata::CheckIfTriviallyImmutable(thread->zone(), value,
Alexander Markov . unresolved

Similarly to compiled code, we should guard this code with `FLAG_experimental_shared_data` and do all fast-path checks (e.g. test ImmutableBit and ClosureCid) before calling into a slower check which may create handles or throw an exception. Also, we should do a proper runtime call via `INVOKE_RUNTIME`. The same runtime entry can be used both for compiled code and the interpreter.

Alexander Aprelev

What are the reasons to do the checks in the runtime rather than call this CheckIfTriviallyImmutable? That function is reused between the compiled code and interpreter.
Going to runtime seems to be slower, less efficient.

File runtime/vm/object.cc
Line 13499, Patchset 3: if (is_shared()) {
Alexander Markov . resolved

`FLAG_experimental_shared_data && is_shared()` to match behavior of the compiled code.

Alexander Aprelev

Done

Open in Gerrit

Related details

Attention is currently required from:
  • Alexander Markov
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement satisfiedCommit-Message-Has-TEST
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: I27416773fd77077018739ea4dbcc6e4695e67be8
Gerrit-Change-Number: 469103
Gerrit-PatchSet: 5
Gerrit-Owner: Alexander Aprelev <a...@google.com>
Gerrit-Reviewer: Alexander Aprelev <a...@google.com>
Gerrit-Reviewer: Alexander Markov <alexm...@google.com>
Gerrit-CC: Slava Egorov <veg...@google.com>
Gerrit-Attention: Alexander Markov <alexm...@google.com>
Gerrit-Comment-Date: Fri, 19 Dec 2025 18:41:43 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
Comment-In-Reply-To: Alexander Markov <alexm...@google.com>
satisfied_requirement
unsatisfied_requirement
open
diffy

Alexander Markov (Gerrit)

unread,
Dec 19, 2025, 2:11:31 PM (2 days ago) Dec 19
to Alexander Aprelev, Alexander Markov, Slava Egorov, Commit Queue, dart-vm-compil...@google.com, rev...@dartlang.org, vm-...@dartlang.org
Attention needed from Alexander Aprelev

Alexander Markov added 4 comments

File runtime/vm/ffi_callback_metadata.h
Line 40, Patchset 3: ObjectPtr offendingValue_;
Alexander Markov . unresolved

How can we make sure raw pointer is not cached across a safepoint?

Alexander Aprelev

That's the purpose of this class is - to hold values while we can't allocate during running the interpreter.

Alexander Markov

We need to either verify/assert that safepoint doesn't happen or use handles. I added another comment which points to the place where this object holds a raw pointer across safepoint.

File runtime/vm/interpreter.cc
Line 3719, Patchset 3: FfiCallbackMetadata::CheckIfTriviallyImmutable(thread->zone(), value,
Alexander Markov . unresolved

Similarly to compiled code, we should guard this code with `FLAG_experimental_shared_data` and do all fast-path checks (e.g. test ImmutableBit and ClosureCid) before calling into a slower check which may create handles or throw an exception. Also, we should do a proper runtime call via `INVOKE_RUNTIME`. The same runtime entry can be used both for compiled code and the interpreter.

Alexander Aprelev

What are the reasons to do the checks in the runtime rather than call this CheckIfTriviallyImmutable? That function is reused between the compiled code and interpreter.
Going to runtime seems to be slower, less efficient.

Alexander Markov

The interpreter implementation directly works with raw pointers and quite restrictive wrt what it can call/use. For example, interpreter should not allocate / leak handles and `CheckIfTriviallyImmutable` currently allocates them (so executing this check in a loop would leak memory). Also, interpreter should not reach safepoints without going to runtime, throw exceptions etc.

Another thing to note is that the overhead of calling a runtime entry from the interpreter is not higher compared to calling a runtime entry from the compiled / optimized code (assuming they are called under the same circumstances) - it could be even lower as we don't need to save all registers. So, in most cases, if a runtime entry created for compiled code works for the interpreter, then it is worth reusing it.

Line 3719, Patchset 6 (Latest): NoSafepointScope no_safepoint;
Alexander Markov . unresolved

This doesn't look correct as it covers `INVOKE_RUNTIME` below which would reach a safepoint.

Line 3720, Patchset 6 (Latest): CheckTriviallyImmutableResult result;
Alexander Markov . unresolved

Instance within `CheckTriviallyImmutableResult` is not going to be seen by GC when calling runtime entry `DRT_ThrowTriviallyImmutableViolationError` below.

Open in Gerrit

Related details

Attention is currently required from:
  • Alexander Aprelev
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement satisfiedCommit-Message-Has-TEST
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: I27416773fd77077018739ea4dbcc6e4695e67be8
Gerrit-Change-Number: 469103
Gerrit-PatchSet: 6
Gerrit-Owner: Alexander Aprelev <a...@google.com>
Gerrit-Reviewer: Alexander Aprelev <a...@google.com>
Gerrit-Reviewer: Alexander Markov <alexm...@google.com>
Gerrit-CC: Slava Egorov <veg...@google.com>
Gerrit-Attention: Alexander Aprelev <a...@google.com>
Gerrit-Comment-Date: Fri, 19 Dec 2025 19:11:27 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Alexander Aprelev <a...@google.com>
Comment-In-Reply-To: Alexander Markov <alexm...@google.com>
satisfied_requirement
unsatisfied_requirement
open
diffy

Alexander Aprelev (Gerrit)

unread,
Dec 19, 2025, 3:41:51 PM (2 days ago) Dec 19
to Alexander Aprelev, Alexander Markov, Slava Egorov, Commit Queue, dart-vm-compil...@google.com, rev...@dartlang.org, vm-...@dartlang.org
Attention needed from Alexander Markov

Alexander Aprelev voted and added 4 comments

Votes added by Alexander Aprelev

Commit-Queue+1

4 comments

File runtime/vm/ffi_callback_metadata.h
Line 40, Patchset 3: ObjectPtr offendingValue_;
Alexander Markov . resolved

How can we make sure raw pointer is not cached across a safepoint?

Alexander Aprelev

That's the purpose of this class is - to hold values while we can't allocate during running the interpreter.

Alexander Markov

We need to either verify/assert that safepoint doesn't happen or use handles. I added another comment which points to the place where this object holds a raw pointer across safepoint.

Alexander Aprelev

Done

File runtime/vm/interpreter.cc
Line 3719, Patchset 3: FfiCallbackMetadata::CheckIfTriviallyImmutable(thread->zone(), value,
Alexander Markov . resolved

Similarly to compiled code, we should guard this code with `FLAG_experimental_shared_data` and do all fast-path checks (e.g. test ImmutableBit and ClosureCid) before calling into a slower check which may create handles or throw an exception. Also, we should do a proper runtime call via `INVOKE_RUNTIME`. The same runtime entry can be used both for compiled code and the interpreter.

Alexander Aprelev

What are the reasons to do the checks in the runtime rather than call this CheckIfTriviallyImmutable? That function is reused between the compiled code and interpreter.
Going to runtime seems to be slower, less efficient.

Alexander Markov

The interpreter implementation directly works with raw pointers and quite restrictive wrt what it can call/use. For example, interpreter should not allocate / leak handles and `CheckIfTriviallyImmutable` currently allocates them (so executing this check in a loop would leak memory). Also, interpreter should not reach safepoints without going to runtime, throw exceptions etc.

Another thing to note is that the overhead of calling a runtime entry from the interpreter is not higher compared to calling a runtime entry from the compiled / optimized code (assuming they are called under the same circumstances) - it could be even lower as we don't need to save all registers. So, in most cases, if a runtime entry created for compiled code works for the interpreter, then it is worth reusing it.

Alexander Aprelev

Done

Line 3719, Patchset 6: NoSafepointScope no_safepoint;
Alexander Markov . resolved

This doesn't look correct as it covers `INVOKE_RUNTIME` below which would reach a safepoint.

Alexander Aprelev

Done

Line 3720, Patchset 6: CheckTriviallyImmutableResult result;
Alexander Markov . resolved

Instance within `CheckTriviallyImmutableResult` is not going to be seen by GC when calling runtime entry `DRT_ThrowTriviallyImmutableViolationError` below.

Alexander Aprelev

Done

Open in Gerrit

Related details

Attention is currently required from:
  • Alexander Markov
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement satisfiedCommit-Message-Has-TEST
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: I27416773fd77077018739ea4dbcc6e4695e67be8
Gerrit-Change-Number: 469103
Gerrit-PatchSet: 7
Gerrit-Owner: Alexander Aprelev <a...@google.com>
Gerrit-Reviewer: Alexander Aprelev <a...@google.com>
Gerrit-Reviewer: Alexander Markov <alexm...@google.com>
Gerrit-CC: Slava Egorov <veg...@google.com>
Gerrit-Attention: Alexander Markov <alexm...@google.com>
Gerrit-Comment-Date: Fri, 19 Dec 2025 20:41:48 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
satisfied_requirement
unsatisfied_requirement
open
diffy

Alexander Markov (Gerrit)

unread,
Dec 19, 2025, 4:26:24 PM (2 days ago) Dec 19
to Alexander Aprelev, Alexander Markov, Slava Egorov, Commit Queue, dart-vm-compil...@google.com, rev...@dartlang.org, vm-...@dartlang.org
Attention needed from Alexander Aprelev

Alexander Markov voted and added 3 comments

Votes added by Alexander Markov

Code-Review+1

3 comments

Patchset-level comments
File-level comment, Patchset 7 (Latest):
Alexander Markov . resolved

Lgtm, assuming the rest of the comments are addressed.

File runtime/vm/ffi_callback_metadata.h
Line 369, Patchset 3: ObjectPtr object_ptr,
Alexander Markov . unresolved

Consider passing a handle instead of raw object pointer as handle is created anyway. Passing a raw object pointer is unsafe, so we need to ensure that safepoints are not happening for the whole duration of the function call (e.g. caller needs to use `NoSafepointScope`).

(also for other functions)

Alexander Aprelev

The use in interpreter.cc is such that it requires no safepoints, so it seems reasonable to have this highlighted via explicit ObjectPtr passing..

Alexander Markov

Are there still any reasons to pass raw object pointers?

File runtime/vm/interpreter.cc
Line 3722, Patchset 7 (Latest): (value->untag()->IsImmutable() && value->IsClosure())))) {
Alexander Markov . unresolved

Nit: it is superfluous to check IsImmutable once again

Open in Gerrit

Related details

Attention is currently required from:
  • Alexander Aprelev
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement satisfiedCode-Review
  • requirement satisfiedCommit-Message-Has-TEST
  • requirement satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: I27416773fd77077018739ea4dbcc6e4695e67be8
Gerrit-Change-Number: 469103
Gerrit-PatchSet: 7
Gerrit-Owner: Alexander Aprelev <a...@google.com>
Gerrit-Reviewer: Alexander Aprelev <a...@google.com>
Gerrit-Reviewer: Alexander Markov <alexm...@google.com>
Gerrit-CC: Slava Egorov <veg...@google.com>
Gerrit-Attention: Alexander Aprelev <a...@google.com>
Gerrit-Comment-Date: Fri, 19 Dec 2025 21:26:22 +0000
satisfied_requirement
open
diffy

Alexander Aprelev (Gerrit)

unread,
1:44 AM (15 hours ago) 1:44 AM
to Alexander Aprelev, Alexander Markov, Slava Egorov, Commit Queue, dart-vm-compil...@google.com, rev...@dartlang.org, vm-...@dartlang.org

Alexander Aprelev voted and added 6 comments

Votes added by Alexander Aprelev

Commit-Queue+1

6 comments

Patchset-level comments
File-level comment, Patchset 8 (Latest):
Alexander Aprelev . resolved

thanks Alex!

File runtime/vm/ffi_callback_metadata.h
Line 369, Patchset 3: ObjectPtr object_ptr,
Alexander Markov . resolved

Consider passing a handle instead of raw object pointer as handle is created anyway. Passing a raw object pointer is unsafe, so we need to ensure that safepoints are not happening for the whole duration of the function call (e.g. caller needs to use `NoSafepointScope`).

(also for other functions)

Alexander Aprelev

The use in interpreter.cc is such that it requires no safepoints, so it seems reasonable to have this highlighted via explicit ObjectPtr passing..

Alexander Markov

Are there still any reasons to pass raw object pointers?

Alexander Aprelev

Done

File runtime/vm/ffi_callback_metadata.cc
Line 387, Patchset 3: auto& object = Object::Handle(zone, object_ptr);
Alexander Markov . resolved

Creating a handle for each tested object seems expensive. Consider rewriting this checking as a helper class with a few cached and reused handles.

Alexander Aprelev

Done

Line 412, Patchset 3: CheckIfTriviallyImmutableHelper(zone, context.At(i), visited, result);
Alexander Markov . resolved

Consider using a worklist instead of recursion to avoid stack overflows in case of deep chains of closures. This would also make it easier to reuse handles.

Alexander Aprelev

Done

Line 435, Patchset 3:}
Alexander Markov . resolved

Consider adding a separate `IsShareable` bit which we can set on closures to avoid repeated checking. Or maybe `IsImmutable` should be split to `IsDeeplyImmutable` and `IsShallowImmutable`, then we can set `IsShallowImmutable` on closures when they are created and `IsDeeplyImmutable` after they are checked.

Alexander Aprelev

Will address this in follow-up cl.

File runtime/vm/interpreter.cc
Line 3722, Patchset 7: (value->untag()->IsImmutable() && value->IsClosure())))) {
Alexander Markov . resolved

Nit: it is superfluous to check IsImmutable once again

Alexander Aprelev

Done

Open in Gerrit

Related details

Attention set is empty
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement satisfiedCode-Review
  • requirement satisfiedCommit-Message-Has-TEST
  • requirement satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: I27416773fd77077018739ea4dbcc6e4695e67be8
Gerrit-Change-Number: 469103
Gerrit-PatchSet: 8
Gerrit-Owner: Alexander Aprelev <a...@google.com>
Gerrit-Reviewer: Alexander Aprelev <a...@google.com>
Gerrit-Reviewer: Alexander Markov <alexm...@google.com>
Gerrit-CC: Slava Egorov <veg...@google.com>
Gerrit-Comment-Date: Sun, 21 Dec 2025 06:44:33 +0000
satisfied_requirement
open
diffy
Reply all
Reply to author
Forward
0 new messages