Commit Graph

18413 Commits

Author SHA1 Message Date
Ryan Macnak 407ca1be87 [vm, api] Add Dart_UpdateExternalSize to the embedding API.
Allows an embedder (or native extension) to inform the VM when external memory is released before a weak handle is finalized.

Bug: https://github.com/dart-lang/sdk/issues/42078
Change-Id: Ifffd0c160e5305bc6e6752207a2315139f245e2f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149245
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-06-02 21:29:03 +00:00
Alexander Markov 50f1f1459e [vm/nnbd] Support NNBD weak mode in vm/cc tests
Change-Id: Ia49c64bf8461b8acf019c398635e27b11fe6d25e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149666
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2020-06-02 20:40:03 +00:00
Zichang Guo 4489805956 Revert "[dart:io] Fixes the FileIO performance regression"
This reverts commit ba25fd190e.

Reason for revert: It broke dart2js. https://logs.chromium.org/logs/dart/buildbucket/cr-buildbucket.appspot.com/8878578963299042720/+/steps/build_dart/0/stdout?format=raw.
Unimplemented handling of missing static target.

Original change's description:
> [dart:io] Fixes the FileIO performance regression
> 
> Previous CL (https://dart-review.googlesource.com/c/sdk/+/139881) causes
> performance regression.
> 
> Improves:
> FileIO_readwrite_512kb: 196.5%, 224.1%
> FileIO_readwrite_verify_512kb: 38.28% 46.71%
> 
> 
> Change-Id: I5fb7752f14a2b39238e82bf45b059fe145b9087f
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148563
> Commit-Queue: Zichang Guo <zichangguo@google.com>
> Reviewed-by: Martin Kustermann <kustermann@google.com>
> Reviewed-by: Jonas Termansen <sortie@google.com>

TBR=sortie@google.com,kustermann@google.com,zichangguo@google.com

Change-Id: I170eeed56484f2ece3c3b7f1b93f54edf5ae2736
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149743
Reviewed-by: Zichang Guo <zichangguo@google.com>
Commit-Queue: Zichang Guo <zichangguo@google.com>
2020-06-02 19:14:05 +00:00
Zichang Guo ba25fd190e [dart:io] Fixes the FileIO performance regression
Previous CL (https://dart-review.googlesource.com/c/sdk/+/139881) causes
performance regression.

Improves:
FileIO_readwrite_512kb: 196.5%, 224.1%
FileIO_readwrite_verify_512kb: 38.28% 46.71%


Change-Id: I5fb7752f14a2b39238e82bf45b059fe145b9087f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148563
Commit-Queue: Zichang Guo <zichangguo@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Jonas Termansen <sortie@google.com>
2020-06-02 17:47:05 +00:00
Martin Kustermann 3d53df52af Revert "[vm] Call OSThread::Cleanup() during VM shutdown (as with all other Init/Cleanup functions)"
See b/157883819: Custom embedder doesn't correctly join threads that
interacted with Dart API, which causes us to hit the newly added
RELEASE_ASSERT.

This reverts commit ea4b17533c.

Change-Id: I9fec45196646f67ae46efccc2f83a43e8941a626
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149592
Reviewed-by: David Morgan <davidmorgan@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2020-06-02 13:25:01 +00:00
Alexander Aprelev d315f906de Revert "[vm, service, observatory] Bang Bang (My Type System Shot Me Down)."
This reverts commit d806959461.

Reason for revert: multiple failures on service and other tests on various buildbots

Original change's description:
> [vm, service, observatory] Bang Bang (My Type System Shot Me Down).
> 
> Port the service tests and Observatory to Dart 3.
> 
> Change-Id: Ia43b169a110e5209a9770aeda1b9a4007427f064
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/143381
> Commit-Queue: Ryan Macnak <rmacnak@google.com>
> Reviewed-by: Ben Konyi <bkonyi@google.com>

TBR=bkonyi@google.com,rmacnak@google.com

Change-Id: Id22f40dafa8c0fc3fb8c3052321629a48cb7dbc3
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149684
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Alexander Aprelev <aam@google.com>
2020-06-02 03:03:57 +00:00
Ryan Macnak d806959461 [vm, service, observatory] Bang Bang (My Type System Shot Me Down).
Port the service tests and Observatory to Dart 3.

Change-Id: Ia43b169a110e5209a9770aeda1b9a4007427f064
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/143381
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Ben Konyi <bkonyi@google.com>
2020-06-02 01:20:08 +00:00
Alexander Aprelev 13ea0b3e9f [vm/deterministic] When sorting CallTargets by frequency, sort by id in case of ties.
This addresses an issue that AOT snapshot, disassembly and flowgraph are different when generated on Windows vs Linux.
Difference is caused by different order of targets in CallTargets, caused by the fact that qsort doesn't have to preserve the order of equal elements in the original list.
While qsort on Linux preserves original (by id) order, on Windows it does not.

See https://github.com/flutter/flutter/issues/44425 for context.

Change-Id: I74c17fd83e5ae21f9733712a87de8f55a1ba94fd
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149496
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Aprelev <aam@google.com>
2020-06-01 23:55:08 +00:00
Alexander Aprelev 164948ab0a [vm/aot] Fix aot cross-compilation scenario when gen_snapshot runs on Windows targets android x64.
At present calling convention code is guarded by _WIN64 macro, which indicates that compiler is running on Windows, doesn't take into account target os. This causes problems when one attempts to generate aot snapshot for Android os.

Fixes https://github.com/flutter/flutter/issues/44425.

Change-Id: I8b21d9e9c357071f29632826dd7bbedc19be00a2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149497
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Aprelev <aam@google.com>
2020-06-01 23:21:38 +00:00
Ben Konyi bac15a80ce [ VM / DartDev ] Add special flags '--enable-analytics' and '--disable-analytics' which are treated as VM options but always forwarded to DartDev
Change-Id: Ief9d03f49176c9eacbf5fc953be9bc99e53aa21b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149662
Reviewed-by: Jaime Wren <jwren@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2020-06-01 23:10:18 +00:00
Alexander Markov 1618fd965b [vm/compiler] Optimize lazy field initialization
Load*Field and Init*Field IL instructions are fused into load
instructions with 'calls_initializer' flag.

A new, more powerful elimination of lazy initializer calls uses
data flow analysis and load forwarding (place numbering).

In addition to improved elimination of initializer calls,
fusing instructions avoids extra load after field is already
loaded for lazy initialization check.

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

Change-Id: Ibb2a63f84b9b0c970db67b3d6684ec15384a64e7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148283
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-06-01 21:28:18 +00:00
Alexander Markov dd6dc29c21 [vm/nnbd] Prepare to migrate runtime/tests/vm/dart to NNBD
This change mechanically copies

  runtime/tests/vm/dart -> runtime/tests/vm/dart_2

in preparation for the migration of runtime/tests/vm/dart to NNBD.

Corresponding statuses in vm.status are duplicated.

Added vm_nnbd builder tag for NNBD bots.
vm/dart/* tests are allowed to run only on vm_nnbd builders.
vm/dart_2/* tests are allowed to run only on non-vm_nnbd builders.

Issue: https://github.com/dart-lang/sdk/issues/41314

Change-Id: I079da92da17960605f37c1c0e28e48362b236739
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149485
Reviewed-by: Régis Crelier <regis@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2020-06-01 17:57:27 +00:00
William Hesse d3959945f7 Skip unicode surrogate test on android
This test crashes the android test runner, and should be fixed
when issue https://github.com/dart-lang/sdk/issues/42094 is rolled
to the checked-in SDK.

BUG=https://github.com/dart-lang/sdk/issues/42094

Change-Id: I91e5ea5358b08d3776ae485b90aff7cd01d02322
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149580
Reviewed-by: William Hesse <whesse@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-05-30 23:29:02 +00:00
Ryan Macnak cd55d62ac1 [vm] Change THR_Print to filter based on isolate group.
Parts of the GC now run without a current isolate, so THR_Prints there were all silenced.

Change-Id: Icd4be68eca8a2edfa43b4f140f69babd798f17af
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149371
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
2020-05-30 01:06:44 +00:00
Ben Konyi 8ff37f07dc [ VM ] Fix asserts in ARM64 simulator
https://dart-review.googlesource.com/c/sdk/+/148539 hoisted an assert
out of a conditional block and started causing failures for DebugSIMARM64
fuzzing runs as `stxr` does not have `Rs = 31`.

Change-Id: Ibbcc1ba105567ca1142843261756b8ee6a8e119f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149483
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2020-05-29 21:54:04 +00:00
Ryan Macnak 3451c348db [vm, gc] Prevent a program dominated by direct old-space allocations from avoiding scavenges for too long.
Bug: https://github.com/flutter/flutter/issues/48360
Change-Id: I75263809aed45879ff513e60280ea3f28b61b1c8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149480
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-05-29 21:40:57 +00:00
asiva 02bfe67840 [VM/Runtime] - Remove Dart_CompileSourcesToKernel from the Dart C API
Remove Dart_CompileSourcesToKernel from the Dart C API as it is not used
anywhere except in unit tests (unit_test.cc)

Change-Id: I314dafbe4cddbe20a81890505bc07c8bf2100eaa
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149380
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
2020-05-29 18:43:54 +00:00
Filip Filmar cf30ff2953 Replaces fuchsia.deprecatedtimezone
The FIDL library fuchsia.deprecatedtimezone is going away.  There are
different and better ways to obtain the same functionality.  This change
removes the dependency on fuchsia.deprecatedtimezone from the Dart SDK.

Adds inspect metrics that allow whitebox testing of the runners.  Here's
a sample `fx iquery` excerpt from a running device, showing both a dart
and a flutter runner exposing the same OS diagnostic metrics.

```
/hub/c/dart_jit_runner.cmx/70981/out/diagnostics:
  /hub/c/dart_jit_runner.cmx/70981/out/diagnostics#os:
    dst_status = 0
    get_profile_status = 0
    timezone_content_status = 0
    tz_data_close_status = 0
    tz_data_status = 0
/hub/c/flutter_jit_runner.cmx/29567/out/diagnostics:
  /hub/c/flutter_jit_runner.cmx/29567/out/diagnostics#os:
    dst_status = 0
    get_profile_status = 0
    timezone_content_status = 0
    tz_data_close_status = 0
    tz_data_status = 0
```

Under nominal operation, all of the above values should be equal to 0.
Nonzero values indicate an error.

This functionality is guarded by Fuchsia integration tests at
//src/tests/intl.

Tested:
  (compile locally for Fuchsia and deploy)
  fx test //src/tests/intl

Fixes #39650

Change-Id: I5fc3ed305301abe1b183948a7cf478e014f351e7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149206
Commit-Queue: Filip Filmar <fmil@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-05-29 18:36:58 +00:00
Alexander Markov f57c99fc31 [vm/compiler] Fix crash in inliner when receiver is dead
Fixes https://github.com/dart-lang/sdk/issues/42065

Change-Id: Ib66163a41a13f02cfa9df9bcb1cf505e934fea93
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149370
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2020-05-29 16:34:45 +00:00
Aske Simon Christensen bbf34035dd Revert "[vm] Check prefix.loadLibrary is called and returns before prefix members are used."
This reverts commit f049a410e5.

Reason for revert: Broke reload bots.

Original change's description:
> [vm] Check prefix.loadLibrary is called and returns before prefix members are used.
> 
> Not loading is actually deferred.
> 
> Bug: https://github.com/dart-lang/sdk/issues/41974
> Change-Id: I62688007bd36dbcb2e8ffb4a1fd2dceb1775b1c8
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149053
> Commit-Queue: Ryan Macnak <rmacnak@google.com>
> Reviewed-by: Siva Annamalai <asiva@google.com>

TBR=rmacnak@google.com,alexmarkov@google.com,asiva@google.com

Change-Id: I923e339465fdf13199efc11a9cef4a842abebd67
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: https://github.com/dart-lang/sdk/issues/41974
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149423
Reviewed-by: Aske Simon Christensen <askesc@google.com>
Commit-Queue: Aske Simon Christensen <askesc@google.com>
2020-05-29 09:04:02 +00:00
Martin Kustermann ea4b17533c [vm] Call OSThread::Cleanup() during VM shutdown (as with all other Init/Cleanup functions)
Change-Id: I3cfa51714247a62fe39951636ca1a75c34f6c95b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149293
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2020-05-29 08:02:59 +00:00
Tess Strickland f89d930e38 [vm/aot] Separate out stream methods from the Elf class.
Introduce an internal StreamingWriteStream wrapper and use that instead.

Also add more ELF-defined constants and use those appropriately.

Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-simarm_x64-try,vm-kernel-precomp-linux-product-x64-try
Change-Id: I2bd34ebac60e789aea82c8f064c59351e2c55dd3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149291
Reviewed-by: Clement Skau <cskau@google.com>
Commit-Queue: Tess Strickland <sstrickl@google.com>
2020-05-29 07:47:08 +00:00
Martin Kustermann a2b5373eaa [vm/concurrency] Avoid stopping mutators when updating subtype test cache
To avoid stopping all mutators when updating subtype test caches, we
ensure that any updates to the subtype test cache will be visible in a
consistent way to mutators by adding a store-release barrier when
updating the backing array of the STC.

Since STCs are always grown by allocating a new array with size+1, there
is no need to actually add barriers when accessing the individual
entries of the backing store.

To prevent multiple writers creating STCs and patching the pool or
updating a STC we add a mutex.

Issue https://github.com/dart-lang/sdk/issues/36097

Change-Id: Ic705619fe16772565ac11438fd15d3977cbb49c0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149164
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2020-05-29 04:47:22 +00:00
Martin Kustermann 764ebab404 [vm/gc] Ensure to tear down mutator pool of an isolate group before waiting for pending GC tasks
The mutator thread pool can, when it becomes idle, cause idle
notifaction, which can cause GC.

So we should turn down the mutator thread pool before waiting for
outstanding GC tasks.

See b/157612890

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

Change-Id: I1645252377ff07763eef1a00f9c1edff95e34f72
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149296
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2020-05-29 04:43:08 +00:00
Alexander Markov 4f3293c70e [vm/compiler] Recognize List.filled factory
Recognized factories have known result type and its type arguments
and length are automatically forwarded (length is forwarded only for
fixed-size lists).

List.filled factory is recognized only if optional 'growable' parameter
is not passed.

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

Change-Id: I0d63428f1c4667f3981447a939dbef67170e542e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149385
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2020-05-29 03:12:48 +00:00
Ryan Macnak f049a410e5 [vm] Check prefix.loadLibrary is called and returns before prefix members are used.
Not loading is actually deferred.

Bug: https://github.com/dart-lang/sdk/issues/41974
Change-Id: I62688007bd36dbcb2e8ffb4a1fd2dceb1775b1c8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149053
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2020-05-28 23:13:12 +00:00
Martin Kustermann 4c83df8741 [vm/tsan] Fix reported tsan race in message handler test
Closes https://github.com/dart-lang/sdk/issues/42097

Change-Id: I3fb89e18936b3ec95def268cd270ada889e0e9b5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149322
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2020-05-28 17:25:58 +00:00
Martin Kustermann 87ffb0837f [vm] Print isolate group name in stack trace dumping (used e.g. for SEGVs)
Change-Id: I4f94f8e36d5c931c936d90d29ef541bba8f2209e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149282
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2020-05-28 16:39:18 +00:00
Vyacheslav Egorov 6ab62add0d [vm/compiler] Use unboxed constants when folding away unboxed ops.
Before this change we would replace unboxed definitions (those with
representation not equal to kTagged) which is too loose and causes issues
in subsequent passes, which assume that replacements have normalised
representation.

After this change we make sure that replacement has a matching
representation.

Closes https://github.com/dart-lang/sdk/issues/35371
Fixes https://github.com/dart-lang/sdk/issues/41971

Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-debug-x64-try
Change-Id: I48543893562acf4f8516651196eba7c0c0769a22
Fixed: 35371,41971
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/103139
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2020-05-28 11:30:49 +00:00
Tess Strickland d881462eae [vm/aot] Clean up old assumptions in Serializer::WriteInstructions().
In the past, negative text offsets were used for instructions shared
by multiple code objects. This is no longer the case.

Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-product-x64-try,vm-kernel-precomp-linux-debug-x64-try
Change-Id: I85085a06b8c955abb21573caea5554e839154979
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149281
Reviewed-by: Daco Harkes <dacoharkes@google.com>
Commit-Queue: Tess Strickland <sstrickl@google.com>
2020-05-28 10:14:18 +00:00
Parker Lougheed 1fba93f7c7 [runtime/observatory] Clean up rewind command feedback
This check is also replicated later within [debugger.cc](https://github.com/dart-lang/sdk/blob/master/runtime/vm/debugger.cc#L4098), so it didn't necessarily matter that this check did not work.

Despite this, I think the earlier check does not hurt though, and I
also added feedback for when the supplied argument is not an int
rather than just throwing an error.

Bug: https://github.com/dart-lang/sdk/issues/38888
Change-Id: I8a7a237850957d13dbf0aa30873d3b9772eb6d1a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148567
Reviewed-by: Ben Konyi <bkonyi@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-05-28 00:12:04 +00:00
Martin Kustermann 4cf584d4fe [vm/concurrency] Move locks up from Isolate to IsolateGroup
In --enable-isolate group is

  * turned off, then we have 1<->1 mapping between isolate and isolate
    group, so moving the locks should have no impact

  * turned on, then we have N<->1 mapping between isolates and isolate
    group, mutators need to use the same locks to guarantee exclusive
    access (e.g. to symbol table, type canonicalization, type arguments
    canonicalization, ...)

This is a follow-up to share the program structure in AOT mode across
multiple isoltes.

In order to move the existing `Isolate::type_canonicalization_mutex_` to
`IsolateGroup` (and thereby make all mutators use the same lock), we need
to remove the `RunWithMutatorsStopped()` usage in the runtime entry.

  => Without this it can lead to deadlocks.

In order to remove usage of `RunWithMutatorsStopped()` we will change
access to the cached type arguments array to use load-acquire barriers
in generated code and store-release barriers in runtime code.

A nice side effect is that it reduces `sizeof(dart::Isolate)`.

Closes https://github.com/dart-lang/sdk/issues/41912
Issue https://github.com/dart-lang/sdk/issues/36097

Change-Id: Ifd42691524fe41ffe8bb4e2623c5b8c1151de973
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148539
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2020-05-27 17:04:30 +00:00
James Lin 10e8d5d1a6 Try to clarify the RangeError.range message
The old RangeError.range message was confusing:

  RangeError (index): Invalid value: Not in range 0..2, inclusive: 9

The comma makes the message hard to parse.  I've seen a number of
people misinterpret "inclusive" as describing the invalid value (9)
instead of acting as a modifier on the range.

https://github.com/dart-lang/sdk/issues/29586 has a lot of
bikeshedding about this, but in the interest of mitigating confusion
sooner, I propose changing it to:

  RangeError (index): Invalid value: Not in inclusive range 0..2: 9

I'm intentionally trying to improve the message with minimal
disruption to the structure of the error message.  Although I'd much
prefer that "Invalid value" and the actual value be adjacent instead
of being interrupted by the explanation, such restructuring is rather
non-trivial.  RangeError allows the "Invalid value" message to be
customized, and rearranging terms could produce even worse
constructions.

I also considered:

  RangeError (index): Invalid value: Not in range [0, 2]: 9

And while I like that that is brief and clear, I chose not to use it
for people who are unfamiliar with interval notation and who might
mistake it as a Dart List.

Bug: https://github.com/dart-lang/sdk/issues/29586
Change-Id: I0f23b195437e4053ae5f76b5d303123979a8c9fe
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/146024
Commit-Queue: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2020-05-27 14:59:39 +00:00
Clement Skau 205ba04c5e [SDK][Gardening] Fixes profiler_test broken in c4b7097e.
Test Profiler_ArrayAllocation used the non-existing List.empty()
constuctor.
This fix replaces it with the semantic equivalent List.filled(..).

TBR:bkonyi

Change-Id: I70913803a4d3585cb19a39375b14c1184f047644
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149160
Commit-Queue: Clement Skau <cskau@google.com>
Reviewed-by: Clement Skau <cskau@google.com>
2020-05-27 13:33:09 +00:00
Vyacheslav Egorov b95a1bd567 [vm/aot] Clean static fields handling in precompiler.cc
Instead of maintaining separate list of static fields which
needs to be flushed into list of retained fields in Iterate()
keep track of which precompilation phase we are in - and add static
fields into the retained set only if we are in the fixpoint
code generation (aka Iterate()) phase.

Apply the same treatment to selectors as well.

Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-debug-x64-try
Change-Id: I2c7c7bdf268eaee9623ab1be5cf3eb022991a7c6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148403
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
2020-05-27 10:22:19 +00:00
Vyacheslav Egorov 7175ab7329 [vm/compiler] Fix code determining if object can be a smi in LoadClassId.
Previous variant of the code did not handle FutureOr<T> and Comparable<U>
correctly - variables of these types can contain a smi value if T can be a
subclass of num or if U can be num.

Rename HasNonSmiAssignableInterface to CanReceiverBeSmiBasedOnInterfaceTarget
to better conway its meaning.

Fixes https://github.com/flutter/flutter/issues/57398

Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-product-x64-try,vm-kernel-precomp-linux-debug-x64-try
Change-Id: I67b29908e057632e62c46fb327a5c805fcc78d74
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149063
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-05-27 10:06:49 +00:00
Alexander Markov 2ec934d267 [vm] Fix crash on trampolines in --print_instructions_sizes_to
Trampolines which are generated in use_bare_instructions mode should be
taken into account when dumping sizes in --print_instructions_sizes_to.

This change fixes failing pkg/vm/test/snapshot/instruction_sizes_test on
Windows after https://dart-review.googlesource.com/c/sdk/+/148543.

Change-Id: I343f82699407ba54d9ccb9a9800875c61a6e8df3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149043
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2020-05-26 23:14:32 +00:00
Ben Konyi c4b7097e97 [ VM ] Migrate VM tests to support null safety and return errors from Dart_GetType and Dart_NewListOf when --null-safety is enabled
These methods return legacy types, which aren't valid with null safety
enabled.

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

Change-Id: I1181f0f3b9a8df156dea4dc4c82fef8afdf97ab9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148685
Commit-Queue: Ben Konyi <bkonyi@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2020-05-26 22:40:52 +00:00
Ryan Macnak 9b9ca0178f [vm/tools] Update references to snapshot_analysis.dart.
Change-Id: I93ddca77cb9b2594493298c1ca41403bd92fd3aa
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149021
Reviewed-by: Siva Annamalai <asiva@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2020-05-26 21:21:19 +00:00
Alexander Markov db063ea6d0 [vm/compiler] Remove redundant phis during canonicalization
It might be too late to remove redundant phis in EliminateDeadPhis
because EliminateDeadPhis runs after OptimizeBranches, and
OptimizeBranches may be able to eliminate more branches if redundant
phis are cleaned up.

This change moves elimination of redundant phis into canonicalization
pass which is repeated more frequently.

Fixes recent regressions on several micro-benchmarks after
https://dart-review.googlesource.com/c/sdk/+/139314

Change-Id: Ib0148564615dbd0adb88e93b938ca9f3f59cabfd
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148792
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2020-05-26 17:59:38 +00:00
Alexander Markov 572905d1e9 [vm] Fix crash in disassembler on trampolines
Fixes https://github.com/dart-lang/sdk/issues/42017

Change-Id: I7d9f2694907be2ba673f35c82ce65a4ee8bc77b6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148942
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-05-26 17:31:58 +00:00
Vyacheslav Egorov ff6757f380 [vm/snapshot] Improve precision of --write-v8-snapshot-profile-to.
Attribute bytes written outside of any particular object to the
artificial root node.

https://github.com/dart-lang/sdk/issues/41249

Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-product-x64-try,vm-kernel-precomp-linux-debug-x64-try
Change-Id: I6d4be9b9a6a42cd0996330bb14552d12d6430ff9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148526
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
2020-05-26 10:46:05 +00:00
Tess Strickland 826576dcfc [vm] Store relocated addresses for text sections in BSS.
The relocated addresses are populated during BSS::Initialize() for
natively loaded ELF snapshots, and during the non-native loader when it
is used. Putting this information in the BSS segment avoids having to
change the embedder interface, since we only need this information for
AOT snapshots. This also avoids depending on our ELF snapshot layout
to reverse-engineer the DSO base for ELF-compiled snapshots.

We now always print the DSO base for both the VM and isolate in
non-symbolic stack traces, not just for ELF-compiled snapshots. However,
we still only print the relocated addresses in individual stack frames
if we're guaranteed they match those in separately saved debugging
information.

Bug: https://github.com/dart-lang/sdk/issues/41880

Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-product-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-kernel-precomp-win-release-x64-try,vm-kernel-precomp-mac-release-simarm64-try
Change-Id: I4837262f78e6e73a32eb7e24ef7a68ccb8ec2669
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148441
Commit-Queue: Tess Strickland <sstrickl@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-05-26 08:47:30 +00:00
Jens Johansen 857fca710f [kernel/VM] Fix 'infinite' loop with memory crash on specific invalid dill
The dill file has an index at the end. The last 4 bytes of that index is
a size that indicates how big the file is. This is done to support
concatenated dill files. If the dill is invalid and the size is read as 0
both the VM and the dart kernel reader will go into an infinite loop where
it allocates another list entry on every loop iteration (making the whole
loop not infinate because we will run out of ram soon enough).

This CL fixes the issue by checking the size to be possitive.

Change-Id: I42da0557c6d4a274fdbe1a729fdaf5b8f149b187
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148538
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
2020-05-26 08:24:05 +00:00
Ben Konyi 65113fd73d Reland "[ VM / DartDev ] Fix issue where EXEUtils returned a relative directory path instead of an absolute path"
This reverts commit c0976b6037.

Change-Id: I17e9b3087ba1e65bf64053011200e4df43c90a44
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148943
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2020-05-22 01:55:52 +00:00
Parker Lougheed ecce58c1e3 [vm/ffi] Remove documentation from setters
Now that bf7e9d13d7 has landed and the analysis
server can pull docs from corresponding getters, we can remove the extra
docs on the setters.

Fixes #38892

Bug: https://github.com/dart-lang/sdk/issues/38892
Change-Id: I0f96a1b1b1513706912c651e9d1d5b3da043a148
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148747
Reviewed-by: Daco Harkes <dacoharkes@google.com>
Commit-Queue: Daco Harkes <dacoharkes@google.com>
2020-05-21 09:18:10 +00:00
Ryan Macnak 8e62d5cafc [observatory] Fix viewing RegExp.
Change-Id: I7dbf7c29a1e58c13ff041a70c075dfbeb74a0376
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148661
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-05-20 19:49:11 +00:00
Ben Konyi c0976b6037 Revert "[ VM / DartDev ] Fix issue where EXEUtils returned a relative directory path instead of an absolute path"
This reverts commit af5ad5f1b0.

Reason for revert: Failing Windows bots.

Original change's description:
> [ VM / DartDev ] Fix issue where EXEUtils returned a relative directory path instead of an absolute path
> 
> This was causing the DartDev snapshot discovery to fail for brew
> installs as the last symlink resolved to '../libexec/bin/dart' which
> meant that we were looking for the snapshot at
> '../libexec/bin/snapshots/dartdev.dart.snapshot'.
> `
> 
> Change-Id: Ic68bfa13ba060f7a059d07e25c04076583b0b118
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148542
> Commit-Queue: Ben Konyi <bkonyi@google.com>
> Reviewed-by: Siva Annamalai <asiva@google.com>

TBR=bkonyi@google.com,asiva@google.com,zichangguo@google.com

Change-Id: I55d3102e87c4cc522bac3a55421ed85f22f97035
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148745
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2020-05-20 19:36:42 +00:00
Ben Konyi af5ad5f1b0 [ VM / DartDev ] Fix issue where EXEUtils returned a relative directory path instead of an absolute path
This was causing the DartDev snapshot discovery to fail for brew
installs as the last symlink resolved to '../libexec/bin/dart' which
meant that we were looking for the snapshot at
'../libexec/bin/snapshots/dartdev.dart.snapshot'.
`

Change-Id: Ic68bfa13ba060f7a059d07e25c04076583b0b118
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148542
Commit-Queue: Ben Konyi <bkonyi@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2020-05-20 18:59:05 +00:00
Aske Simon Christensen 81ad24322c [vm/compiler] Check BoxInt64 overflow via the overflow flag on ARM64.
This saves one instruction for every BoxInt64 overflow check, reducing
the instructions size for Flutter benchmarks by between 0.26% and 1.03%
(0.26% for Flutter Gallery).

Also add OVERFLOW and NO_OVERFLOW condition aliases to arm and arm64.

Change-Id: I82990419b448f21a22ea2cc7a15a9497d3275943
Cq-Do-Not-Cancel-Tryjobs: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/145860
Commit-Queue: Aske Simon Christensen <askesc@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-05-20 14:05:40 +00:00