dart-sdk/pkg/vm
Alexander Markov da4ff4e9a6 [vm/aot] Fix handling of annotations in tree shaker
Previously, annotations were not traced by global type flow analysis
(in order to avoid retaining classes which are only used in
annotations). Annotations were only traced during tree shaking
and references from such constants were treated much like
references from types. This handling of constants in annotations
conflicts with removal of fields, as tree shaker needs to know
which fields are retained upfront to be independent of the visiting
order. In a certain corner case (field was replaced with a getter
but was still used in a constant in annotation) that caused incorrect
AST and crash during serialization of AST.

In order to fix that, this change adds proper tracing through
annotations on members, classes and libraries, as if annotation
constants were used in the executable code. That also means
that annotation classes will be retained as allocated.
In order to compensate for that, a new pass is added before the global
analysis to clean all annotations except @ExternalName, @pragma
(used by the VM) and @TagNumber (used by protobuf tree shaking).

TEST=runtime/tests/vm/dart/regress_45968_test.dart
Fixes https://github.com/dart-lang/sdk/issues/45968

Change-Id: I998e4f7ec7da7b74e1738fc21b354a4ec9f0c071
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/199200
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2021-05-11 18:25:24 +00:00
..
bin [cfe] Actually have both ansi and plain text formatted messages (2nd try) 2021-02-26 13:06:17 +00:00
lib [vm/aot] Fix handling of annotations in tree shaker 2021-05-11 18:25:24 +00:00
test [kernel] Make FileUriNode.fileUri non-nullable 2021-04-19 08:03:30 +00:00
testcases/transformations [vm/aot] Fix handling of annotations in tree shaker 2021-05-11 18:25:24 +00:00
tool [vm] Remove old version of protobuf-aware tree shaker 2021-01-15 00:54:48 +00:00
analysis_options.yaml
LICENSE Update LICENSE 2021-04-07 10:28:38 +00:00
pubspec.yaml
README.md

This package hosts VM specific Dart code and helper scripts.