From a29cd031d33bb020fae87a38405ffc16eebbf2b2 Mon Sep 17 00:00:00 2001 From: Paul Berry Date: Tue, 13 Dec 2022 14:13:18 +0000 Subject: [PATCH] Analyzer: fix dead code detection in top level declarations. Fixes #49701. Bug: https://github.com/dart-lang/sdk/issues/49701 Change-Id: I77fa7faf1dbfcda04a73eedcf0614c2f852b1dac Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275041 Reviewed-by: Konstantin Shcheglov Commit-Queue: Paul Berry --- .../variable_declaration_resolver.dart | 1 + .../test/src/diagnostics/dead_code_test.dart | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/pkg/analyzer/lib/src/dart/resolver/variable_declaration_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/variable_declaration_resolver.dart index be50088f3c5..c68e4650475 100644 --- a/pkg/analyzer/lib/src/dart/resolver/variable_declaration_resolver.dart +++ b/pkg/analyzer/lib/src/dart/resolver/variable_declaration_resolver.dart @@ -59,6 +59,7 @@ class VariableDeclarationResolver { if (isTopLevel) { _resolver.flowAnalysis.topLevelDeclaration_exit(); + _resolver.nullSafetyDeadCodeVerifier.flowEnd(node); } else if (element.isLate) { _resolver.flowAnalysis.flow?.lateInitializer_end(); } diff --git a/pkg/analyzer/test/src/diagnostics/dead_code_test.dart b/pkg/analyzer/test/src/diagnostics/dead_code_test.dart index 515e48d9e73..27038aff5b2 100644 --- a/pkg/analyzer/test/src/diagnostics/dead_code_test.dart +++ b/pkg/analyzer/test/src/diagnostics/dead_code_test.dart @@ -101,6 +101,20 @@ void f() { ]); } + test_class_field_initializer_listLiteral() async { + // Based on https://github.com/dart-lang/sdk/issues/49701 + await assertErrorsInCode( + ''' +Never f() { throw ''; } + +class C { + static final x = [1, 2, f(), 4]; +} +''', + isNullSafetyEnabled ? [error(HintCode.DEAD_CODE, 66, 2)] : [], + ); + } + test_deadBlock_conditionalElse() async { await assertErrorsInCode(r''' f() { @@ -939,6 +953,18 @@ void f(int a) { ''', expectedErrors); } + test_topLevelVariable_initializer_listLiteral() async { + // Based on https://github.com/dart-lang/sdk/issues/49701 + await assertErrorsInCode( + ''' +Never f() { throw ''; } + +var x = [1, 2, f(), 4]; +''', + isNullSafetyEnabled ? [error(HintCode.DEAD_CODE, 45, 2)] : [], + ); + } + test_yield() async { await assertErrorsInCode(r''' Iterable f() sync* {