Commit Graph

13143 Commits

Author SHA1 Message Date
Ryan Macnak 2a8127dbfa [vm, gc] Take heap size into account when deciding when to start concurrent marking.
Begin concurrent marking when available space in old-space is less than 5% or than the size of new-space, whichever comes first.

Avoids concurrent marking starting too late in larger heaps, where the program would exceed the hard threshold before concurrent marking would finish.

Change-Id: I6a1991331a1450ffa647bf0e21dfc19e82537268
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134466
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2020-03-05 17:49:54 +00:00
Daco Harkes d950783c07 [vm/ffi] Unify RawTypedData::data and Pointer::data
This does not make FFI Structs with TypedData yet, but makes the loads/stores support using TypedData.

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

Change-Id: I5d03e324c98c79c07955d70db86ab2e2d8dc4ec2
Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64-try,app-kernel-linux-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-kernel-win-debug-x64-try,vm-kernel-win-debug-ia32-try,vm-kernel-precomp-linux-debug-x64-try,vm-dartkb-linux-release-x64-abi-try,vm-kernel-precomp-android-release-arm64-try,vm-kernel-asan-linux-release-x64-try,vm-kernel-linux-release-simarm-try,vm-kernel-linux-release-simarm64-try,vm-kernel-precomp-android-release-arm_x64-try,vm-kernel-precomp-obfuscate-linux-release-x64-try,dart-sdk-linux-try,analyzer-analysis-server-linux-try,analyzer-linux-release-try,front-end-linux-release-x64-try,vm-kernel-precomp-win-release-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137305
Commit-Queue: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-03-05 17:18:24 +00:00
Daco Harkes b406802981 [vm/ffi] Unbox Pointer data field
This regresses Pointer load and store loops because LoadUntagged is never hoisted out of loops. But with support for passing TypedData, in a follow up CL, we cannot assume that only Pointers are passed in the future.

It also changes the FfiCallInstr context to hold the Pointer, rather than the address, as call sites can be unoptimized and we cannot handle an untagged address there.

Issue: https://github.com/dart-lang/sdk/issues/40767
Issue: https://github.com/dart-lang/sdk/issues/36730
Change-Id: Icc716d79eb9eb2b5aac4f03dbf6c622a6825ffdc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137793
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-03-05 17:18:24 +00:00
Daco Harkes 46bc5cd634 [vm] Support using different representations in ConvertUnboxedToUntagged
Change-Id: Ie84e7f5c966a428c69ef5017e89cf41e52031a42
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137792
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-03-05 17:18:24 +00:00
Daco Harkes c135e2a7cd [vm/ffi] Reorder fields inside Pointer
Issue: https://github.com/dart-lang/sdk/issues/40767
Issue: https://github.com/dart-lang/sdk/issues/36730
Change-Id: I725bb7ffc9325308dbccb668e683fbd9a7d7b565
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137791
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-03-05 17:18:24 +00:00
Daco Harkes 4081235ac5 [vm] Support unboxed indices in indexed load and store
Use unboxed indices in FFI loads, eliminating extra boxing and a shift for 1-byte loads.
Speeds up Pointer<Int8,Int64,etc> loads/stores by 20-25% in AOT on x64.

This does not use the unboxed indices in TypedData yet, using unboxed in TypedData without making the bounds checks unboxed makes it slower instead of faster.

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

Change-Id: I2521fcd319cf4ed6891622e8a3c8c1924e9b01f3
Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64-try,app-kernel-linux-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-kernel-win-debug-x64-try,vm-kernel-win-debug-ia32-try,vm-kernel-precomp-linux-debug-x64-try,vm-dartkb-linux-release-x64-abi-try,vm-kernel-precomp-android-release-arm64-try,vm-kernel-asan-linux-release-x64-try,vm-kernel-linux-release-simarm-try,vm-kernel-linux-release-simarm64-try,vm-kernel-precomp-android-release-arm_x64-try,vm-kernel-precomp-obfuscate-linux-release-x64-try,dart-sdk-linux-try,analyzer-analysis-server-linux-try,analyzer-linux-release-try,front-end-linux-release-x64-try,vm-kernel-precomp-win-release-x64-try,vm-kernel-mac-debug-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137788
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-03-05 17:18:24 +00:00
Victor Lima b951498903 [vm/aot] Allow static methods to have unboxed args and return
Static methods and constructors may receive unboxed parameters.
This change adds a bitmap to the RawFunction object indicating
which parameters are unboxed and their types. Also, the stack frame
bitmap was updated to include new bits for those parameters.

The ArgumentsDescriptor object was updated to store not only the number
of arguments, but also their size, since 32-bit platforms would use two
words for each int64 and double value.

In addition, static methods that return non-nullable integers
and doubles may return these values unboxed.

Dart AOT x64:

TypedData.Uint8ClampedListViewVarBench  +11.73%
DeltaBlue                               +9.32%
Meteor (Intel Xeon)                     +4.64%

Flutter release android-armv8:

velocity_tracker_bench                  -2.32% (less is better)

flutter_gallery_readonlydata_size       +0.18%
flutter_gallery_total_size              +0.13%
flutter_gallery_instructions_size       +0.12%

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

Change-Id: I97e310f8f30213920af2333fbdedf193d03db5c3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/135313
Commit-Queue: Victor Agnez Lima <victoragnez@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-03-05 15:17:04 +00:00
Jens Johansen 3c4089da96 [VM] Enable expression compilation when loaded from dill
Whenever the VM sends a request to evaluate an expression, it sends over
the list of alive dills (in order) and a sequence number (number of
reloads).
This can then either be
a) ignored if there's already a compiler around that has compiled
   everything itself (e.g. if launched from source with observatory
   enabled).
b) used to find out that we need to create a new compiler especially
   for expression compilation. Either because we don't have any old
   compiler or because a reload or GC changed the data available.
c) used to find out that the compiler we created previously is still in
   a good state.

Tests for expression compilation has been added, and with the "framework"
added it should be easy to add new ones.

This CL leaves a few things to possibly be improved later:
* It doesn't support if one tries to do a mixed mode, where one
  starts from source and reloads from dill. The compiler will not be
  updated and the expression compilation will work on a old view of the
  world.
* If - in any of the reloads - the main entry point changes library,
  the initialization might not work correctly.

Fixes #34736.

Change-Id: Icae009c581e69b810ee19d2a5e2d0a803fd9f7c8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/135683
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2020-03-05 07:56:23 +00:00
Régis Crelier 90484c2edb [VM/nnbd] Check consistency of non-nullable compiled mode of loaded libraries.
Change-Id: If924e47fb782eb77ec0aa1cc003f0b6edb76411b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137847
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2020-03-04 21:16:46 +00:00
Liam Appelbe bd6899269e [vm] Handle required params in closures and tear-offs
I planned to make this conditional on function_.IsClosureFunction, but
the Goto is so trivial that there's no harm in doing this for all
required params (in fact it actually shrinks the prologue size).

Fixes: https://github.com/dart-lang/sdk/issues/39660
Fixes: https://github.com/dart-lang/sdk/issues/38843
Change-Id: I8e4db906ae709778d76c6b81524e45377266e32b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138328
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Liam Appelbe <liama@google.com>
2020-03-04 20:57:26 +00:00
Ryan Macnak df5036eb6e [vm] Require only an isolate group, not an isolate, in Dart_Delete[Weak]PersistentHandle.
Remove the now-misleading isolate parameter of Dart_DeleteWeakPersistentHandle.

Bug: https://github.com/dart-lang/sdk/issues/40836
Change-Id: I784f1ecf564484b59f60ebef53ddb975aff1bd23
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138015
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-03-04 18:56:16 +00:00
Régis Crelier 5701c4fd3b [VM/nnbd] Remove propagation of library mode to runtime after spec change.
On 1/27/20, the nnbd specification changed weak and strong mode instance checks
to make them behave uniformly across legacy and opted-in libraries.
Therefore, it is not necessary anymore to propagate the library mode in
generated code to the runtime.

Change-Id: I42d3ddc6e9a921899aeac21be6374c7893a6d27c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138111
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
2020-03-03 20:30:32 +00:00
Ryan Macnak 608604589c [vm, gc] Fix a lock order inversion detected by TSAN.
If a thread acquires both a freelist lock and the pages lock, ensure it acquires the freelist lock first.

Bug: https://github.com/dart-lang/sdk/issues/39611
Change-Id: Iadd7c270e18052aa32d883db1ddb8e4ebd1f0c49
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138041
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2020-03-03 18:30:23 +00:00
Ryan Macnak 75c41e91e3 [vm, test] Fix data races in vm/cc/ThreadPool_*
Bug: https://github.com/dart-lang/sdk/issues/39611
Change-Id: Ie8d6d29dba2f0c22af0158499565ccd55081a3b2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138050
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-03-03 18:28:34 +00:00
Ryan Macnak 2864742d88 [vm, gc] Fix data race during safepointing detected by TSAN in vm/cc/SafepointTestDart.
A thread may enter a safepoint using a simple CAS. This can happen before a safepoint is requested, in which case the thread won't need to check into the safepoint using the monitor. However, we still need at least a release-acquire pair so the safepoint operation can observe memory effects up to the CAS.

Bug: https://github.com/dart-lang/sdk/issues/39611
Change-Id: Ied1b6c8c8e03bc17d86d848eccf874f24f5d0df4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138051
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2020-03-03 16:52:11 +00:00
Ryan Macnak e9cefe7c08 [vm, test] Fix race in shutdown of MessageHandler_Run.
Bug: https://github.com/dart-lang/sdk/issues/39611
Change-Id: I9bd55304646dbc2d1b6fad41b3f31c2ff9384b09
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138049
Reviewed-by: Siva Annamalai <asiva@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-03-03 16:51:51 +00:00
Clement Skau fdca1f3178 [SDK] Adds CloneContext StubCode, removing runtime entry for clone.
Bug: https://github.com/dart-lang/sdk/issues/37667
Change-Id: I762fd38bc7d8647a357cacc40b6c191117f03618
Cq-Include-Trybots: luci.dart.try:vm-canary-linux-debug-try,vm-dartkb-linux-release-simarm64-try,vm-kernel-linux-debug-x64-try,vm-kernel-linux-release-simarm64-try,vm-kernel-optcounter-threshold-linux-release-ia32-try,vm-kernel-precomp-android-release-arm_x64-try,vm-kernel-precomp-mac-release-simarm64-try,vm-kernel-precomp-obfuscate-linux-release-x64-try,vm-kernel-precomp-win-release-x64-try,vm-kernel-win-debug-ia32-try,vm-kernel-win-debug-x64-try,vm-kernel-win-product-x64-try,vm-kernel-win-release-ia32-try,vm-kernel-win-release-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134282
Commit-Queue: Clement Skau <cskau@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-03-03 13:05:39 +00:00
Teagan Strickland cc9374d5cd [vm/compiler] Check for Smi-ness in GetSmiInduction.
Fixes https://github.com/dart-lang/sdk/issues/40754

Change-Id: I0b0c3b4959e5e89f7f50889eef2edcda70a815f2
Cq-Include-Trybots: luci.dart.try:vm-kernel-linux-debug-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137797
Commit-Queue: Teagan Strickland <sstrickl@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2020-03-03 12:37:19 +00:00
Teagan Strickland cf2b697a16 [vm/compiler] Fix address sizes in DWARF generator.
Fixes https://github.com/dart-lang/sdk/issues/40855

Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-release-simarm_x64-try,vm-kernel-precomp-mac-release-simarm64-try,vm-kernel-precomp-win-release-x64-try
Change-Id: Id60d82d931a3087408f62b0fa1381b0f20c11f68
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137971
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Teagan Strickland <sstrickl@google.com>
2020-03-03 12:36:50 +00:00
Liam Appelbe 149b799ae4 [vm] Check required flag during function resolution.
Bug: https://github.com/dart-lang/sdk/issues/39660
Bug: https://github.com/dart-lang/sdk/issues/38843
Change-Id: I2eb5f5ac38d7b1896db5c57399c42cdb41b16094
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137737
Commit-Queue: Liam Appelbe <liama@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
2020-03-02 23:05:16 +00:00
Ryan Macnak e211bd28c1 [vm, gc] Set the current isolate to the group's only member before running finalizers.
Some embedder code relies on the presence of a current isolate equal to the isolate that created the handle. This code will be need to be updated to be isolate-group aware before we can run finalizers only in the context of the isolate group instead of an isolate.

Bug: https://github.com/dart-lang/sdk/issues/40836
Change-Id: I38956c556df551e48ee7e4d0822aa5def8dc4fc5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138013
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2020-03-02 22:56:06 +00:00
Vyacheslav Egorov d81e18bc0b [vm/compiler] Add missing NoSafepointScope
TBR=sjindel@google.com

Change-Id: Ieaff6171e7599bc962eee917f6d6e5a3f662e4dc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137969
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2020-03-02 21:33:18 +00:00
Vyacheslav Egorov 1ad4fcb154 [vm/compiler] Fix Mac builds and disassembler test.
This is follow up to 2cc824043d

TBR=sjindel@google.com

Change-Id: If955320b549b87287fdc1f9b9a715b1ca024224a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137968
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
2020-03-02 21:01:54 +00:00
Vyacheslav Egorov 2cc824043d [vm/compiler] Ensure we emit catch entry move for receiver when it is captured
We have a special logic which excludes captured parameters from the catch
entry moves (assuming that they will be reloaded from the context). Because
this logic is well hidden it was not updated when we changed our handling of
the captured receiver in 078806851c

Fixes https://github.com/dart-lang/sdk/issues/40809
Fixes https://github.com/flutter/flutter/issues/47482

Change-Id: I2f036204c2ac3a18c6f91d9ccb664eaee729d426
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137965
Reviewed-by: Samir Jindel <sjindel@google.com>
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
2020-03-02 20:09:42 +00:00
Alexander Markov af4f3a720c [vm/nnbd] Eliminate 'Undetermined' nullability from the VM
VM should treat type parameters with kUndertermined and kNonNullable
nullability in the same way (both can be instantiated with a legacy
type and even nullable Null in a legacy library).

So kUndertermined nullability can be converted to kNonNullable
when reading kernel, and code which handles kUndertermined nullability
can be simplified.

Change-Id: Ib5dbd92ae9ee3754f3e64629e0a03952aadfd287
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137862
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
2020-03-02 19:06:33 +00:00
Martin Kustermann 619e9202b7 [vm] Do not call MSAN_CHECK_INITIALIZED for ExternalData created via dart:ffi
It is common to allocate memory via `dart:ffi`, use
`Pointer.asTypedList()` to get an external typed data and finally
initialize it in Dart.

b/150573916

Change-Id: I72ce2e3474e41d1553bc8ca2c782b61d93b97874
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137961
Reviewed-by: Daco Harkes <dacoharkes@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2020-03-02 12:11:20 +00:00
asiva 09bbd3cca5 [VM/concurrency] - Temporary workaround for issue https://github.com/dart-lang/sdk/issues/40836
Change-Id: I4369c717122ef7b84c5931b8fb3edf18fb433375
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137880
Reviewed-by: Jason Simmons <jsimmons@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
2020-02-29 02:16:10 +00:00
Alexander Markov d2bd9691aa [vm] Remove unused Resolver::ResolveStaticAllowPrivate
Change-Id: I31701f73b32371a61f5bf159be61d5ed2806bef8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137848
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2020-02-29 01:21:30 +00:00
Ben Konyi 6708f6d4c7 [ VM / Service ] Documented that RPCs with an isolateId parameter can return a Sentinel if the target isolate no longer exists.
This is a breaking change for package:vm_service as multiple RPCs now return `Future<dynamic>` to allow for Sentinels.

Fix related to b/150193047

Change-Id: I9dd3247d079a391e8677f7ba6ef5056107284af3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137821
Commit-Queue: Ben Konyi <bkonyi@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2020-02-28 22:12:16 +00:00
Régis Crelier 928ed9c766 [VM/nnbd] Apply legacy erasure on constants compiled in agnostic mode (fixes #40800).
Adds 2 bits to RawLibrary flags to encode CFE compilation mode.
If in weak mode, apply legacy erasure to types of constants from agnostic
libraries, i.e.:
- Map Never to Null
- Set nullability to legacy
- Erase 'required' flag on named parameters

Change-Id: I57feeef3fa1689a5cb93b3fa983ea3d65047b8c2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137735
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
2020-02-28 21:52:40 +00:00
zhaoxuyang f90d7ffe9b Bug with interpreter NullCheck bytecode instruction
1. Let's look at the generation of NullCheck bytecode instruction.

 pkg/vm/lib/bytecode/gen_bytecode.dart

```
if (checkForNull) {

      asm.emitPush(receiverTemp);

      asm.emitNullCheck(cp.addSelectorName(node.name, InvocationKind.method));

    }
```

First push the receiver onto the stack, then check if it is null.

2. Related code in the interpreter.

runtime/vm/interpreter.cc

```
{
    BYTECODE(Push, X);
    *++SP = FP[rX];
    DISPATCH();
}

{
    BYTECODE(NullCheck, D);
    SP -= 1;

    if (UNLIKELY(SP[0] == null_value)) {
      // Load selector.
      SP[0] = LOAD_CONSTANT(rD);
      goto ThrowNullError;
    }

    DISPATCH();
  }
```

After the Push instruction is processed, now SP[0] is receiver.

But the NullCheck instruction first decrements SP by one,  causing the SP to be checked later is not a receiver.

After my testing, this is a bug.

3. fix like this

```
{
    BYTECODE(NullCheck, D);

    if (UNLIKELY(SP[0] == null_value)) {
      // Load selector.
      SP[0] = LOAD_CONSTANT(rD);
      goto ThrowNullError;
    }
    SP -= 1;

    DISPATCH();
}
```

Closes https://github.com/dart-lang/sdk/pull/40811
https://github.com/dart-lang/sdk/pull/40811

GitOrigin-RevId: d5a9989ba3c82a5d133ea755c93fc2e1272fdad2
Change-Id: I271cf0e924baca29640a2088535cbe4ecb0892ea
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137730
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2020-02-28 19:02:35 +00:00
Daco Harkes f7192b63cb [vm/ffi] Expose dart_native_api.h symbols via dart:ffi
This enables dynamic linking of the symbols in dart_native_api.h to work around the Windows linking issue and Dart embedders not exposing symbols.

Issue: https://github.com/dart-lang/sdk/issues/40607
Closes: https://github.com/dart-lang/sdk/issues/40564

Change-Id: I6f797cc915b53ec63fa5953529f17c40e52a2aed
Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64-try,app-kernel-linux-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-kernel-win-debug-x64-try,vm-kernel-win-debug-ia32-try,vm-kernel-precomp-linux-debug-x64-try,vm-dartkb-linux-release-x64-abi-try,vm-kernel-precomp-android-release-arm64-try,vm-kernel-asan-linux-release-x64-try,vm-kernel-linux-release-simarm-try,vm-kernel-linux-release-simarm64-try,vm-kernel-precomp-android-release-arm_x64-try,vm-kernel-precomp-obfuscate-linux-release-x64-try,dart-sdk-linux-try,analyzer-analysis-server-linux-try,analyzer-linux-release-try,front-end-linux-release-x64-try,vm-kernel-precomp-win-release-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/136962
Commit-Queue: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-02-28 18:44:45 +00:00
Martin Kustermann 54b730b3df [vm/concurrency] Ensure CreateWithinExistingIsolateGroup is re-setting the cached isolate_group pointer in the mutator thread
When moving the newly spawned isolate from the spawnee group to the main
group we have to ensure to update the cached
`Isolate::mutator_thread_->isolate_group_` pointer (which we do not
reset when descheduling mutator threads (for other threads we do)).

This will fix the ASAN crash in this test:

  tools/test.py -n dartk-asan-linux-release-x64 lib_2/isolate/mandel_isolate_test

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

Change-Id: I5a897098106e6748cf4e58bd5d2799ce28b130a8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/136971
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2020-02-28 15:43:51 +00:00
Vyacheslav Egorov 9f2455796f [vm/snapshot] Make references between code and pool entries explicit in snapshot profile.
Code references other objects via object pools. In bare instructions mode
individual objects pool are merged together into a global object pool,
which means that we no longer can clearly see which objects are
referenced by each individual code object.

This CL adds logic into snapshot writer to include these implicit
references into the snapshot profile. We achieve this by keeping
individual object pools around (but avoiding writing them into the
snapshot itself).

R=sjindel@google.com

Change-Id: I35b48fcfc26c0a8c0b66593139fa7ac8e627da6c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/136626
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Samir Jindel <sjindel@google.com>
2020-02-28 10:40:33 +00:00
Ryan Macnak d99f6bffcb [vm, test] Fix false positive from MSAN during vm/cc/StoreIntoObject.
Change-Id: I3133420863b50734349646b3d6ad04df819ed322
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137657
Reviewed-by: Ben Konyi <bkonyi@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2020-02-28 00:55:50 +00:00
Régis Crelier 63e36183ae [VM/nnbd] Follow-up to earlier commit acd7b83.
Revert some changes from https://dart-review.googlesource.com/c/sdk/+/137460
Avoid handle allocations in Instance::NullIsInstanceOf()

Change-Id: I66c8d960333270bd79b2b39c0c67dad754112e0e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137654
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2020-02-27 23:24:43 +00:00
Ryan Macnak f3031b6b79 Reland "[vm] Handle sentinel in the IL serializer and Array-backed hash maps."
Reverse use of the backing store and transition sentinel as bookkeeping values. Use transition sentinel to mark unused entries, since it has a short object id during clustered serialization. Use the backing store to mark deleted entries; deletion seems to only be used for enum values during a hot reload.

Change-Id: I52f0edcbc7e26f73843500cd378da31ea3b1e0ba
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137680
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-02-27 23:21:23 +00:00
Régis Crelier acd7b8367e [VM/nnbd] Nullability of FutureOr and of its type arg do not necessarily match.
Change-Id: Ie1cb6287cdfa852c8ac73868b571b422fbc9dc0a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137460
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2020-02-27 21:08:24 +00:00
Alexander Markov 38508be344 [vm/nnbd] Fix bounds and nullability of type parameters read from bytecode
Fixes vm/dart/bytecode_with_ast_in_aot_test after unforking SDK.

Change-Id: I95b697a13a283d7e8fab381b200e9e49dbf6742b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137646
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2020-02-27 20:55:03 +00:00
Martin Kustermann 501af5ac3b [vm/concurrency] Fix user-after-free when running experimental --enable-isolate-groups in JIT with app-jit training
Originally I had the permutation map on IsolateGroup where the copy was
needed due to creating the temporary spawn group.  Though it moved to
IsolateGroupSource now which is shared even with the temporary spawn
group.

This fixes flakiness in the app-jit tests:

  tools/test.py -n app_jitk-linux-release-x64 standalone_2/typed_array_test/0

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

Change-Id: I0611fc98d03950b400ef70fa5127eba9d00742bc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137304
Reviewed-by: Alexander Aprelev <aam@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2020-02-27 19:54:03 +00:00
Régis Crelier 21bc1ed76c [VM/nnbd] Allow instantiation of a non-nullable type parameter to a nullable type.
Change-Id: Icc3413cd5c285fa40ee5188f39837625d78b9e67
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137427
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2020-02-27 19:48:23 +00:00
Ryan Macnak 2a5d0589ac [vm, gc] Verify the store buffer contains all old-space objects that reference new-space objects.
Speed-up ObjectSets.

Fix pointer verification before and after scavenging to set the correct mark expectation being on concurrent marking state.

Bug: https://github.com/dart-lang/sdk/issues/40780
Change-Id: Ic7ce6d5a829e41634083b0c274b9764da3f4b619
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137240
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2020-02-27 19:26:33 +00:00
Ryan Macnak 02f69a713e Revert "[vm] Handle sentinel in the IL serializer and Array-backed hash maps."
This reverts commit 62396cac55.

Reason for revert: Code size regressions likely due to the hash map change

Original change's description:
> [vm] Handle sentinel in the IL serializer and Array-backed hash maps.
> 
> Fixes crashes in vm/dart when use_nnbd = true.
> 
> Change-Id: Ieeb45227208cc6219f536130df38249d902dfe7f
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137462
> Reviewed-by: Siva Annamalai <asiva@google.com>
> Commit-Queue: Ryan Macnak <rmacnak@google.com>

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

Change-Id: I789bd219a7ab335771fcc0b39f25e9d0104945e0
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137640
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-02-27 18:08:43 +00:00
Ryan Macnak 60c86a4009 [vm, gc] Fix races related to Scavenger::AddAbandonedInBytes and UsedInWords.
[infra] Run fewer tests under TSAN. TSAN has a significantly higher overhead than the other sanitizers.

Change-Id: I92b69923e93fa4634168352bdbe30d6ee7e7f72d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137402
Reviewed-by: Alexander Thomas <athom@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-02-27 18:01:13 +00:00
Ryan Macnak 95f87f321a [vm, io] Fix some MemorySanitizer issues.
Change-Id: Id6e085563b05861351c431a9c067387b4b01270b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137380
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-02-27 17:50:43 +00:00
Clement Skau b9f2c264ef [Backend] Fixes bug in IndirectGotoInstr::ComputeOffsetTable causing bad offsets.
The code previously used the target offset directly instead of the
JumpLabel which could cause it to miss multiple indirections, causing
a -1 offset.
This would manifest as a jump to an entry which would be
off-by-minus-one and thus hit the pre-code int3 barrier.

Bug: https://github.com/flutter/flutter/issues/51298
Change-Id: I0ef7d8ed578594bfb5fe9544f9b4aebaabc86275
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137303
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Clement Skau <cskau@google.com>
2020-02-27 11:03:50 +00:00
Alexander Markov 77e1c72d04 [vm/nnbd] Type testing stubs in NNBD strong mode
Issue: https://github.com/dart-lang/sdk/issues/38845
Change-Id: I82e7a1b3c4220abdd2a215529230fbb158adbe9e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/135627
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
2020-02-27 04:36:24 +00:00
Alexander Markov 82236bd6ab [vm] Fix incorrect inference of non-nullability from 'is' checks
Fixes https://github.com/dart-lang/sdk/issues/40792
Fixes https://github.com/dart-lang/sdk/issues/40795

Change-Id: I0af455040e05265a025b1a424c1aac30f3476f95
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137426
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2020-02-27 03:35:34 +00:00
Ryan Macnak 62396cac55 [vm] Handle sentinel in the IL serializer and Array-backed hash maps.
Fixes crashes in vm/dart when use_nnbd = true.

Change-Id: Ieeb45227208cc6219f536130df38249d902dfe7f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137462
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-02-27 01:43:24 +00:00
Liam Appelbe 9f73412618 [vm] Mark late fields as nullable in type propagator
Bug: https://github.com/dart-lang/sdk/issues/40738
Change-Id: Iaf5a5562d9a7ce3115c0dd72f0c78d307e3d1b2c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137421
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Liam Appelbe <liama@google.com>
2020-02-26 23:25:21 +00:00