dart-lang / sdk

The Dart SDK, including the VM, JS and Wasm compilers, analysis, core libraries, and more.
https://dart.dev
BSD 3-Clause "New" or "Revised" License
10.12k stars 1.57k forks source link

Failures on [tests] Use asyncStart/asyncEnd for two language tests #55865

Open mkustermann opened 4 months ago

mkustermann commented 4 months ago

There are new test failures on [tests] Use asyncStart/asyncEnd for two language tests.

The tests

language/nnbd/static_errors/unchecked_use_of_nullable_test/02 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/03 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/04 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/114 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/115 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/116 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/117 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/118 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/119 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/12 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/122 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/123 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/124 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/125 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/126 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/127 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/128 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/129 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/130 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/131 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/132 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/133 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/134 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/135 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/136 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/137 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/138 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/139 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/14 RuntimeError (expected Pass)
language/nnbd/static_errors/unchecked_use_of_nullable_test/140 RuntimeError (expected Pass)
    and 59 more tests

are failing on configurations

ddc-linux-chrome

it seems to hit

\===========================================================================================================/

--- Command "ddc" (took 39ms):
DART_CONFIGURATION=ReleaseX64 CHROME_PATH=/b/s/w/ir/third_party/browsers/chrome/chrome/google-chrome out/ReleaseX64/dart-sdk/bin/dart out/ReleaseX64/dart-sdk/bin/snapshots/dartdevc.dart.snapshot -Dtest_runner.configuration=ddc-linux-chrome --sound-null-safety -Dtest_runner.configuration=ddc-linux-chrome --ignore-unrecognized-flags --no-summarize -o /b/s/w/ir/out/ReleaseX64/generated_compilations/ddc-linux-chrome/multitest_language_nnbd_static_errors_unchecked_use_of_nullable_test_02/unchecked_use_of_nullable_test_02.js /b/s/w/ir/out/ReleaseX64/generated_tests/language/nnbd/static_errors/unchecked_use_of_nullable_test_02.dart -s /b/s/w/ir/out/ReleaseX64/gen/utils/ddc/async_helper_outline.dill=async_helper -s /b/s/w/ir/out/ReleaseX64/gen/utils/ddc/expect_outline.dill=expect -s /b/s/w/ir/out/ReleaseX64/gen/utils/ddc/js_outline.dill=js -s /b/s/w/ir/out/ReleaseX64/gen/utils/ddc/meta_outline.dill=meta

exit code:
0

--- Command "chrome" (took 467ms):
/b/s/w/ir/tools/sdks/dart-sdk/bin/dart pkg/test_runner/bin/launch_browser.dart chrome http://127.0.0.1:41345/root_build/generated_tests/ddc-linux-chrome/multitest_language_nnbd_static_errors_unchecked_use_of_nullable_test_02/test.html?crossOriginPort=37029

Runtime error:
Error: Assertion failed: org-dartlang-sdk:///lib/async/future_impl.dart:405:12
_mayComplete
is not true
_mayComplete
is not true
    at Object.throw_ [as throw] (http://127.0.0.1:41345/root_build/gen/utils/ddc/stable/sdk/amd/dart_sdk.js:9465:11)
    at Object.assertFailed (http://127.0.0.1:41345/root_build/gen/utils/ddc/stable/sdk/amd/dart_sdk.js:9380:15)
    at [_setPendingComplete] (http://127.0.0.1:41345/root_build/gen/utils/ddc/stable/sdk/amd/dart_sdk.js:36322:39)
    at [_asyncCompleteError] (http://127.0.0.1:41345/root_build/gen/utils/ddc/stable/sdk/amd/dart_sdk.js:36570:34)
    at Object._asyncCompleteWithErrorCallback (http://127.0.0.1:41345/root_build/gen/utils/ddc/stable/sdk/amd/dart_sdk.js:40906:32)
    at runBody (http://127.0.0.1:41345/root_build/gen/utils/ddc/stable/sdk/amd/dart_sdk.js:40834:19)
    at Object._async [as async] (http://127.0.0.1:41345/root_build/gen/utils/ddc/stable/sdk/amd/dart_sdk.js:40842:7)
    at Object.main (http://127.0.0.1:41345/root_dart/out/ReleaseX64/generated_compilations/ddc-linux-chrome/multitest_language_nnbd_static_errors_unchecked_use_of_nullable_test_02/unchecked_use_of_nullable_test_02.js:29:18)
    at testMainWrapper (http://127.0.0.1:41345/root_build/generated_tests/ddc-linux-chrome/multitest_language_nnbd_static_errors_unchecked_use_of_nullable_test_02/test.html?crossOriginPort=37029:90:151)

Deobfuscated error and stack:
Error: Assertion failed: org-dartlang-sdk:///lib/async/future_impl.dart:405:12
_mayComplete
is not true
_mayComplete
is not true
    at Object.throw_                          ../../../../../../dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 296:3
    at Object.assertFailed                    ../../../../../../dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 29:3
    at [_setPendingComplete]                  ../../../../../../dart-sdk/lib/async/future_impl.dart 405:12
    at [_asyncCompleteError]                  ../../../../../../dart-sdk/lib/async/future_impl.dart 758:5
    at Object._asyncCompleteWithErrorCallback ../../../../../../dart-sdk/lib/async/future.dart 1360:9
    at runBody                                ../../../../../../dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 121:9
    at Object._async                          ../../../../../../dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 127:5
    at Object.main                            ../../../generated_tests/language/nnbd/static_errors/unchecked_use_of_nullable_test_02.dart 8:10
    at testMainWrapper                        out/ReleaseX64/generated_tests/ddc-linux-chrome/multitest_language_nnbd_static_errors_unchecked_use_of_nullable_test_02/test.html 90:151
mkustermann commented 4 months ago

/cc @sigmundch for routing to ddc team

lrhn commented 4 months ago

The code is calling _asyncCompleteWithErrorCallback, which (after a likely no-op check) calls _asyncCompleteError, as the stack trace shows.

The _asyncCompleteError function starts with an assert(!_isComplete);, which the code passes, so the _Future doesn't have a value/error yet. It may be either pending complete, chained or just incomplete. It should be incomplete, but that's not what's being tested, so that is suspicious by itself.

It then calls _setPendingComplete which tries to set the future to be pending completion (not completed yet, because it's asyncComplete, but can't be completed with something else any more, just waiting impatiently to complete with the already provided error.) That function starts with assert(_mayComplete);, which fails. That check only accepts being incomplete.

Which means the future state is either chained (has been completed with another future, waiting for that) or pending complete (has been asynchronously completed, haven't gotten around to actually do it yet), at a point where the async code tries to complete the same future again.

It's not completely impossible that this is related to a bugfix I made recently, or at least which asserts are used, because I do call _asyncCompleteError from somewhere that also doesn't check for _mayComplete. I'll give the state transitions a look-over.

(It's an error test, so most of these individual tests should not even compile. The unchecked_use_of_nullable_test_02 one should, though, it's marked as # 02: ok.)

nshahan commented 4 months ago

@lrhn From an in person discussion, DDC always runs with assertions enabled in the test application. Do any of these tests fail on any other platforms if you run them with assertions enabled? That could help us track down if the failures are related to your change.