Skip to content

Finalizer allows null as an detach value of attach method #48390

@sgrekhov

Description

@sgrekhov

The following tests fails on dart2js and dartdevc platforms

final Finalizer finalizer = Finalizer((_) { throw "Should not reach here"; });
Object object = Object();

main() {
  Expect.throws(() {
    finalizer.attach(object, "Finalization token", detach: null);  // fails here
  });

  dynamic d = null;
  Expect.throws(() {
    finalizer.attach(object, "Finalization token", detach: d);
  });
}
/======================================================================================================================================================================\
| dart2js-hostasserts-weak-linux-x64-chrome:co19/LanguageFeatures/FinalizationRegistry/no_ffi/Finalizer/attach_A04_t11 is new and failed (RuntimeError, expected Pass) |
\======================================================================================================================================================================/

--- Command "dart2js" (took 08.000010s):
DART_CONFIGURATION=ReleaseX64 CHROME_PATH=/b/s/w/ir/third_party/browsers/chrome/chrome/google-chrome sdk/bin/dart2js_developer -Dtest_runner.configuration=dart2js-hostasserts-weak-linux-x64-chrome --no-sound-null-safety --test-mode --packages=/b/s/w/ir/.packages /b/s/w/ir/tests/co19/src/LanguageFeatures/FinalizationRegistry/no_ffi/Finalizer/attach_A04_t11.dart --no-sound-null-safety --out=/b/s/w/ir/out/ReleaseX64/generated_compilations/dart2js-hostasserts-weak-linux-x64-chrome/tests_co19_src_LanguageFeatures_FinalizationRegistry_no_ffi_Finalizer_attach_A04_t11/attach_A04_t11.js

exit code:
0

stdout:
Hint: When run on the command-line, the compiled output might require a preamble file located in:
  <sdk>/lib/_internal/js_runtime/lib/preambles.
Compiled 9,559,176 characters Dart to 123,866 characters JavaScript in 8.01 seconds
Dart file tests/co19/src/LanguageFeatures/FinalizationRegistry/no_ffi/Finalizer/attach_A04_t11.dart compiled to JavaScript: out/ReleaseX64/generated_compilations/dart2js-hostasserts-weak-linux-x64-chrome/tests_co19_src_LanguageFeatures_FinalizationRegistry_no_ffi_Finalizer_attach_A04_t11/attach_A04_t11.js

--- Command "chrome" (took 163ms):
/b/s/w/ir/tools/sdks/dart-sdk/bin/dart pkg/test_runner/bin/launch_browser.dart chrome http://127.0.0.1:36235/root_build/generated_tests/dart2js-hostasserts-weak-linux-x64-chrome/tests_co19_src_LanguageFeatures_FinalizationRegistry_no_ffi_Finalizer_attach_A04_t11/test.html?crossOriginPort=46471

Runtime error:
Expect.throws() fails
Expect.throws() fails
    at Object.wrapException (http://127.0.0.1:36235/root_build/generated_compilations/dart2js-hostasserts-weak-linux-x64-chrome/tests_co19_src_LanguageFeatures_FinalizationRegistry_no_ffi_Finalizer_attach_A04_t11/attach_A04_t11.js:342:17)
    at Object._fail (http://127.0.0.1:36235/root_build/generated_compilations/dart2js-hostasserts-weak-linux-x64-chrome/tests_co19_src_LanguageFeatures_FinalizationRegistry_no_ffi_Finalizer_attach_A04_t11/attach_A04_t11.js:2514:15)
    at Object.Expect_throws (http://127.0.0.1:36235/root_build/generated_compilations/dart2js-hostasserts-weak-linux-x64-chrome/tests_co19_src_LanguageFeatures_FinalizationRegistry_no_ffi_Finalizer_attach_A04_t11/attach_A04_t11.js:2527:9)
    at main (http://127.0.0.1:36235/root_build/generated_compilations/dart2js-hostasserts-weak-linux-x64-chrome/tests_co19_src_LanguageFeatures_FinalizationRegistry_no_ffi_Finalizer_attach_A04_t11/attach_A04_t11.js:2503:9)
    at dartMainRunner (http://127.0.0.1:36235/root_dart/pkg/test_runner/lib/src/test_controller.js:315:5)
    at http://127.0.0.1:36235/root_build/generated_compilations/dart2js-hostasserts-weak-linux-x64-chrome/tests_co19_src_LanguageFeatures_FinalizationRegistry_no_ffi_Finalizer_attach_A04_t11/attach_A04_t11.js:3324:7
    at http://127.0.0.1:36235/root_build/generated_compilations/dart2js-hostasserts-weak-linux-x64-chrome/tests_co19_src_LanguageFeatures_FinalizationRegistry_no_ffi_Finalizer_attach_A04_t11/attach_A04_t11.js:3309:7
    at dartProgram (http://127.0.0.1:36235/root_build/generated_compilations/dart2js-hostasserts-weak-linux-x64-chrome/tests_co19_src_LanguageFeatures_FinalizationRegistry_no_ffi_Finalizer_attach_A04_t11/attach_A04_t11.js:3320:5)
    at http://127.0.0.1:36235/root_build/generated_compilations/dart2js-hostasserts-weak-linux-x64-chrome/tests_co19_src_LanguageFeatures_FinalizationRegistry_no_ffi_Finalizer_attach_A04_t11/attach_A04_t11.js:3328:3

Deobfuscated error and stack:
Expect.throws() fails
Expect.throws() fails
    at wrapException        org-dartlang-sdk:///lib/_internal/js_runtime/lib/js_helper.dart 1137:37
    at _fail                ../../../../../tests/co19/src/Utils/expect.dart 18:5
    at Expect.throws        ../../../../../tests/co19/src/Utils/expect_common.dart 194:5
    at main                 ../../../../../tests/co19/src/LanguageFeatures/FinalizationRegistry/no_ffi/Finalizer/attach_A04_t11.dart 18:10
    at dartMainRunner       pkg/test_runner/lib/src/test_controller.js 315:5
    at <fn>                 out/ReleaseX64/generated_compilations/dart2js-hostasserts-weak-linux-x64-chrome/tests_co19_src_LanguageFeatures_FinalizationRegistry_no_ffi_Finalizer_attach_A04_t11/attach_A04_t11.js 3324:7
    at <fn>                 out/ReleaseX64/generated_compilations/dart2js-hostasserts-weak-linux-x64-chrome/tests_co19_src_LanguageFeatures_FinalizationRegistry_no_ffi_Finalizer_attach_A04_t11/attach_A04_t11.js 3309:7
    at dartProgram          out/ReleaseX64/generated_compilations/dart2js-hostasserts-weak-linux-x64-chrome/tests_co19_src_LanguageFeatures_FinalizationRegistry_no_ffi_Finalizer_attach_A04_t11/attach_A04_t11.js 3320:5
    at <fn>                 out/ReleaseX64/generated_compilations/dart2js-hostasserts-weak-linux-x64-chrome/tests_co19_src_LanguageFeatures_FinalizationRegistry_no_ffi_Finalizer_attach_A04_t11/attach_A04_t11.js 3328:3


exit code:
0

--- To debug locally, run:
/b/s/w/ir/tools/sdks/dart-sdk/bin/dart /b/s/w/ir/pkg/test_runner/bin/http_server.dart -p 36235 -c 46471 --network 127.0.0.1 --build-directory=/b/s/w/ir/out/ReleaseX64/ --runtime=chrome --packages=/b/s/w/ir/.packages

--- Re-run this test:
python3 tools/test.py -n dart2js-hostasserts-weak-linux-x64-chrome co19/LanguageFeatures/FinalizationRegistry/no_ffi/Finalizer/attach_A04_t11

According to the attach documentation

The value and detach arguments do not count towards those objects being accessible to the program. Both must be objects supported as an Expando key. They may be the same object.

So, null value of detach must be an error

cc @dcharkes

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions