719c0a91dc
This field is now only used when reloading to check assignability during `ProgramReloadContext::ReloadPhase4CommitFinish()` (via `PostCommit()` -> `InvalidateWorld()` -> `InvalidateFields`). However, the method `DeoptimizeDependentCode()` is called near the start of the actual reloading process in `Reload` prior to the commit/rollback phases. This calls `DeoptimizeTypeTestingStubs()`, which walks the heap and resets the contents of all `SubtypeTestCaches` (`STC`s). That means that the `STC` information isn't actually kept between different reloads, so all this does is cause a number of `STC` objects to be allocated during reload whose backing arrays are not used post-reload for anything and so are unnecessary garbage. That, and the creation of the `STC`s during `InvalidateFields` creates all-input `STC`s, as they don't just check assignability to a given field type but also for checking elements of `RecordTypes`. That means the per-field `STC`s contain way more information needed to check for valid assignments to the corresponding field type, even if the `STC` was used between reloads. This CL removes the unnecessary field and changes `InvalidateFields` so that the `STC`s used during reload are instead lazily allocated once per `FieldInvalidator` object and now both the `STC` and its backing array are now garbage post-field invalidation. TEST=reload ci Change-Id: I3ffa199551ba69f0afd4eba6303c6ff73d7473a3 Cq-Include-Trybots: luci.dart.try:vm-reload-linux-debug-x64-try,vm-reload-linux-release-x64-try,vm-reload-rollback-linux-debug-x64-try,vm-reload-rollback-linux-release-x64-try,vm-aot-linux-debug-x64-try,vm-aot-linux-product-x64-try,vm-aot-linux-release-x64-try,vm-linux-release-x64-try,vm-linux-debug-x64-try,vm-aot-dwarf-linux-product-x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/311220 Commit-Queue: Tess Strickland <sstrickl@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com>