The previous implementation of SafepointRwLock has an issue (discovered
by Slava, see bug) with the following code pattern:
{
SafepointReadRwLocker locker(...);
return Foo(); // <-- Returns raw ptr.
}
After the return expression has been evaluated to a raw pointer
the destructor might enter safepoint and cause GC, which leaves
the raw pointer unchanged (since it's not in a handle).
This CL refactors the implementation to ensure we don't perform any
state transition in the destructor, therefore eliminate the
possibility of GC moving the object we return.
Issue https://github.com/dart-lang/sdk/issues/44998
TEST=Relying on existing SafepointRwLock.
Change-Id: Ib7a62b36838edd4b39ad67a8c58f048aa05aa144
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/185062
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
G3 has been migrated (go/dart-ffi-1.0-g3-migration), so now we can roll
the package version which has all the deprecated methods removed.
Rolling `package:ffi` forward also means it is no longer using
`sizeOf<T>()` generically. So the problems in the CFE expect files
disappear.
Change-Id: I33c7c06c6b7b34178908b175f08f3fc0f275be41
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/185141
Auto-Submit: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Clement Skau <cskau@google.com>
Commit-Queue: Clement Skau <cskau@google.com>
This reverts commit 9474c2355d.
Reason for revert: Doesn't compile (?)
Original change's description:
> [vm] Replaces fuchsia.deprecatedtimezone
>
> (prior attempt was rolled back as it had a regression which was not
> caught by tests. Tests are fixed now at:
> https://fuchsia-review.googlesource.com/c/fuchsia/+/409840)
>
> The FIDL library fuchsia.deprecatedtimezone is going away. There are
> different and better ways to obtain the same functionality. This change
> removes the dependency on fuchsia.deprecatedtimezone from the Dart SDK.
>
> Adds inspect metrics that allow whitebox testing of the runners. Here's
> a sample `fx iquery` excerpt from a running device, showing both a dart
> and a flutter runner exposing the same OS diagnostic metrics.
>
> Adds support for asynchronous timezone updates, which was missing from
> previous versions of this commit.
>
> ```
> /hub/c/dart_jit_runner.cmx/70981/out/diagnostics:
> /hub/c/dart_jit_runner.cmx/70981/out/diagnostics#os:
> dst_status = 0
> get_profile_status = 0
> timezone_content_status = 0
> tz_data_close_status = 0
> tz_data_status = 0
> /hub/c/flutter_jit_runner.cmx/29567/out/diagnostics:
> /hub/c/flutter_jit_runner.cmx/29567/out/diagnostics#os:
> dst_status = 0
> get_profile_status = 0
> timezone_content_status = 0
> tz_data_close_status = 0
> tz_data_status = 0
> ```
>
> Under nominal operation, all of the above values should be equal to 0.
> Nonzero values indicate an error.
>
> This functionality is guarded by Fuchsia integration tests at
> //src/tests/intl.
>
>
> Tested:
> (compile locally for Fuchsia and deploy)
> fx test //src/tests/intl
>
> See:
> - https://github.com/dart-lang/sdk/issues/42245
> - https://github.com/dart-lang/sdk/issues/39650
>
> Fixes#39650
> TEST=see Tested: above
> Change-Id: Icb72ddd554c263f970e18b9cbbaab7adf43c8710
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/155582
> Auto-Submit: Filip Filmar <fmil@google.com>
> Reviewed-by: Martin Kustermann <kustermann@google.com>
> Commit-Queue: Martin Kustermann <kustermann@google.com>
Change-Id: Ic45c09a49796f8fb8b21cfaa8005db4b57f5eb52
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/185301
Auto-Submit: Filip Filmar <fmil@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
The error number is already reported in the ProcessException,
and the log print might pollute the result of GetLastError().
TEST=N/A
Change-Id: Ia280d02525e688c1891bb1ff3131b1569a35083e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/185203
Commit-Queue: Zach Anderson <zra@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
(prior attempt was rolled back as it had a regression which was not
caught by tests. Tests are fixed now at:
https://fuchsia-review.googlesource.com/c/fuchsia/+/409840)
The FIDL library fuchsia.deprecatedtimezone is going away. There are
different and better ways to obtain the same functionality. This change
removes the dependency on fuchsia.deprecatedtimezone from the Dart SDK.
Adds inspect metrics that allow whitebox testing of the runners. Here's
a sample `fx iquery` excerpt from a running device, showing both a dart
and a flutter runner exposing the same OS diagnostic metrics.
Adds support for asynchronous timezone updates, which was missing from
previous versions of this commit.
```
/hub/c/dart_jit_runner.cmx/70981/out/diagnostics:
/hub/c/dart_jit_runner.cmx/70981/out/diagnostics#os:
dst_status = 0
get_profile_status = 0
timezone_content_status = 0
tz_data_close_status = 0
tz_data_status = 0
/hub/c/flutter_jit_runner.cmx/29567/out/diagnostics:
/hub/c/flutter_jit_runner.cmx/29567/out/diagnostics#os:
dst_status = 0
get_profile_status = 0
timezone_content_status = 0
tz_data_close_status = 0
tz_data_status = 0
```
Under nominal operation, all of the above values should be equal to 0.
Nonzero values indicate an error.
This functionality is guarded by Fuchsia integration tests at
//src/tests/intl.
Tested:
(compile locally for Fuchsia and deploy)
fx test //src/tests/intl
See:
- https://github.com/dart-lang/sdk/issues/42245
- https://github.com/dart-lang/sdk/issues/39650Fixes#39650
TEST=see Tested: above
Change-Id: Icb72ddd554c263f970e18b9cbbaab7adf43c8710
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/155582
Auto-Submit: Filip Filmar <fmil@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
If an operator declaration has both too many parameters, and one or more
optional parameters, just report the former error.
This is better UX, and is closer aligned to what the CFE reports.
Change-Id: I1f30ab9564f4bcdc49c1f3317add6c55cca29597
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/185201
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
Null sources appear to come from files that contain only external
declarations. These sources can simply be ignored in the summation
of the sizes of dart files that make up a module.
Change-Id: I38864c7f4a3e208b19e26d5a887445fdf4622479
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/184901
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Reviewed-by: Mark Zhou <markzipan@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
The MergeVisitor was trying to merge FunctionType.typedefType in order
to merge function types, thus preventing nnbd top merge of two
compatible types that were just introduced through different typedefs
or function type syntax.
Change-Id: Icea75598168c86ed33314db22ebeec3e666c3675
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/184785
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
package:vm "clones" an old incremental compiler when creating a new one
for a new isolate. It does that by calling .computeDelta on the first
available compiler. If that compiler is already compiling, though, things
can go bad.
The risk of that happening was made bigger by awaiting in the standard
filesystem instead of using the sync filesystem operations, but it can
happen either way.
If it has any practial importance (outside of tests) is an open quesiton
but this should nevertheless fix the issue by only letting the
incremental compiler allow one compile at the time (creating an implicit
queue when more is tried).
TEST=Existing test suites + added test.
Change-Id: I694e360aa4bce604db41908730c66ef3b96e6d8b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/184788
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
Devon noticed the other day that this was missing. I was curious so I
commented out all of the non-Dart file patterns and ran the tests. There
were no failures. There were failures when I also commented out the
file pattern for Dart files, so that much is being used. My guess is
that it would be better to remove the seemingly unused patterns, but
then I have to ask whether we shouldn't just remove this field and
replace uses by a check that the name ends in '.dart'. Let me know what
you think.
Change-Id: Icda44a6fa532989f86cdb52acb3bd0f7a5b28e20
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/184900
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
When reporting that a null check is needed due to a lack of type
promotion, and the thing that was not promoted was a reference to a
field or property, the CFE and analyzer now report "why not promoted"
using a context message that points to the definition of the field or
getter. (Previously the CFE reported a context message with no
location, and the analyzer didn't report "why not promoted").
Bug: https://github.com/dart-lang/sdk/issues/44898
Change-Id: If1841727b8b60dd87c43f239e6a06b98f363801f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/184522
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
This assertion fails when compiling the SDK because the types
dynamic, Null, and void all have `Nullability.nullable`.
They are safe to allow through unchanged because each has their own
visitor that avoids the nullability wrapper at runtime.
Change-Id: I0ce345ce11dddb345eab3708804cbde6a540fdd1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/184880
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
This change adds two new RPCs and various new properties:
- getAllocationTraces
- setTraceClassAllocation
- classId and identityHashCode properties in CpuSample
- traceAllocations property in Class
TEST=get_allocation_traces_test.dart
package:vm_service has been regenerated for 3.43 of the service protocol
and is ready for a 6.1.0 release.
Change-Id: Ia8ed055423798d7d17fe9f5fd74efb4239b875fc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/182666
Commit-Queue: Ben Konyi <bkonyi@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
This has little negative impact on the completion metrics and some
positive impact in several places. The impact is fairly small overall,
but still worth having in my opinion. The biggest improvement is at the
beginning of a statement. The overall changes in relevance and relevance
by element kind (lower is better) are:
shipping | keyword type delta
all completions 4.013 | 3.930 -0.083
successful completions 3.995 | 3.912 -0.083
class 28.359 | 28.325 -0.034
constructor 4.739 | 4.739 0.000
enum 12.928 | 12.928 0.000
instance member 3.273 | 3.153 -0.120
keyword dynamic 136.713 | 136.223 -0.490
keyword void 239.200 | 227.453 -11.747
local function 161.336 | 161.340 0.004
local variable 1.632 | 1.616 -0.015
parameter 4.406 | 4.383 -0.023
prefix 363.871 | 368.868 4.997
static member 6.012 | 5.984 -0.028
top level member 12.443 | 12.443 0.000
type parameter 252.785 | 254.135 1.350
Change-Id: Ia449feb716bfd6150f0204885e05fc0e812f1448
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/184861
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Since loading kernel will affect all isolates within a group, there
should be nothing isolate-specific inside the kernel loader. To ensure
we don't have (or introduce) any accidental uses, we add a
NoActiveIsolateScope to the main parts of kernel loading.
Only loading of native extensions - done by the kernel loader -
currently requires an active isolate. The reason for this is that
loading native extensions happen by calling out to embedder, which calls
back into the VM using the our embedding API (which currently requires
an active isolate)
Issue https://github.com/dart-lang/sdk/issues/36097
TEST=Refactoring of existing implementation.
Change-Id: I96e64dbfe7148b76b8fa006fe5dbde8c1f904504
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/184269
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
Since the flag is now enabled by default, there should be no mention of it.
There are still some uses in front_end/testcases that are not just removable
(it also uses `no-non-nullable`). There migth be more uses that are not
as easily found as grepping for `--enable-experiment
Removes two VM tests where fixing them meant they were just duplicating
the corresponding non *_2/ tests.
Fixes#44941
TEST= Large number of tests chaged.=(no-)?non-nullable`.
Change-Id: Ief755981ccde9a5482fcdf408c2929c74433a710
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/183688
Commit-Queue: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Nate Bosch <nbosch@google.com>