Find a file
Martin Kustermann 3669086a40 [vm] Fix field index information in heap snapshots in AOT
In AOT we can have unboxed fields that will not be visited by GC
visitors and as such are also not reported as <obj>.references when
producing heap snapshots.

Though the heapsnapshot's <class>.fields will contain entries
for unboxed fields, which causes the fields index calculation to be
incorrect.

This can cause various confusing things, e.g. incorrectly caluclated
retaining paths, since the <class>.fields.index doesn't match the
index in <obj>.references.

To fix this this CL will change the visiting code to emit dummy
references for unboxed fields.

The written test uncovered a few other issues:

  - report type_arguments and native_fields in <class>.fields
    => the visitors already visit those fields

  - fix `Class::next_{host,target}_field_offset` for classes
    with native fields
    => this will also shrink size of `NativeWrapperClass` subclasses

  - ensure classes with vm-defined layout are finalized
    => we assume objects should only exist in heap if their class
       is finalized

  - fix `FfiNativeFunction` type_argument offset

  - fixes for object fields list
    => add missing entries, fix existing entries

Fixes https://github.com/dart-lang/sdk/issues/49711

TEST=vm/dart{,_2}/heap_snapshot_regress_49711_test

Change-Id: I8e25680b2c0c8c49caafbb8da57b0b6419e89c4f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/255814
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2022-08-23 05:17:49 +00:00
.dart_tool [infra] re-land work to auto-generate .dart_tool/package_config.json 2022-04-12 17:21:02 +00:00
.github Enable general issue template 2022-08-19 17:45:10 +00:00
benchmarks Fix typo 2022-08-04 09:22:39 +00:00
build Update clang and gn to match Fuchsia. 2022-08-19 06:21:44 +00:00
docs Add a link to the announce group 2022-07-21 09:45:06 +00:00
pkg Migration: make warnOnWeakCode flag non-nullable. 2022-08-23 00:55:50 +00:00
runtime [vm] Fix field index information in heap snapshots in AOT 2022-08-23 05:17:49 +00:00
samples Fixed various typos in a lot of files 2022-07-25 12:21:59 +00:00
samples-dev Apply dart fix to swarm sample 2022-08-01 15:57:53 +00:00
sdk [dart2wasm] Implement dynamic naively. 2022-08-22 21:33:29 +00:00
tests [dart2wasm] Align semantics of jsify / dartify. 2022-08-22 19:54:29 +00:00
third_party [standalone] Update tcmalloc to 2.10. 2022-07-06 17:34:20 +00:00
tools Eliminate dynamic calls to remove and tagName. 2022-08-22 17:27:39 +00:00
utils [ddc] Include shared library for new runtime types 2022-05-25 18:23:29 +00:00
.clang-format
.gitattributes
.gitconfig
.gitignore Remove the ignore for the top level .packages file. 2022-07-01 18:03:41 +00:00
.gn
.mailmap Fixed various typos in a lot of files 2022-07-25 12:21:59 +00:00
.style.yapf
.vpython
AUTHORS [vm] Support RISC-V. 2022-01-20 00:57:57 +00:00
BUILD.gn [deps] remove the dep on package:charcode 2022-06-08 19:49:22 +00:00
CHANGELOG.md Flag additional code as unreachable due to types Null and Never. 2022-08-22 16:50:19 +00:00
codereview.settings
CONTRIBUTING.md Add more details to contributing docs 2022-03-16 07:56:58 +00:00
DEPS Roll Dart Protobuf Support from 9cf05f6e9f53 to 8337a7910fef (2 revisions) 2022-08-22 20:55:49 +00:00
LICENSE
OWNERS [infra] Give VM engineers OWNERS over tools/gn.py et al. 2022-04-25 17:47:23 +00:00
PATENT_GRANT
PRESUBMIT.py [infra] re-land work to auto-generate .dart_tool/package_config.json 2022-04-12 17:21:02 +00:00
README.dart-sdk Remove dartanalyzer from built SDK. 2022-07-01 17:43:20 +00:00
README.md master => main 2021-09-10 08:02:49 +00:00
sdk_args.gni Fix typos 2022-06-15 11:08:28 +00:00
SECURITY.md Add link to published advisories 2022-02-08 19:45:07 +00:00
WATCHLISTS [dart2js] More shared_messages.dart cleanup 2021-09-22 19:20:54 +00:00

Dart

A client-optimized language for fast apps on any platform

Dart is:

  • Optimized for UI: Develop with a programming language specialized around the needs of user interface creation.

  • Productive: Make changes iteratively: use hot reload to see the result instantly in your running app.

  • Fast on all platforms: Compile to ARM & x64 machine code for mobile, desktop, and backend. Or compile to JavaScript for the web.

Dart's flexible compiler technology lets you run Dart code in different ways, depending on your target platform and goals:

  • Dart Native: For programs targeting devices (mobile, desktop, server, and more), Dart Native includes both a Dart VM with JIT (just-in-time) compilation and an AOT (ahead-of-time) compiler for producing machine code.

  • Dart Web: For programs targeting the web, Dart Web includes both a development time compiler (dartdevc) and a production time compiler (dart2js).

Dart platforms illustration

License & patents

Dart is free and open source.

See LICENSE and PATENT_GRANT.

Using Dart

Visit dart.dev to learn more about the language, tools, and to find codelabs.

Browse pub.dev for more packages and libraries contributed by the community and the Dart team.

Our API reference documentation is published at api.dart.dev, based on the stable release. (We also publish docs from our beta and dev channels, as well as from the primary development branch).

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.