mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 12:48:10 +00:00
3f6c87d5ac
Given IL like this: t3 <- Constant(#null) <--\ // ... do something ... | StoreLocal(:temp, t4) ---/ // Do something else StoreIndexed(t1, t2, t3) Graph builder would use Constant(#null) as an input definition for StoreIndexed - which leads to wrong generated code in unoptimized mode on X64 where StoreIndexed has specialization for constant values. In optimized code SSA renaming would actually replace t3 with a correct reaching definition. This CL introduces a new IL instruction MakeTemp(...) which has exactly the same effect as Constant(#null) on the expression stack, but is not treated as a constant value by the backend. The bug was unnoticed because of the loose assertions in the SSA renaming which permitted replacing Constant-s with non-Constant reaching definitions. This CL also tightens those assertions to catch this issue. Also cleanup the code in SSA renaming a bit to make it a bit easier to understand. Fixes https://github.com/dart-lang/sdk/issues/33195 Bug: 33195 Change-Id: I7c914c836d4af7a50e8a8e1a02d03e9413f87779 Reviewed-on: https://dart-review.googlesource.com/56112 Commit-Queue: Vyacheslav Egorov <vegorov@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> |
||
---|---|---|
.github | ||
build | ||
client | ||
docs | ||
pkg | ||
runtime | ||
samples | ||
samples-dev | ||
sdk | ||
tests | ||
third_party | ||
tools | ||
utils | ||
.clang-format | ||
.gitattributes | ||
.gitignore | ||
.gn | ||
.mailmap | ||
.packages | ||
AUTHORS | ||
BUILD.gn | ||
CHANGELOG.md | ||
codereview.settings | ||
dartdoc_options.yaml | ||
DEPS | ||
LICENSE | ||
PATENTS | ||
PRESUBMIT.py | ||
README.dart-sdk | ||
README.md | ||
WATCHLISTS |
Dart
Dart is an open-source, scalable programming language, with robust libraries and runtimes, for building web, server, and mobile apps.
Using Dart
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.
Building Dart
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.
Contributing to Dart
The easiest way to contribute to Dart is to file issues.
You can also contribute patches, as described in Contributing.