[vm/compiler] Prevent incorrect caching of mutable CompileType objects as reaching types. In general we would like to keep previous results of type propagation passes, however this leads to situations where CompileType objects owned by definitions are cached as reaching types at uses that are no longer directly connected to the definition itself. This leads to situations when type propagator updates the type of the definition in place via Definition::UpdateType, but does not enqueue an instruction which uses this type which leads to incorrect fix-point computation. As a fix we make the fact that some CompileType objects are owned by definitions explicit by assigning [CompileType::owner_] field. Whenever we encounter situation that reaching type's owner does not match current definition flowing into use we clone compile type to disconnect it from original owner and prevent hidden mutation. This CL also fixes two minor issues: - incorrect computation of non-nullable type from a nullable CompileType with a cid; - assings CompileType to LoadIndexedUnsafe instructions emitted by prologue builder; Fixes https://github.com/dart-lang/sdk/issues/36156 Bug: 36156 Change-Id: I6536cfe1fda033cba3524336bfbdb871b88a8b3f Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-android-release-arm-try, vm-kernel-precomp-bare-linux-release-simarm-try, vm-kernel-precomp-bare-linux-release-simarm64-try, vm-kernel-precomp-bare-linux-release-x64-try, vm-kernel-precomp-linux-debug-x64-try, vm-kernel-precomp-linux-product-x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98358 Commit-Queue: Vyacheslav Egorov <vegorov@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com>
Dart is an open-source, scalable programming language, with robust libraries and runtimes, for building web, server, and mobile apps.
Visit the dartlang.org to learn more about the language, tools, getting started, and more.
Browse pub.dartlang.org for more packages and libraries contributed by the community and the Dart team.
If you want to build Dart yourself, here is a guide to getting the source, preparing your machine to build the SDK, and building.
There are more documents on our wiki.
The easiest way to contribute to Dart is to file issues.
You can also contribute patches, as described in Contributing.