Commit Graph

16905 Commits

Author SHA1 Message Date
Alexander Markov 6e53ac6e4c [vm/nnbd] Fix supertype check in GenerateSubtype1TestCacheLookup
Before calling Subtype1TestCache stub, there was a quick check if
supertype's class id matches tested class id.
Null extends Object, so supertype of Null matches Object.
However, in NNBD strong mode Null is not assignable to Object.

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

Change-Id: Icc3efaf90992b5083cbe086af81db7504724b855
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/142085
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2020-04-02 01:39:10 +00:00
Martin Kustermann dd2d1fea70 Revert "[vm] Add linker script to hide symbols from standalone embedder executables"
This reverts commit 78435da54b.

Reason for revert: The mac builds failed due to clang not understanding the linker option on Mac. Will also investigate Ryan's question around interaction with profiler.

Original change's description:
> [vm] Add linker script to hide symbols from standalone embedder executables
> 
> This is a safeguard to prevent users from depending on standalone
> executable internal symbols.
> 
> This was already done in g3 in cl/304142297 for b/151696305.
> 
> Change-Id: Ie01fc662eba7f8873530721394821b6c6c85e510
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/142023
> Commit-Queue: Martin Kustermann <kustermann@google.com>
> Reviewed-by: Vyacheslav Egorov <vegorov@google.com>

TBR=vegorov@google.com,kustermann@google.com

Change-Id: I824fa99658612856df6cecc1533a1ea7ee87c54e
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/142024
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2020-04-01 18:27:42 +00:00
Ryan Macnak 74da2edd3d [vm] More do not allocate when evaluating arguments to StorePointer.
If the first argument is evaluated first, it is an untracked interior pointer that will be used after any GC that occurs while evaluating the second argument.

Bug: https://github.com/dart-lang/sdk/issues/41144
Bug: https://github.com/dart-lang/sdk/issues/41262
Change-Id: I2c835b55a12af8d44ac2eee431e4e24b69030600
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141910
Reviewed-by: Ben Konyi <bkonyi@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-04-01 16:26:05 +00:00
Martin Kustermann 9b1fc3c830 [vm/compiler] No longer attempt to run AOT pipeline and compile & run in JIT run_vm_tests
I have tried several attempts to make the test continue to work,
including:

    * Running JIT pipeline with the special TD AOT optimization pass
    * Running AOT pipeline, clear deopt ids and run in JIT
    * Change only parts of compiler backend

None of the approaches are working really well, so we'll just not run
the code.

The vm/cc/IRTest_TypedDataAOT_FunctionalGetSet continues to check the
generated IR graph.

Closes https://github.com/dart-lang/sdk/issues/41148

Change-Id: I81c3f7900443eb5a5ed7b9641185b9b9d5c4debb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141245
Reviewed-by: Daco Harkes <dacoharkes@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2020-04-01 16:16:06 +00:00
Martin Kustermann 78435da54b [vm] Add linker script to hide symbols from standalone embedder executables
This is a safeguard to prevent users from depending on standalone
executable internal symbols.

This was already done in g3 in cl/304142297 for b/151696305.

Change-Id: Ie01fc662eba7f8873530721394821b6c6c85e510
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/142023
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2020-04-01 16:11:55 +00:00
Martin Kustermann d6a096cb03 [vm/compiler] Move runtime call of InitInstanceField out into a Stub
If the runtime causes a deoptimization of the frame it expects
the deopt environment to reflect the stack of unoptimized code (without
additional pushed objects).

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

Change-Id: I6c7bebc53ce82f5d18cf94e1c95ddebd943efa8c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141980
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Tess Strickland <sstrickl@google.com>
2020-04-01 10:03:04 +00:00
Ben Konyi 99a5117411 [ VM / DartDev ] Fixed issue where trying to find the directory of the Dart executable would fail if we encountered a relative symlink while trying to determine the absolute path.
Change-Id: I6ee87ad623ca1e8335a96a8480e9243da9720ced
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140960
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2020-03-31 22:39:00 +00:00
Martin Kustermann 931eadabf3 [vm/compiler] Fix deoptimization during initialization of static field
This extracts the runtime call out into a stub to avoid pushing arguments
inside the InitStaticFieldInstr.

As a nice side-effect this also reduces the size of the instruction
by 7-8 instructions (as well as makes the code architecture agnostic).

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

Change-Id: I7ffa3812a3adca4941867a080a1f30a9404911d5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141893
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2020-03-31 17:53:20 +00:00
Alexander Markov 10a3d9f190 [vm/nnbd] Do not treat late final fields as immutable
Current implementation of late fields represents all tests for sentinel
value as an explicit LoadField and comparison. As a result, IL with
inlined late final field getter may look like

    v23 <- LoadField(v2 . lateFinalField {final}) T{int?}
    Branch if StrictCompare:4(===, v23, v16) goto (7, 8)
B7[target]:8
    v28 <- StaticCall:14( init:lateFinalField<0> v2) T{int?}
    v30 <- LoadField(v2 . lateFinalField {final}) T{int?}
    Branch if StrictCompare:16(===, v30, v16) goto (10, 11)
B10[target]:20
    goto:26 B12
B11[target]:22
    StaticCall:28( _throwNew@0150898<0> v33)
    goto:30 B12
B12[join]:24 pred(B10, B11)
    StoreInstanceField(v2 . lateFinalField = v28)
    goto:32 B9
B8[target]:10
    goto:34 B9
B9[join]:12 pred(B8, B12) {

The second LoadField and comparison is needed to verify that initializer
hasn't assigned field value before (in a recursive invocation).
The second LoadField is dominated by the first LoadField, so CSE
replaces v30 with v23 if late final fields are treated as immutable
like all other final instance fields. After that comparison is removed
and check for the repetitive assignment is fully eliminated.

So, the fact that value of final late field is mutated should be
exposed in the IL and slots corresponding to late final fields
should not be marked as immutable.

The following tests began passing:
dartkp-strong-linux-release-x64:language/nnbd/syntax/late_modifier_edge_cases_test was fixed (RuntimeError -> Pass)
dartkp-weak-asserts-linux-release-x64:language/nnbd/syntax/late_modifier_edge_cases_test was fixed (RuntimeError -> Pass)

Change-Id: I4191a5cb4c1a583c8b8ad81d1f42f4cb4821e51a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141821
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2020-03-31 15:44:00 +00:00
Teagan Strickland e6e66026d2 [vm] Check the global object pool (if any) when visiting functions.
FFI trampolines are stored in the global object pool and not
reachable either via class or via the closure functions in the
object store.

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

Bug: https://github.com/dart-lang/sdk/issues/41052
Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-debug-x64-try,vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-product-x64-try,vm-kernel-precomp-linux-release-simarm-try,vm-kernel-precomp-linux-release-simarm64-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: I3e1551dba80a2fd418946d7449467317463c2c61
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141882
Commit-Queue: Tess Strickland <sstrickl@google.com>
Reviewed-by: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-03-31 13:04:29 +00:00
asiva fb3ea6a8f2 [Tests] Skip debugger_location_test (see https://github.com/dart-lang/sdk/issues/41219)
Change-Id: I76eabd939c49b5127696021b69675dd467f2c962
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141840
Reviewed-by: Zichang Guo <zichangguo@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
2020-03-31 03:49:49 +00:00
Alexander Markov 5b546c66a8 [vm/nnbd] Fix 'x is Never' in AOT mode
The following tests began passing:

dartkp-strong-linux-release-x64:language/nnbd/is_type_test/null_is_type_in_null_safe_lib_test was fixed (RuntimeError -> Pass)
dartkp-weak-asserts-linux-release-x64:language/nnbd/is_type_test/null_is_type_in_null_safe_lib_test was fixed (RuntimeError -> Pass)

Change-Id: I0601e9b43c92764ca62f1993df3443a6cc0f93bf
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141700
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2020-03-30 21:02:28 +00:00
Jason Simmons e21c435300 [dart:io] Fuchsia version of SocketBase::AvailableDatagram
Fixes https://github.com/flutter/flutter/issues/53590

Change-Id: I6c97dcdc8d9d4ea1679467eb973cc6486bd00184
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141662
Reviewed-by: Zichang Guo <zichangguo@google.com>
Commit-Queue: Jason Simmons <jsimmons@google.com>
2020-03-30 19:14:38 +00:00
Teagan Strickland b55342cb3e [vm/aot] Drop some Function objects not needed at runtime.
In particular, don't serialize a function if its code is used by the
dispatch table, but there's no need for the function object itself
at runtime like dynamic lookup or dynamic invocation forwarders.

However, just because the owning function is not needed at runtime,
it may be used during serialization for things like assembly label
creation. Thus, instead of just clearing out the Code's owner field,
we add a new WeakSerializationReference (WSR) object whose target is
the original contents of the owner field. The WSR allows the
serializer to access the original owner, but also signals to the
serializer that the target should not be serialized in AOT snapshots
unless there are additional strong (non-WSR) references.

If no strong references are found, then the references to the WSR
in the snapshot are replaced with a reference to a WSR that only
contains the class ID of the original target. The serializer creates
only one WSR per class ID.

If strong references are found, then the target is still serialized.
In this case, the WSR is dropped entirely and any reference to it is
replaced with a direct reference to the serialized target. Thus, WSRs
only exist in the precompiled runtime for targets with no strong
references.

Changes on the Flutter gallery in release mode:
arm7: total size -1.10%, isolate size -6.08%
arm8: total size -1.16%, isolate size -6.09%

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

Change-Id: I5b435ca71ef85f50fe3484789087471a91aa4fe2
Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-product-x64-try,vm-kernel-precomp-linux-release-simarm-try,vm-kernel-precomp-linux-release-simarm64-try,vm-kernel-precomp-linux-release-simarm_x64-try,vm-kernel-precomp-mac-release-simarm64-try,vm-kernel-precomp-win-release-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137104
Commit-Queue: Tess Strickland <sstrickl@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Daco Harkes <dacoharkes@google.com>
2020-03-30 18:33:48 +00:00
Ryan Macnak 0ce39a7c10 [vm] Do not allocate when evaluating arguments to StorePointer.
If the first argument is evaluated first, it is an untracked interior pointer that will be used after any GC that occurs while evaluating the second argument.

Bug: https://github.com/dart-lang/sdk/issues/41144
Change-Id: If504da5ea6192d7937bfb9f6857e0169674231e6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141203
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2020-03-28 00:59:31 +00:00
Ryan Macnak e58c3ce1ba [vm] Fix some data races with profiler samples.
- Sample collection must acquire or there is a write-write data race with sample processing/clearing.
- Sample processing must release or there is a write-write data race with another sample processing.

Bug: https://github.com/dart-lang/sdk/issues/41242
Change-Id: I57c1f813fc8b38d31e12dd8d7d3b19d96a9c8912
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141466
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-03-28 00:41:51 +00:00
Ryan Macnak 0d0ca56eaa [vm] Fix memory leak in profiler when some samples are in native functions without a dynamic symbol.
Bug: https://github.com/dart-lang/sdk/issues/41240
Change-Id: I5cb32ea0620b81aae0cb090b1831a5ed9f015687
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141420
Reviewed-by: Zichang Guo <zichangguo@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-03-27 20:55:24 +00:00
Alexander Markov 8445424db4 [vm/nnbd] Fix marking static fields as late
Only mark static fields with initializers as late in opted-in
libraries (static fields without initializers should be still
pre-initialized with null and not sentinel).

Change-Id: I1371757c383ca53cc6cc798a31395f039b8719d8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141341
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2020-03-27 17:08:52 +00:00
Zichang Guo fdf4762c99 Reland "[dart:io] Fix hanging on zero-length datagram"
This is a reland of c326c587c5

The fix is to remove "_availableDatagram" check at the start of receive(). Since receive() can be called without receiver being listening, this check will block the receive().

Original change's description:
> [dart:io] Fix hanging on zero-length datagram
>
> This is observed on Win and Linux.
> Here is a doc to explain the problem: https://docs.google.com/document/d/1ZzyBUMrDHLU6vNryjgSMJfUruOdpmTImtE_s2E0J8IQ/edit?usp=sharing.
>
> Bug: https://github.com/dart-lang/sdk/issues/39910
> Change-Id: Ia961239f45615f14108bcd66043ac33d9a0a4abe
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137425
> Commit-Queue: Zichang Guo <zichangguo@google.com>
> Reviewed-by: Siva Annamalai <asiva@google.com>

Bug: https://github.com/dart-lang/sdk/issues/39910
Change-Id: Iefc0af96ed4e1b433396bb5fe11276e8a04c00d5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140164
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Zichang Guo <zichangguo@google.com>
2020-03-27 15:28:23 +00:00
Kevin Moore 9f1fbd242b DEPS: remove references to pkg:package_resolver
Related to https://github.com/dart-lang/package_resolver/issues/30

Change-Id: Ia97424c4a4d8e6721272e65e1ccd1c40fbcdd3c3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141200
Auto-Submit: Kevin Moore <kevmoo@google.com>
Reviewed-by: Jake Macdonald <jakemac@google.com>
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
Commit-Queue: Lasse R.H. Nielsen <lrn@google.com>
2020-03-26 21:41:28 +00:00
Daco Harkes 445d279ff3 [vm] Add Reachability Fence Instruction
The reachability fence keeps a value alive and reachable.

Required for finalizers: https://github.com/dart-lang/sdk/issues/35770

Design: go/dart-ffi-finalizers (See "Premature Cleanup (Single Object)".)

Change-Id: I9742889f0f8d8b15bbcb5dca47f2a4231899dd59
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,vm-kernel-nnbd-linux-debug-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/136188
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Daco Harkes <dacoharkes@google.com>
2020-03-26 18:30:44 +00:00
Ben Konyi a71449925a [ VM / DartDev ] Disable DartDev for the 2.8 release
Change-Id: I0b2d588599bee57b546c304b61c3edf1bc92f64c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141020
Reviewed-by: Jaime Wren <jwren@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2020-03-26 16:50:23 +00:00
Siva Annamalai ba389f9061 Revert "[VM] - Delete non-nullable-flag() function and adjust code that was"
This reverts commit 1178f96600.

Reason for revert: "Gets an error VM initialization failed: To use --null-safety, please enable --enable-experiment=non-nullable"

Original change's description:
> [VM] - Delete non-nullable-flag() function and adjust code that was
>        using it.
> 
> Change-Id: Ibaf439fbef5e5e183f16240c4ee02b7031bc35c4
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140882
> Commit-Queue: Siva Annamalai <asiva@google.com>
> Reviewed-by: Régis Crelier <regis@google.com>

TBR=kevmoo@google.com,asiva@google.com,regis@google.com

Change-Id: Ia651ec60f8ecfc82a305bcff855a6ca6c2ab9e27
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141026
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
2020-03-26 03:32:56 +00:00
Ryan Macnak bc53ecefae [vm] Don't try to include resume_capabilities, exit_listeners or error_listeners in snapshots.
Change-Id: I50ed4b5e0adbf98f157fec0905dfbb2ce38cd285
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140942
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-03-25 23:12:47 +00:00
asiva 1178f96600 [VM] - Delete non-nullable-flag() function and adjust code that was
using it.

Change-Id: Ibaf439fbef5e5e183f16240c4ee02b7031bc35c4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140882
Commit-Queue: Siva Annamalai <asiva@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
2020-03-25 22:57:46 +00:00
Regis Crelier 33cafef25e [VM/nnbd] Do not check nullability of LHS too early in strong mode (fixes #41160).
Nullability of left hand side in type test was checked too early, i.e. before
handling FutureOr on the right hand side.

The following tests began passing (in strong mode):

standalone/io/addlatexhash_test was fixed (RuntimeError -> Pass)
standalone/io/file_output_stream_test was fixed (RuntimeError -> Pass)
standalone/io/file_stream_test was fixed (RuntimeError -> Pass)
standalone/io/file_system_async_links_test was fixed (RuntimeError -> Pass)
standalone/io/file_system_links_test was fixed (RuntimeError -> Pass)
standalone/io/file_write_only_test was fixed (RuntimeError -> Pass)
standalone/io/pipe_server_test/0 was fixed (RuntimeError -> Pass)
standalone/io/pipe_server_test/1 was fixed (RuntimeError -> Pass)
standalone/io/pipe_server_test/2 was fixed (RuntimeError -> Pass)
standalone/io/pipe_server_test/3 was fixed (RuntimeError -> Pass)
standalone/io/pipe_server_test/4 was fixed (RuntimeError -> Pass)
standalone/io/pipe_server_test/5 was fixed (RuntimeError -> Pass)
standalone/io/stream_pipe_test/0 was fixed (RuntimeError -> Pass)
standalone/io/stream_pipe_test/1 was fixed (RuntimeError -> Pass)
standalone/io/stream_pipe_test/2 was fixed (RuntimeError -> Pass)
standalone/io/stream_pipe_test/3 was fixed (RuntimeError -> Pass)

Change-Id: I855328f101382cf5f1af9119b396aa9d0cb14e40
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140776
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Liam Appelbe <liama@google.com>
2020-03-25 20:26:26 +00:00
Alexander Markov e0b7841d16 [vm/nnbd] Fix CompileType::IsAssignableTo for nullable types in strong mode
Also, tests/corelib/string_operations_with_null_test.dart is fixed for
strong mode: in strong mode TypeError is thrown when null is casted
to a non-nullable type; in weak mode null is silently passed and
ArgumentError or NoSuchMethodError is thrown.

Change-Id: I566a80293ffb03752cc3409e1b79491f0aff6888
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140779
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2020-03-25 17:32:02 +00:00
Daco Harkes 55659b0372 [vm] Make our AOT pipeline work independent of the FLAG_precompiled_mode
Closes: https://github.com/dart-lang/sdk/issues/36521

Change-Id: I8f56d7bc9f3bfc7f4a6f0dcbee66f99838dde3cb
Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-debug-x64-try,vm-kernel-linux-debug-x64-try,vm-kernel-linux-release-simarm-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/136622
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Daco Harkes <dacoharkes@google.com>
2020-03-25 11:58:20 +00:00
Zichang Guo cd162ea78e fix Unix domain socket test failure
unix_domain_sockets_ is not initialized.
Fuzzing test fail the assertion when passing a null.

Bug: https://github.com/dart-lang/sdk/issues/41141
Change-Id: Ib50d31f4b63fbc253ba3c720d4c8d54483a24f88
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140644
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Zichang Guo <zichangguo@google.com>
2020-03-25 05:01:10 +00:00
Lasse R.H. Nielsen 8760283247 New implementation of runZoned.
A combination of `runZoned` and `runZonedGuarded` where only the latter allows an `onError` parameter,
and only that has a nullable return type.

Retains the `onError` parameter on `runZoned` for now because it's too breaking to remove it until packages have been migrated off of it.
It will be removed in a follow-up CL.

Change-Id: If0e86c8d14e13fa089c66f4af975aeacb2616cf6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137302
Reviewed-by: Jake Macdonald <jakemac@google.com>
Reviewed-by: Nate Bosch <nbosch@google.com>
2020-03-25 00:24:33 +00:00
Alexander Markov 8c4909aa8f [vm/nnbd] Mark static fields in opted-in libraries as late
According to the NNBD feature specification, "a toplevel or static
variable with an initializer is evaluated as if it was marked late".
This change actually marks all static fields in opted-in libraries
as late, in order to make sure that the rest of the VM handles
such fields uniformly as late.

Without this change implicit getters for such fields were generated
as late, but type propagation didn't treat these fields as nullable,
so field initialization checks were removed if field has a non-nullable
type.

Change-Id: I95bc096fb1d304b112369428dbb29d346964383f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140767
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
Reviewed-by: Liam Appelbe <liama@google.com>
2020-03-24 22:22:57 +00:00
Alexander Markov fa54a92970 [vm/nnbd] NNBD fixes for bytecode
* Take nullability of type parameters into account.
* Handle CheckNull instruction with null selector name.

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

Change-Id: I0ff4c2790ea63e8f23ead6c9f479b8806045f012
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140800
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2020-03-24 21:50:57 +00:00
Ryan Macnak 678ce14ba5 [vm] Remove data race initializing snapshot BSS.
The snapshot BSS may be initialized by multiple threads if multiple isolates run the same snapshot. The race is harmless because the initialization is idempotent, but use a CAS anyway to satisfy TSAN. Compare similar idempotent initialization in SharedClassTable.

Bug: https://github.com/dart-lang/sdk/issues/39611
Change-Id: If6e15de3c8b71bf3eb61f358dff9cddbe2830ae6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140705
Reviewed-by: Daco Harkes <dacoharkes@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-03-24 16:58:25 +00:00
Ryan Macnak 1d3a6f8be4 [vm] Delay registering an isolate until its main port has been setup.
Fixes a data race detected by TSAN between initializing the port and reading the port in RegisterIsolatesVisitor. A similar race would also exist with the VM service's getVM RPC.

Bug: https://github.com/dart-lang/sdk/issues/39611
Change-Id: I609bcdf4cca541f79032bff3f9bb4c1138527449
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140706
Reviewed-by: Alexander Aprelev <aam@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-03-24 16:15:19 +00:00
Regis Crelier 0bc8474383 [VM/compiler] Cleanup ABIs for instantiation and type testing code and stubs.
Change-Id: Ifc211c98804fcaff5b7788f6823ea631d2867974
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140441
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
2020-03-24 15:54:39 +00:00
Erik Ernst e3af7e724f Update usage of int/String fromEnvironment
Breaking change 40678 requires the constructors int.fromEnvironment and
String.fromEnvironment to get new default values for the named
parameter `defaultValue`. This CL changes usages of these constructors
such that they do not depend on the default value, such that it
becomes a non-breaking change for code in the SDK repo to perform the
change in sdk and in sdk_nnbd.

Change-Id: I82af0e1f92d6cd3618b65c0c50d754ae8c39eb0a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140284
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Leaf Petersen <leafp@google.com>
Commit-Queue: Erik Ernst <eernst@google.com>
2020-03-24 11:19:14 +00:00
Teagan Strickland 46b1f9dbf8 [gardening] Fix vm/dart/v8_snapshot_profile_writer test in Product mode.
Change-Id: Ic911950fb54bcc3a2116960b90012f1e50be04a8
Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-product-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140653
Commit-Queue: Teagan Strickland <sstrickl@google.com>
Reviewed-by: Clement Skau <cskau@google.com>
2020-03-24 10:07:10 +00:00
Johnni Winther 62f84880ef [cfe] Report error on missing return from non-nullable function
Closes #40520
Closes #40948
Closes #40425

Change-Id: I0aa3cfa51b410c90dd0bea963846eeb6b2e73efb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140540
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2020-03-24 08:21:36 +00:00
Ryan Macnak b5d657c3f0 [vm] Fix memory leaks during ELF generation.
Change-Id: I8c7d5506a91a4e2190951e083438fee652b736ed
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140371
Reviewed-by: Teagan Strickland <sstrickl@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-03-24 01:09:35 +00:00
Teagan Strickland 48ed5e5b0e [vm/aot] Fix disassembler bug in bare instructions mode.
In bare instructions mode, we do not have a per-Code object pool,
but rather a global shared object pool. When generating instructions
that access the object pool, we use the index in the (eventually
created) global object pool.

Recently, when the V8 snapshot profile writer is active, we began
attaching an per-Code object pool so that each object in the global
object pool can be attributed to the Code objects that caused its
inclusion.  This pool only has those objects attributable to this
Code object, and not all objects in the global pool up to the point
of compiling the Code object.

However, the disassembler currently only looks at whether the current
Code object has an object pool when decoding object pool accesses.
This was safe when there were no per-Code object pools in bare
instruction mode, but since the change described above, it attempts
to access the object in the Code-local pool at the same index as the
global pool and crashes.

This change fixes the disassembler so that we only try to decode the
object being accessed in the object pool when in non-bare instructions
mode.

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

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: I96fd61d05c657a5ee1d86565cc39c83ebee587f1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140603
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Teagan Strickland <sstrickl@google.com>
2020-03-23 23:32:35 +00:00
Vyacheslav Egorov 18bdb28ef6 [vm/profiler] On Android use alternative stack for handling SIGPROF.
Bionic implementation of setjmp mangles[1] stack pointer - which means
it is unsafe to handle signals on the thread stack (see b/152210274).

Thread interrupter is constantly sending SIGPROF to the Dart thread -
which means with a small probability it might hit the case when we are
inside setjmp. If SP is mangled it might point to random writable memory
or to non-writable region. In the first case we will get a very obscure
memory corruption, and in the second case kernel would send us SIGSEGV
because it fails to deliver original signal.

This bug is the source of the numerous mysterious crashes reported for Flutter,
looking like this:

  F/libc    (11547): Fatal signal 11 (SIGSEGV), code 128, fault addr 0x0 in tid 11572 (1.ui), pid 11547 (ectivity_change)
  ...
  signal 11 (SIGSEGV), code 128 (SI_KERNEL), fault addr 0x0
  ...
  backtrace:
      #00 pc 00018abc  /system/lib/libc.so (sigsetjmp+120)

Note the following key points: SIGSEGV has code SI_KERNEL (meaning it
was triggered by kernel - rather than by a hardware fault) and the first
and only frame is inside sigsetjmp (unwinding is obviously also broken
because SP is mangled).

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

[1] https://android.googlesource.com/platform/bionic/+/refs/heads/master/libc/arch-x86/bionic/setjmp.S#132

Change-Id: I91afa42dbf6575db0cce8e223368b857a49b39b8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140643
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
2020-03-23 21:49:37 +00:00
Ryan Macnak 13ec6ef5ff [vm] Address TSAN errors in FFI tests.
Bug: https://github.com/dart-lang/sdk/issues/39611
Change-Id: I34556155d1d20ab48af952ddc4fdb6959db960d5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140250
Reviewed-by: Daco Harkes <dacoharkes@google.com>
2020-03-23 21:19:36 +00:00
Jason Simmons c58ad1fadf [dart:io] Fix Unix domain socket headers for Fuchsia
Change-Id: I053b41e29184f5edb3d4f19573ead5124528f12c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140624
Reviewed-by: Zichang Guo <zichangguo@google.com>
Commit-Queue: Jason Simmons <jsimmons@google.com>
2020-03-23 20:35:47 +00:00
Teagan Strickland 34742535d6 [vm] Look up dynamic symbols in DWARF stack traces.
If lookup succeeds, then the DWARF stack frame uses the symbol
name and offset instead of the dynamic library name. The
native_stack_traces package (once updated) can translate these
stack frames into symbolic stack frames even if given a partial
stack trace without the header.

Also, consistently use uword instead of a mix of uintptr_t and uword.

Change-Id: Ida9ba4726a306fb77b141cb9c6ad635a12a320ec
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
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140282
Commit-Queue: Teagan Strickland <sstrickl@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-03-23 10:13:43 +00:00
Alexander Thomas 8350f423ee [vm] Add the channel name to the VM/dart:io version string
Dev and beta version strings will look very look very similar, so adding
the channel name will make it easy for users to see if they are on be,
dev, beta, or stable. This will change both the output of
`dart --version` as well as the value of `Platform.version`.

This also removes the Flutter stable release version hack.

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

Change-Id: Iceb8e84a9cf4d0bfb7659669878e42d0a59febc4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140287
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Alexander Thomas <athom@google.com>
2020-03-23 10:00:03 +00:00
Zichang Guo ed83a28d3e [dart:io] support Unix domain communications
Support Unix domain sockets communication on Linux, MacOS and Android.

Changes:
1. Add a field for InternetAddressType named unix.
2. Constructor of InternetAddress gains one more optional field: type. InternetAddress(String address, {InternetAddressType type});
3. Add another constructor to InternetAddress which taks raw address/path for ip/unix addresses as an argument. InternetAddress.fromRawAddress(Uint8List rawAddress, {InternetAddressType type});

The operation for unix domain sockets communication is basically the same as normal sockets except an InternetAddress with type unix should be passed.

Change-Id: I6a1135bbdd7f4e4fc745ccf8f95dec5272b6839b
Bug: https://github.com/dart-lang/sdk/issues/21403
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/125932
Commit-Queue: Zichang Guo <zichangguo@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2020-03-23 03:51:40 +00:00
Ben Konyi fd37652c92 [ VM / Service ] Remove package:test timeout for VM service tests
Change-Id: I85b2c674c9ac8a7b67d0ae8d37e4ddd57092982b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140482
Reviewed-by: Ben Konyi <bkonyi@google.com>
2020-03-21 18:39:36 +00:00
Ben Konyi f247613737 Reland "[ VM / Service ] Migrated Observatory service tests from package:unittest to package:test and package:expect."
This reverts commit 32ed244f63.

Reason for revert: Hopefully clear up bot failures

Original change's description:
> Revert "Reland "[ VM / Service ] Migrated Observatory service tests from package:unittest to package:test and package:expect.""
> 
> This reverts commit d03b7ea721.
> 
> Reason for revert: Hitting assert in VM (https://logs.chromium.org/logs/dart/buildbucket/cr-buildbucket.appspot.com/8885275470407956944/+/steps/test_results/0/logs/new_test_failures__logs_/0)
> 
> Original change's description:
> > Reland "[ VM / Service ] Migrated Observatory service tests from package:unittest to package:test and package:expect."
> > 
> > This reverts commit 01dc1756c4.
> > 
> > Change-Id: I1c9186947af2368ff48c02a392da9ced85770335
> > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140254
> > Commit-Queue: Ben Konyi <bkonyi@google.com>
> > Reviewed-by: Ryan Macnak <rmacnak@google.com>
> 
> TBR=bkonyi@google.com,rmacnak@google.com
> 
> Change-Id: I640adf8e96672476f46fc1f4580a7231b5cfd8fe
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140379
> Reviewed-by: Ben Konyi <bkonyi@google.com>
> Commit-Queue: Ben Konyi <bkonyi@google.com>

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

Change-Id: I3127f2f39e64e87daa5ae0c02e14cd24cb586f5f
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140480
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2020-03-21 06:28:36 +00:00
Ben Konyi 32ed244f63 Revert "Reland "[ VM / Service ] Migrated Observatory service tests from package:unittest to package:test and package:expect.""
This reverts commit d03b7ea721.

Reason for revert: Hitting assert in VM (https://logs.chromium.org/logs/dart/buildbucket/cr-buildbucket.appspot.com/8885275470407956944/+/steps/test_results/0/logs/new_test_failures__logs_/0)

Original change's description:
> Reland "[ VM / Service ] Migrated Observatory service tests from package:unittest to package:test and package:expect."
> 
> This reverts commit 01dc1756c4.
> 
> Change-Id: I1c9186947af2368ff48c02a392da9ced85770335
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140254
> Commit-Queue: Ben Konyi <bkonyi@google.com>
> Reviewed-by: Ryan Macnak <rmacnak@google.com>

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

Change-Id: I640adf8e96672476f46fc1f4580a7231b5cfd8fe
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140379
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2020-03-21 00:45:50 +00:00
Ben Konyi 94b8759eb1 Revert "[ Service ] Bump package:test timeout to 10 minutes for VM service tests"
This reverts commit 6b1139dc07.

Reason for revert: Reverting parent (https://dart-review.googlesource.com/c/sdk/+/140254)

Original change's description:
> [ Service ] Bump package:test timeout to 10 minutes for VM service tests
> 
> Change-Id: Ic1337aeec40f3fc6f7e781640cf7a1745c2f6d44
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140374
> Reviewed-by: Siva Annamalai <asiva@google.com>

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

Change-Id: If441170655b133ceac82db4a7cb7cd8bf69496d9
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140378
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2020-03-21 00:45:00 +00:00