Skip to content

Front end: Implementation of new static analysis for return statements #41800

Closed
@eernstg

Description

@eernstg

The null-safety specification updates in dart-lang/language#941 and dart-lang/language#948 have been unfolded as part of the migration of tests/language/invalid_returns. This issue is concerned with updating the CFE correspondingly.

The following tests have a missing compile-time error:

language/invalid_returns/async_invalid_return_00_test
language/invalid_returns/async_invalid_return_01_test
language/invalid_returns/async_invalid_return_02_test
language/invalid_returns/async_invalid_return_03_test
language/invalid_returns/async_invalid_return_04_test
language/invalid_returns/async_invalid_return_05_test
language/invalid_returns/async_invalid_return_08_test
language/invalid_returns/async_invalid_return_11_test
language/invalid_returns/async_invalid_return_14_test
language/invalid_returns/async_invalid_return_17_test
language/invalid_returns/async_invalid_return_20_test
language/invalid_returns/async_invalid_return_23_test
language/invalid_returns/async_invalid_return_24_test
language/invalid_returns/async_invalid_return_25_test
language/invalid_returns/async_invalid_return_32_test
language/invalid_returns/async_invalid_return_33_test
language/invalid_returns/async_invalid_return_34_test
language/invalid_returns/async_invalid_return_35_test
language/invalid_returns/async_invalid_return_36_test
language/invalid_returns/async_invalid_return_37_test
language/invalid_returns/async_invalid_return_41_test
language/invalid_returns/async_invalid_return_45_test
language/invalid_returns/async_invalid_return_47_test
language/invalid_returns/async_invalid_return_52_test
language/invalid_returns/async_invalid_return_53_test
language/invalid_returns/async_invalid_return_54_test
language/invalid_returns/async_invalid_return_55_test
language/invalid_returns/async_invalid_return_56_test
language/invalid_returns/async_invalid_return_57_test
language/invalid_returns/async_invalid_return_58_test
language/invalid_returns/async_invalid_return_59_test
language/invalid_returns/sync_invalid_return_00_test
language/invalid_returns/sync_invalid_return_01_test
language/invalid_returns/sync_invalid_return_02_test
language/invalid_returns/sync_invalid_return_03_test
language/invalid_returns/sync_invalid_return_04_test
language/invalid_returns/sync_invalid_return_05_test

The main reasons for the above is that the rules about return; are now more strict, and a void expression can no longer be returned in an async function with return type Future<Null> (and several similar types).

The following test incurs some compile-time errors that shouldn't be there:

language/invalid_returns/async_valid_returns_test

The reason for this is that the old rules required Future<flatten(S)> to be assignable to the return type where S is the type of the returned expression, and the new rules require S to be assignable to the future value type of the function, or flatten(S) to be a subtype thereof.

Metadata

Metadata

Assignees

No one assigned

    Labels

    NNBDIssues related to NNBD Releaselegacy-area-front-endLegacy: Use area-dart-model instead.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions