commit | a62e9248596e54984d813ef16792fc8f9e359d42 | [log] [tgz] |
---|---|---|
author | Vyacheslav Egorov <vegorov@google.com> | Mon Jan 07 16:25:02 2019 +0000 |
committer | commit-bot@chromium.org <commit-bot@chromium.org> | Mon Jan 07 16:25:02 2019 +0000 |
tree | 3f5159f03c4898ebd70b4ef0bb5adde07efd9bad | |
parent | f41ecbe01e51da1c1770d4cc361584a44cf2fb3c [diff] |
[vm/compiler] Ensure that field is added to guarded fields when Slot::Get uses its guarded properties. There might be a race between background compiler and mutator where mutator changes guarded state of the field after Slot was created from it. A situation is possible where we have a clone of a field with its guarded state set to unknown, however Slot::Get for this field returns a Slot created from the previous clone of the same field with a known guarded state. In this case we must add *old* clone from which the Slot was created to guarded fields and not the new clone, because new clone has no guarded state to begin with and thus ParsedFunction::AddToGuardedFields(...) would simply ignore it. Such slots with inconsistent guarded state that are not in the current list of guarded fields arise due to unsuccessful inlining attempts. If we built and discard the graph, then guarded fields associated with that graph are also discarded. However the slot itself stays behind in the compilation global cache. TEST=vm/cc/SlotFromGuardedField Bug: b/121271056 Change-Id: Ib6ee5ec4922c033c3a71bdc46da74ead47b1edd0 Reviewed-on: https://dart-review.googlesource.com/c/88575 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.