mirror of
https://github.com/dart-lang/sdk
synced 2024-11-02 09:43:08 +00:00
1827fcbf68
Previously, CanBeImmediateIndex calculated the scaling factor for the index using Instance::ElementSizeFor. However, the LoadIndexed and StoreIndexed instructions which use this function have an index_scale_ field that is not necessarily the same as the element size for the class id. This means the displacement calculated within CanBeImmediateIndex can differ from the actual displacement calculated within ElementAddressForIntIndex, causing the bug seen by the fuzzer. This CL moves the check in CanBeImmediateIndex to a new static method Assembler::AddressCanHoldConstantIndex. In addition to the original arguments to CanBeImmediateIndex, the new static method takes an index_scale argument, so the field value can be passed appropriately. It also adds an is_external argument on X64 and IA32 to match the other architectures, since assuming a non-external typed data object could cause a register to be used in cases where it isn't necessary. TEST=vm/dart/regress_54486 Fixes: https://github.com/dart-lang/sdk/issues/54486 Change-Id: Ia553fb7da0500113b35f8d9af91a52df55437a3c Cq-Include-Trybots: luci.dart.try:vm-aot-linux-debug-x64-try,vm-linux-debug-ia32-try,vm-aot-linux-debug-simarm_x64-try,vm-aot-linux-debug-simriscv64-try,vm-aot-mac-release-arm64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/345002 Reviewed-by: Daco Harkes <dacoharkes@google.com> |
||
---|---|---|
.. | ||
concurrency | ||
vm |