Commit Graph

21942 Commits

Author SHA1 Message Date
Alexander Markov 9e8e8e5fca [vm,dynamic_modules] Support members which are overridden implictly (transitively) by a dynamic module
Consider the following situation: member M1 is overridden by another
member M2; M2 is overridden in a dynamic module.

Members which can be overridden in a dynamic module (such as M2)
should be specified as 'can-be-overridden' in the dynamic interface.
Members which are overridden implicitly/transitively (such as M1)
are not required to be mentioned in the dynamic interface.
However, when determining possible targets for a call with
interface target M1, compiler should treat it as potentially
overridden in a dynamic module.

This change adds such handling to the VM/AOT. Dynamic interface
annotator now marks members such as M1 with
'dyn-module:can-be-overridden-implicitly' pragma, and
VM/AOT takes both can-be-overridden and can-be-overridden-implicitly
into account.

This change also simplifies handling of implicitly extenable classes
in the VM/AOT - now VM handles both extendable and implicitly-extendable
pragmas (from dynamic interface annotator) instead of recalculating
implicitly extendable classes on its own.

TEST=pkg/vm/test/transformations/dynamic_interface_annotator_test.dart
TEST=dynamic_modules_suite/implicitly_extendable

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

Change-Id: Id4570cc86303f8e45a061d696e9bca0d0b2b4b81
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/403951
Reviewed-by: Slava Egorov <vegorov@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Nate Biggs <natebiggs@google.com>
2025-01-15 08:13:52 -08:00
Tess Strickland 45d5b483da [dartfuzz] Handle more types in minimized literal generation.
Previously, the minimizer only handled a small, handpicked set of types
when replacing expressions with minimized literals of the expression's
type. This CL adds minimal literal generation for any type that has a
known constructor and generalizes handling of lists, sets, and maps.

TEST=dartfuzz

Change-Id: Ifeaacfd4dec1ba8f66f4fee9cf8c7fb74193b0d2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/403861
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Tess Strickland <sstrickl@google.com>
2025-01-14 03:20:44 -08:00
Alexander Markov 048df9d706 [vm] Fix tree-shaking of mixin applications when mixin has a member with entry point pragma
Cloned static members of mixins are not used (dead code) and usually
tree shaken in AOT mode. However, if static member is annotated with
@pragma('vm:entry-point'), its clone in the mixin application is
also retained. If such mixin application is not used, tree shaker
drops its supertypes which removes the link from mixin application to
the original mixin. As a result, gen_snapshot crashes when trying
to access original mixin in order to print qualified name of the member.

The first part of the fix is to avoid cloning static members into
mixin applications, which would allow tree shaker to remove unused
mixin applications entirely. This change also reduces size of
the non-AOT kernel binaries.

However, instance members of mixins are cloned
and they could be annotated with entry point pragmas too.

The second part of the fix is to clear isEliminatedMixin flag
in tree shaker when dropping supertypes.

TEST=pkg/front_end/testcases/general/mixin_with_static_member.dart
TEST=pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter160030.dart

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

Change-Id: I1b36c4a7f64a4530c8b4799ec785f1077ce65de6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/403963
Reviewed-by: Slava Egorov <vegorov@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2025-01-13 07:30:16 -08:00
Vyacheslav Egorov 4bcd8c2b8c [vm/compiler] Prune SSA during construction using liveness
Only insert Phi at JoinEntry and Parameter at CatchBlockEntry if
corresponding variable is alive into the block. This keeps insertion
consistent with environment pruning logic employed by RenameRecursive:
which prunes dead variables out environments when entering the block
based on contents of the live_in set.

Previously we would insert Parameter instructions for dead variables
which lead to an incorrect (unsound) set of catch entry moves
generated by the backend due to an inconsistency between Parameter
insertion and environment pruning logic and the fact that
catch entry moves generator would simply ignore all moves if the
source of the move was an optimized_out (aka constant_dead) marker.

The following situation was possible: if the variable was assigned
inside the try and partially alive inside of it (e.g. we had
blocks where it was alive and blocks where it was not) then we
would end up inserting Parameter for it, but some of the exceptional
edges (corresponding to blocks where the variable was dead) would
carry optimized_out value into that Parameter. However
`CatchEntryMoveFor` would not record these moves leading to
uninitialized garbage arriving on those exceptional edges instead.

Note that Phis were not susceptible to the same issue as Parameters
because regalloc / backend would not treat optimized_out value
specially.

This change converts silent treatment of optimized_out in the
catch entry moves generation into a release assert instead.

Reviewing other uses of constant_dead in the compiler revealed
a bug in canonicalization rule for `o.runtimeType` which
did not take exceptional edges into account. We add a
regression test for that and fix that issue as well.

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

TEST=vm/dart/regress_59822,vm/dart/regress_runtime_type_in_trycatch

Cq-Include-Trybots: luci.dart.try:vm-aot-linux-debug-x64-try,vm-aot-linux-debug-x64c-try,vm-aot-linux-product-x64-try,vm-aot-linux-release-arm64-try,vm-aot-linux-release-simarm_x64-try,vm-aot-linux-release-x64-try
Change-Id: I8dc397cb98d84048a1791b9dd6baa7586a2688c6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/403583
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Slava Egorov <vegorov@google.com>
2025-01-10 00:24:29 -08:00
Derek Xu 337e07fab6 [VM/Service] Use the resident frontend server for hot reload when it's available
TEST=pkg/vm_service/test/reload_sources_with_resident_compiler_test.dart
and pkg/vm_service/test/breakpoint_resolution_after_reloading_with_resident_compiler_test.dart

CoreLibraryReviewExempt: This CL does not include any core library API
changes, only VM Service implementation changes within
sdk/lib/vmservice/.
Change-Id: Ibc99cd37439ddd8aca97fa7e18a5112cbfc3b4cb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/401646
Reviewed-by: Ben Konyi <bkonyi@google.com>
2025-01-08 14:51:12 -08:00
Alexander Markov 3a73f32824 [vm,mirrors] reflectClass: throw ArgumentError for function and record types
TEST=tests/lib/mirrors/reflect_class_test.dart
Fixes https://github.com/dart-lang/sdk/issues/59863

Change-Id: Ic9ab394da9abeb7f793556a4827a496c372576a0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/403620
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2025-01-08 09:25:09 -08:00
Ivan Inozemtsev 735a73943d Reland "[vm] Turn on entry point checking in JIT mode."
This is a reland of commit 982b9fad44

Original change's description:
> [vm] Turn on entry point checking in JIT mode.
>
> Now that Flutter tests that access entry points from native code
> have been annotated[1], we can turn on entry point checking in JIT
> mode.
>
> This CL also removes the A flag category from flag_list.h and the
> AOT_FLAG_MACRO definitions and uses from flags.[cc,h], as they were
> created as a temporary measure until this flag could be unconditionally
> defaulted to true.
>
> [1] See the following PRs:
> * https://github.com/flutter/engine/pull/57158
> * https://github.com/flutter/flutter/pull/160158
> * https://github.com/flutter/flutter/pull/160421
>
> TEST=vm/dart/entrypoints_verification_test vm/cc/IRTest
>      vm/cc/StreamingFlowGraphBuilder vm/cc/STC vm/cc/TTS
>
> Issue: https://github.com/dart-lang/sdk/issues/50649
> Issue: https://github.com/flutter/flutter/issues/118608
>
> Cq-Include-Trybots: luci.dart.try:vm-aot-linux-product-x64-try,vm-aot-linux-debug-x64-try,vm-aot-mac-release-arm64-try,vm-aot-mac-product-arm64-try,vm-aot-dwarf-linux-product-x64-try,vm-linux-debug-x64-try,vm-linux-release-x64-try,vm-appjit-linux-product-x64-try
> Change-Id: Ibe5b21bb74f1a6fb88824b71ff87b9e555216dbf
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/400301
> Reviewed-by: Martin Kustermann <kustermann@google.com>
> Commit-Queue: Tess Strickland <sstrickl@google.com>

TEST=vm/dart/entrypoints_verification_test vm/cc/IRTest
     vm/cc/StreamingFlowGraphBuilder vm/cc/STC vm/cc/TTS

Change-Id: Ibd5f362f908b4aaa68cda870a387c081537bbc16
Cq-Include-Trybots: luci.dart.try:vm-aot-linux-product-x64-try,vm-aot-linux-debug-x64-try,vm-aot-mac-release-arm64-try,vm-aot-mac-product-arm64-try,vm-aot-dwarf-linux-product-x64-try,vm-linux-debug-x64-try,vm-linux-release-x64-try,vm-appjit-linux-product-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/403360
Auto-Submit: Ivan Inozemtsev <iinozemtsev@google.com>
Commit-Queue: Ivan Inozemtsev <iinozemtsev@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2025-01-08 00:26:40 -08:00
Alexander Aprelev 9b9f7c2f1b Roll Clang from 388d7f144880 to 684052173971
Add cosmetic ';' to accommodate change in clang-format.

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/clang-dart-sdk
Please CC dart-engprod@google.com,dart-vm-gardener@grotations.appspotmail.com,dart-vm-team@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Clang: https://bugs.fuchsia.dev/p/fuchsia/issues/list?q=component%3AToolchain
To file a bug in Dart SDK: https://github.com/dart-lang/sdk/issues

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md

TEST=ci

Cq-Include-Trybots: luci.dart.try:dart-sdk-linux-try;luci.dart.try:dart-sdk-mac-try;luci.dart.try:dart-sdk-mac-arm64-try;luci.dart.try:dart-sdk-win-try
Change-Id: I7b74476de9648b3d33a6ad79f14f3d7a09b98ef3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/403060
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Alexander Aprelev <aam@google.com>
Reviewed-by: Derek Xu <derekx@google.com>
2025-01-07 09:21:21 -08:00
Gabriel Terwesten 5c1796f4e0 [vm,ffi] Avoid linking test DLLs to dart.exe
The `ffi_test_functions` shared library needs to access functions from
`dart_api.h` and `dart_native_api.h`, which are only available in
the Dart executable.

UNIX shared libraries can have undefined symbols, which are resolved at
runtime and can be found in the loading executable. Windows DLLs cannot
have undefined symbols, but they can be dynamically linked to an
executable (in this case `dart.exe`). This requires the DLL to be able
to find the executable at runtime.

A better solution is to include implementations for the Dart APIs in the
DLL itself, that use `GetModuleHandle(NULL)` to get a handle to the
executable and `GetProcAddress` to get the address of the function.

This is what `dart_api_win.c` does.

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

TEST=ci

Cq-Include-Trybots: luci.dart.try:vm-win-release-ia32-try,vm-win-debug-x64c-try,vm-win-debug-x64-try,vm-win-debug-arm64-try,vm-msvc-windows-try,vm-aot-win-debug-x64c-try,vm-aot-win-debug-x64-try,vm-aot-win-debug-arm64-try,vm-aot-win-product-x64-try,vm-aot-win-release-x64-try,vm-aot-win-release-arm64-try,pkg-win-release-try,pkg-win-release-arm64-try,dart-sdk-win-try,dart-sdk-win-arm64-try

Change-Id: I7f971a8ce21e03d18ed2967e74998f925c9236b2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/400582
Commit-Queue: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Alexander Thomas <athom@google.com>
2025-01-07 08:15:39 -08:00
Lasse R.H. Nielsen b99b43a657 Tweak some X64 assembler instructions to save bytes.
Changes `xorpd(r,r)` and `xorq(r, r)` to `xorps(r,r)` and `xorl(r, r)`, which saves one (REX prefix) byte and still clears the register. (At least if the register is in the first 8, otherwise a REX byte is needed just to name the register. Still better to let the compiler worry about that than hardwiring a 64-bit `q` or `pd` operation.)

Changes `andq` to `AndImmediate` which recognizes that a 32-bit or smaller immediate only needs an `andl` (again potentially saving a REX prefix).

Simplifies the code for clamping an Uint8Clamped value to have fewer branches. (If we know the value is not in the 0..255 range, two instructions can convert all negative values to zero, and all positive values to a value with the lower 8 bit set: `(~v)>>63`.)

Simplifies the code for "is infinite" to use one less 64-bit immediate (by multiplying by 2 to shift out the sign, rather than masking it out using a 63-bit mask.)




Tested: No new behavior, only optimization. Covered by existing tests.
Change-Id: I94e66c2ff39f0a207649f657e4da1ed43e4e819e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/385741
Commit-Queue: Lasse Nielsen <lrn@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2025-01-07 06:43:29 -08:00
Alexander Aprelev cb93352697 [vm] Cleanup todo - assert isolate_group is available when compiling.
If there is current thread, assert there is isolate_group too.

TEST=ci

Change-Id: Id4bce1091084b707b6b671038ec3377ded6791c6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/402427
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Alexander Aprelev <aam@google.com>
2025-01-02 14:27:39 -08:00
asiva cd66003e13 Fix snapshot sniffing code to give better error messages.
TEST=ci

Change-Id: If5097c74e7e4f85de2ca8cfc2cab3283f8328ae3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/402202
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
2025-01-02 10:16:58 -08:00
Alexander Aprelev ba9f3516fb [gardening] Fix multi-line comment gcc warning.
Fixes https://github.com/dart-lang/sdk/issues/59811
TEST=ci

Change-Id: I12e8b97189b5d4621812030f6360cbb56b61f27f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/402441
Commit-Queue: Alexander Aprelev <aam@google.com>
Reviewed-by: Brian Quinlan <bquinlan@google.com>
2024-12-26 12:28:58 -08:00
Ivan Inozemtsev a7fe1e6f55 Embedder samples tests
TEST=new test for ci

Change-Id: I982583ef21c5907bde1dcbc1c34e57c2c0fae770
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/398902
Reviewed-by: Slava Egorov <vegorov@google.com>
Commit-Queue: Ivan Inozemtsev <iinozemtsev@google.com>
2024-12-24 02:54:52 -08:00
Alexander Markov 99f879839c [vm] Cleanup unused BoolField
TEST=ci

Change-Id: I0dfe936bf9b1bb1600fdb740b2dda4989745ef06
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/402121
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2024-12-20 11:30:51 -08:00
Ben Konyi 7783e61a02 Revert "[dartdev] Use VmInteropHandler for invoking sub commands"
This reverts commit 08252fc9e9.

Reason for revert: https://github.com/dart-lang/sdk/issues/59784

Original change's description:
> [dartdev] Use VmInteropHandler for invoking sub commands
>
> Use VmInteropHandler for invoking sub commands instead of running them
> in an isolate. Running sub commands in an isolate causes an increased footprint.
> Changing this to use VmInteropHandler avoids the additional memory footprint.
>
> Commands that need to use an AOT runtime for execution now exec the AOT
> runtime and run the command.
>
> TEST=ci
>
> Change-Id: If7aed1cab2fec9d9940bd562ad5aa9c4e9a6ac7f
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/398604
> Reviewed-by: Ben Konyi <bkonyi@google.com>
> Reviewed-by: Brian Quinlan <bquinlan@google.com>
> Commit-Queue: Siva Annamalai <asiva@google.com>

Change-Id: I82a997d49a7d52e1fdaa7d75f509603ebe5e51dd
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/401901
Reviewed-by: Siva Annamalai <asiva@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
2024-12-20 11:12:00 -08:00
Ben Konyi 7a5174adcd Revert "Fix Fuchsia build error."
This reverts commit c5c3544b71.

Reason for revert: https://github.com/dart-lang/sdk/issues/59784

Original change's description:
> Fix Fuchsia build error.
>
> TEST=ci
>
> Change-Id: I31c160770bea6ba03fe3ca76545c37ffec94e44e
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/401483
> Commit-Queue: Siva Annamalai <asiva@google.com>
> Reviewed-by: Brian Quinlan <bquinlan@google.com>

Change-Id: I302d407a5063a1989d05605e01da71913a8742e7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/401902
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2024-12-20 10:01:19 -08:00
Derek Xu 26fdfabf14 [VM/Service] Use the resident frontend server for expression evaluation when it's available
TEST=tests added to pkg/vm_service/test

CoreLibraryReviewExempt: This CL does not include any core library API
changes, only VM Service implementation changes within
sdk/lib/vmservice/.
Change-Id: I191bb7f3ec3abf1f42405a43ce72016796bc43f9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/394523
Reviewed-by: Ben Konyi <bkonyi@google.com>
2024-12-20 09:00:17 -08:00
Derek Xu 9a6f6c5a94 [ResidentFrontendServer] Add 'compileExpression' endpoint
TEST=test cases added to
`pkg/frontend_server/test/src/resident_frontend_server_test.dart`

Change-Id: I6ffb810d38fc4b13326cb828785aaf6eb6de90f2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/394764
Reviewed-by: Ben Konyi <bkonyi@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
2024-12-20 09:00:17 -08:00
Alexander Markov ce8a8b29b6 [vm,compiler] Recalculate loops when aligning loop headers
Loop information may be outdated by the time code is generated
(for example, if flow graph is serialized/deserialized).

Recalculate loop information during code generation if it is needed
in order to align loop headers.

TEST=vm/dart/align_loops_verify_alignment_test

Change-Id: I1edd63354cee9940bbd474dc95535b4b74081830
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/401863
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Slava Egorov <vegorov@google.com>
2024-12-20 05:49:02 -08:00
Halil Durmus 466fa5593d [vm/ffi] Add refWithFinalizer methods to StructPointer and UnionPointer
TEST=tests/ffi/extension_methods_test.dart

CoreLibraryReviewExempt: VM only
Closes: https://github.com/dart-lang/sdk/issues/56796
Change-Id: I29af1e6b61b5a07887f00b3a924f1b354ffb0bbf
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/399600
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Daco Harkes <dacoharkes@google.com>
Commit-Queue: Daco Harkes <dacoharkes@google.com>
2024-12-19 14:07:50 -08:00
Alexander Markov d3ecb22396 [vm,compiler] Cleanup UnboxedConstantInstr::constant_address_
TEST=ci

Change-Id: Idfedcef88b1f9c32c32cd1a483300204972e8de6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/401900
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
2024-12-19 11:15:41 -08:00
Alexander Markov 5fd11d360d [vm] Cleanup legacy differences between 'is' and 'as' checks
With sound null safety both 'is' and 'as' type checks use subtyping
without any extra differences.

Replace Instance::IsAssignableTo with IsInstanceOf (which is now
the same as RuntimeTypeIsSubtypeOf).

Remove Instance::NullIsInstanceOf as it is no longer used.

Replace CompileType::IsAssignableTo and IsInstanceOf with IsSubtypeOf.

TEST=ci

Change-Id: I3a071d114c5f86d990255416b244961d506257a3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/401861
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Slava Egorov <vegorov@google.com>
2024-12-19 11:03:59 -08:00
Alexander Markov da257d2766 [vm,compiler] Support SIMD constants in IL serialization
TEST=vm/dart/isolates/fast_object_copy2_test

Change-Id: I934d92f54f9ab51bbdd42edd90588d404bc9be37
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/401920
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2024-12-19 10:41:40 -08:00
Ivan Inozemtsev 3ba5bd0f39 Revert "[vm] Turn on entry point checking in JIT mode."
This reverts commit 982b9fad44.

Reason for revert: b/385114574

Original change's description:
> [vm] Turn on entry point checking in JIT mode.
>
> Now that Flutter tests that access entry points from native code
> have been annotated[1], we can turn on entry point checking in JIT
> mode.
>
> This CL also removes the A flag category from flag_list.h and the
> AOT_FLAG_MACRO definitions and uses from flags.[cc,h], as they were
> created as a temporary measure until this flag could be unconditionally
> defaulted to true.
>
> [1] See the following PRs:
> * https://github.com/flutter/engine/pull/57158
> * https://github.com/flutter/flutter/pull/160158
> * https://github.com/flutter/flutter/pull/160421
>
> TEST=vm/dart/entrypoints_verification_test vm/cc/IRTest
>      vm/cc/StreamingFlowGraphBuilder vm/cc/STC vm/cc/TTS
>
> Issue: https://github.com/dart-lang/sdk/issues/50649
> Issue: https://github.com/flutter/flutter/issues/118608
>
> Cq-Include-Trybots: luci.dart.try:vm-aot-linux-product-x64-try,vm-aot-linux-debug-x64-try,vm-aot-mac-release-arm64-try,vm-aot-mac-product-arm64-try,vm-aot-dwarf-linux-product-x64-try,vm-linux-debug-x64-try,vm-linux-release-x64-try,vm-appjit-linux-product-x64-try
> Change-Id: Ibe5b21bb74f1a6fb88824b71ff87b9e555216dbf
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/400301
> Reviewed-by: Martin Kustermann <kustermann@google.com>
> Commit-Queue: Tess Strickland <sstrickl@google.com>

Issue: https://github.com/dart-lang/sdk/issues/50649
Issue: https://github.com/flutter/flutter/issues/118608
Change-Id: Id403cd0832807e417202e17dac57c2224cab09e7
Cq-Include-Trybots: luci.dart.try:vm-aot-linux-product-x64-try,vm-aot-linux-debug-x64-try,vm-aot-mac-release-arm64-try,vm-aot-mac-product-arm64-try,vm-aot-dwarf-linux-product-x64-try,vm-linux-debug-x64-try,vm-linux-release-x64-try,vm-appjit-linux-product-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/401880
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Ivan Inozemtsev <iinozemtsev@google.com>
2024-12-19 09:06:24 -08:00
Alexander Markov 6abaa310e0 [vm,compiler] Cleanup catch entries from GraphEntry and fix IL serialization
After https://dart-review.googlesource.com/c/sdk/+/356311,
GraphEntryInstr::catch_entries() is no longer needed and can be replaced
with FlowGraph::try_entries().

This change also fixes crash during IL deserialization if flow graph
contains a catch block.

TEST=vm/dart/checked_parameter_assert_assignable_stacktrace_test

Change-Id: Iad398e142bbd00110457e3b121bd446c32a5ac46
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/401860
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
2024-12-19 08:04:08 -08:00
Stephen Adams da70ebe741 Reapply "[vm, compiler] Treat _uninitializedData/Index as effectively const."
This reverts commit 1d797bd2e2.

TEST=ci
Change-Id: I43a87112cb44239330704e5715051b3988832631
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/401141
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Stephen Adams <sra@google.com>
2024-12-18 14:04:01 -08:00
Vyacheslav Egorov f1394aa2db [vm] Fix unwinding through FutureIterable and FutureRecordN wait
Add awaiter-links leading from callbacks attached to
the original Futures to Completer produced by wait.

This requires changing representation of _FutureResult
slightly because we do not support annotating arbitrary
fields as awaiter-links only variables can be annotated

Thus we need to capture onReady callback in a the context of
closures passed to Future.then.

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

TEST=pkg/vm_service/test/pause_on_unhandled_exceptions_future_extensions_test.dart,runtime/tests/vm/dart/awaiter_stacks/async_stacks_test.dart

CoreLibraryReviewExempt: No API or significant implementation changes
Change-Id: I904b441b27c4e06f08b7ea7ba066a2fb03504ce6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/401062
Commit-Queue: Slava Egorov <vegorov@google.com>
Reviewed-by: Lasse Nielsen <lrn@google.com>
2024-12-18 11:39:40 -08:00
Alexander Aprelev 4093bdaf5a [vm] Change try-catch IL representation.
Previously catch blocks were hanging off the function entry blocks being effectively an alternative entry-point into the function. Now catch blocks are hanging off the try-entry blocks.
  Previously all the variables that are used in the catch block and beyond were declared as parameters to catch block. Now only those that have their definitions not dominating catch entry will become parameters (for example, if a variable is assigned in the try-block, it becomes a parameter to catch block).
  During OSR, if OSR target entry point is inside some try-blocks, then all of corresponding try-entry/catch-blocks are pulled up to the OSR entry forming a chain that ends with a jump to the OSR target entry.

TEST=vm/dart/trycatch*, ci
Change-Id: Iae20c6548d5d65c63be6d7a53c1b0d2adac7ac31
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/356311
Commit-Queue: Alexander Aprelev <aam@google.com>
Reviewed-by: Slava Egorov <vegorov@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2024-12-18 09:30:10 -08:00
Alexander Markov 8c1fa6d05b [tfa,aot,dart2wasm] Allow tree-shaking of extension type members independently of their tear-offs
ExtensionTypeMemberDescriptor.memberReference and
ExtensionMemberDescriptor.memberReference are now nullable.

TFA-based tree shaker can now set them to null when extension type
member is not used and removed but corresponding lowered tear-off is
still used and retained.

Front-end never sets them to null and requires non-null memberReferences
when consuming kernel.

TEST=pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter155624.dart
Fixes https://github.com/flutter/flutter/issues/155624

Change-Id: I71f98c02f4659ff72a8c1d7fc6c578e8b8e26d82
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/401382
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Slava Egorov <vegorov@google.com>
Reviewed-by: Srujan Gaddam <srujzs@google.com>
Reviewed-by: Ömer Ağacan <omersa@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2024-12-18 06:10:31 -08:00
Tess Strickland 982b9fad44 [vm] Turn on entry point checking in JIT mode.
Now that Flutter tests that access entry points from native code
have been annotated[1], we can turn on entry point checking in JIT
mode.

This CL also removes the A flag category from flag_list.h and the
AOT_FLAG_MACRO definitions and uses from flags.[cc,h], as they were
created as a temporary measure until this flag could be unconditionally
defaulted to true.

[1] See the following PRs:
* https://github.com/flutter/engine/pull/57158
* https://github.com/flutter/flutter/pull/160158
* https://github.com/flutter/flutter/pull/160421

TEST=vm/dart/entrypoints_verification_test vm/cc/IRTest
     vm/cc/StreamingFlowGraphBuilder vm/cc/STC vm/cc/TTS

Issue: https://github.com/dart-lang/sdk/issues/50649
Issue: https://github.com/flutter/flutter/issues/118608

Cq-Include-Trybots: luci.dart.try:vm-aot-linux-product-x64-try,vm-aot-linux-debug-x64-try,vm-aot-mac-release-arm64-try,vm-aot-mac-product-arm64-try,vm-aot-dwarf-linux-product-x64-try,vm-linux-debug-x64-try,vm-linux-release-x64-try,vm-appjit-linux-product-x64-try
Change-Id: Ibe5b21bb74f1a6fb88824b71ff87b9e555216dbf
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/400301
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Tess Strickland <sstrickl@google.com>
2024-12-18 03:42:55 -08:00
asiva c5c3544b71 Fix Fuchsia build error.
TEST=ci

Change-Id: I31c160770bea6ba03fe3ca76545c37ffec94e44e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/401483
Commit-Queue: Siva Annamalai <asiva@google.com>
Reviewed-by: Brian Quinlan <bquinlan@google.com>
2024-12-17 17:20:00 -08:00
asiva 08252fc9e9 [dartdev] Use VmInteropHandler for invoking sub commands
Use VmInteropHandler for invoking sub commands instead of running them
in an isolate. Running sub commands in an isolate causes an increased footprint.
Changing this to use VmInteropHandler avoids the additional memory footprint.

Commands that need to use an AOT runtime for execution now exec the AOT
runtime and run the command.

TEST=ci

Change-Id: If7aed1cab2fec9d9940bd562ad5aa9c4e9a6ac7f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/398604
Reviewed-by: Ben Konyi <bkonyi@google.com>
Reviewed-by: Brian Quinlan <bquinlan@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
2024-12-17 16:00:02 -08:00
Alexander Aprelev e3e7ca846a [gardening] Fix service/uri_mappings_lookup_test.
This is a follow-up to https://dart.googlesource.com/sdk/+/d261ded4c72a2d29c3fb03d156aa15d55890bfe8

BUG=https://github.com/dart-lang/sdk/issues/59749
TEST=ci

Change-Id: I3b03e2a7656337d9e60439e635e05d1414848f97
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/401562
Commit-Queue: Alexander Aprelev <aam@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2024-12-17 14:58:38 -08:00
Alexander Aprelev 0a5a8f17af [vm] Remove BaseIsolate as it serves no purposes anymore.
It was created to improve StackResource construction/destruction https://chromiumcodereview.appspot.com//10008030, but then StackResource constructor was refactored away from using BaseIsolate.

TEST=ci

Change-Id: Ie2e1ac1d04210032f33cbfd6c8e0827ac745e0b3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/401540
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Alexander Aprelev <aam@google.com>
2024-12-17 13:30:50 -08:00
Derek Xu 652794d16d [VM/Debugger] Mark the = tokens within assignment statements as locations where breakpoints can be set
TEST=pkg/vm_service/test/break_on_equals_signs_of_assignments_test.dart

Fixes: https://github.com/dart-lang/sdk/issues/56932
Change-Id: Id5ed23c645b614586e4bf769dbbea9704035746b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/398680
Commit-Queue: Derek Xu <derekx@google.com>
Reviewed-by: Ben Konyi <bkonyi@google.com>
2024-12-16 08:14:21 -08:00
Robert Nystrom 96d18bae05 Reformat tests/language/assign/.
Change-Id: I3be46d802ac851b4fca7ddf4100b04f8d4a38f9d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/399880
Reviewed-by: Alexander Aprelev <aam@google.com>
Auto-Submit: Bob Nystrom <rnystrom@google.com>
Commit-Queue: Bob Nystrom <rnystrom@google.com>
2024-12-13 10:52:25 -08:00
Tess Strickland 9098b79160 [vm] Verify entry point annotations in Dart_GetStaticMethodClosure.
Methods that are accessed via Dart_GetStaticMethodClosure should
be annotated as a getter entry point, so now the runtime verifies that.

See the discussion on https://github.com/flutter/engine/pull/57158
for additional context.

TEST=vm/cc/DartAPI_GetStaticMethodClosure

Cq-Include-Trybots: luci.dart.try:vm-aot-linux-product-x64-try,vm-aot-linux-debug-x64-try,vm-aot-mac-release-arm64-try,vm-aot-mac-product-arm64-try,vm-aot-dwarf-linux-product-x64-try,vm-linux-debug-x64-try,vm-linux-release-x64-try,vm-appjit-linux-product-x64-try
Change-Id: I4b65ed4332dfabe662a364e7cde0ef0596beee54
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/400583
Commit-Queue: Tess Strickland <sstrickl@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2024-12-13 08:32:21 -08:00
Alexander Markov d76f568f0e [vm,dynamic_modules] Fix object allocation/initialization in interpreter in compressed pointers mode
Fix initialization of a newly allocated Closure object when compressed
pointers are used.

Also, fix how instance size is calculated when allocating an object with
instance type arguments.

Fixes b/383719624.
TEST=tools/test.py -n vm-aot-dyn-linux-debug-x64c language corelib

Change-Id: I4bf848ac9b9c9c76d069d1861683cb6dc626ceb9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/400400
Commit-Queue: Slava Egorov <vegorov@google.com>
Auto-Submit: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Slava Egorov <vegorov@google.com>
2024-12-13 06:29:44 -08:00
Jens Johansen 2b5b3163e6 [status_file] Status file linting should not check for non-existing files when given input on stdin
Given input on stdin it has no path to resolve the relative paths that
exists in a status file from. It will thus complain about almost all
lines which is not ideal.
This CL changes it so it doesn't check for it when given data on stdin.
This also means that - because there are no old errors on that account -
if there are such errors now you will be forced to fix it.
The current errors in the status files I could find have also been
fixed.

This should for instance have flaggen when I in
https://dart-review.googlesource.com/c/sdk/+/400320 updated the
pkg.status file but forgot to actually rename the underlying file
(as fixed in https://dart-review.googlesource.com/c/sdk/+/400560).
Technically I suppose it _did_ flag it, but there were also hundreds of
lines of false positives caused by the old status file been given at
stdin to check if there were existing errors - which there then was, thus not forcing me to do anything.

Logical follow-up to https://dart-review.googlesource.com/c/sdk/+/370886

TEST=ci
Change-Id: Ib3533ede88b6d99a31f8b423c00930857e0ba49f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/400620
Reviewed-by: Alexander Thomas <athom@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
2024-12-13 05:37:29 -08:00
Robert Nystrom b3f839bda6 Remove deleted language tests from VM stress test.
BUG=59713

Change-Id: I977f9001e822d0f4037efde8f505ab04916a8509
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/400500
Commit-Queue: Alexander Aprelev <aam@google.com>
Auto-Submit: Bob Nystrom <rnystrom@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
2024-12-12 18:35:31 -08:00
Alexander Aprelev cd7b1342bd [gardening] Cleanup stress test list.
Follow-up to https://github.com/dart-lang/sdk/commit/1d684cdfb0277ee2848571645bc72cf7cc0843a4 which deleted the test.

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

Change-Id: I11ddaacf75af2234e6228f80f569b47d3f3b9490
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/400360
Commit-Queue: Alexander Aprelev <aam@google.com>
Reviewed-by: Jessy Yameogo <yjessy@google.com>
2024-12-12 08:38:48 -08:00
Alexander Aprelev e4f7f4f6b4 [gardening] Fix stress test list.
Follow-up to https://github.com/dart-lang/sdk/commit/752a9134266e2c874711f83e9b039a1df8f46323 which deleted some tests.

Change-Id: Ic75ac76fddf41b790381a9be1c8a90aa6ec10e9e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/400149
Commit-Queue: Alexander Aprelev <aam@google.com>
Reviewed-by: Liam Appelbe <liama@google.com>
2024-12-11 20:19:09 -08:00
Ryan Macnak 1d797bd2e2 Revert "[vm, compiler] Treat _uninitializedData/Index as effectively const."
This reverts commit 562af5de35.

Reason for revert: regression, loses exact type for initial value?

Original change's description:
> [vm, compiler] Treat _uninitializedData/Index as effectively const.
>
> This avoids static field initialization checks in the default map and set constructors, which in turn avoids write barriers and the frame build.
>
> TEST=ci
> Change-Id: Ie12840ae1799cd97645b2132ad94ec6525126f74
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/398760
> Reviewed-by: Alexander Markov <alexmarkov@google.com>
> Commit-Queue: Ryan Macnak <rmacnak@google.com>

Change-Id: I41af0247277f6456ba9c5dfcdb8da43cebc64cc0
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/400222
Commit-Queue: Siva Annamalai <asiva@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
Auto-Submit: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2024-12-11 17:00:27 -08:00
Ryan Macnak 562af5de35 [vm, compiler] Treat _uninitializedData/Index as effectively const.
This avoids static field initialization checks in the default map and set constructors, which in turn avoids write barriers and the frame build.

TEST=ci
Change-Id: Ie12840ae1799cd97645b2132ad94ec6525126f74
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/398760
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2024-12-11 14:46:58 -08:00
Alexander Markov 4c3ab23046 [vm,compiler] Avoid passing anything except flow graph to code generation
This is a preparation to detach code generation from flow graph
building and optimization passes.

Extra inlining info (inline_id_to_function, inline_id_to_token_pos and
caller_inline_id) is now added to FlowGraph and can be serialized and
deserialized.

ic_data_array is not needed for optimized compilation and is no longer
passed.

A separate CompilerPassState is created for code generation.

TEST=ci (refactoring)

Change-Id: Ib61af47c2ddde1353b9a0fe24995d29d6e85acad
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/399883
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Slava Egorov <vegorov@google.com>
2024-12-11 06:50:40 -08:00
Jens Johansen f9f7b29acd [VM] Mark initializing formal variables as invisible
Fixes https://github.com/dart-lang/sdk/issues/59661

Tested: pkg/vm_service/test/issue_59661.dart and existing tests.
Change-Id: I09f708dabfeb71ae8aa078d73fc23295562a451c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/399900
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Ben Konyi <bkonyi@google.com>
2024-12-11 09:03:40 +00:00
Ryan Macnak 94a0f6b530 [vm] Fix hang during file recorder shutdown due to drain function never running.
TEST=ci, rr chaos mode
Bug: https://github.com/dart-lang/sdk/issues/59620
Change-Id: I806f836dc5e21bb5b7048f49ebda5188e9ce340e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/400002
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2024-12-10 22:28:49 +00:00
Ryan Macnak 487c595758 [vm] Handle non-Smi lengths during heap snapshot writing.
This applies to List/Map/Set, which have logical lengths that are initialized by Dart constructors. It does not apply to Array/String/TypedData, which have physical lengths that must always be initialized before the next safepoint.

TEST=ci
Bug: https://github.com/dart-lang/sdk/issues/55689
Change-Id: If132405249e4e49920b0f4f63f85ebeb49e23671
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/400020
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2024-12-10 21:48:58 +00:00
Jens Johansen 66d8d8d6b3 [kernel/CFE] Mark when a VariableDeclaration is a super initializing formal
Tested: Existing tests.
Change-Id: I3d5ccba75c346c7e0cf743b3c2d151428a6bca80
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/399662
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
2024-12-10 13:59:10 +00:00