Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

The analyzer encounters an unhandled exception during constant verification in a switch statement #56117

Open
eernstg opened this issue Jul 1, 2024 · 1 comment
Labels
analyzer-constants area-analyzer Use area-analyzer for Dart analyzer issues, including the analysis server and code completion. P3 A lower priority bug or feature request type-bug Incorrect behavior (everything from a crash to more subtle misbehavior)

Comments

@eernstg
Copy link
Member

eernstg commented Jul 1, 2024

Consider the following program:

sealed class C<A> {
  const C._();
  factory C(A value) = ConcreteC;
  C<B> Function<B>(C<B> Function(A)) get bar;
}

class ConcreteC<A> extends C<A> {
  final List<A> list;

  ConcreteC(A value) : list = [value], super._();

  @override
  get bar => <B>(C<B> Function(A) f) {
    var e = f(list.first);
    switch (e) {
      case FailedC():
        return e;
      case ConcreteC():
        break;
    }
    return ConcreteC<B>(throw "Whatever");
  };
}

abstract class FailedC extends C<Never> {
  const FailedC() : super._();
}

void main() {}

This program is accepted by the CFE and runs with no errors, but the analyzer encounters an unhandled exception:

Stack trace
Analyzing n020.dart...
An unexpected error was encountered by the Analysis Server.
Please file an issue at https://github.com/dart-lang/sdk/issues/new/choose with the following details:

Internal error: Null check operator used on a null value
#0      TypeParameterReplacer.visitTypeParameterType (package:analyzer/src/generated/exhaustiveness.dart:767:44)
#1      TypeParameterTypeImpl.accept (package:analyzer/src/dart/element/type.dart:1488:20)
#2      ReplacementVisitor.visitTypeArgument (package:analyzer/src/dart/element/replacement_visitor.dart:523:21)
#3      ReplacementVisitor._typeArguments (package:analyzer/src/dart/element/replacement_visitor.dart:570:26)
#4      ReplacementVisitor.visitInterfaceType (package:analyzer/src/dart/element/replacement_visitor.dart:375:28)
#5      InterfaceTypeImpl.accept (package:analyzer/src/dart/element/type.dart:714:20)
#6      TypeParameterReplacer._replaceTypeParameterTypes (package:analyzer/src/generated/exhaustiveness.dart:773:17)
#7      TypeParameterReplacer.replaceTypeVariables (package:analyzer/src/generated/exhaustiveness.dart:778:46)
#8      AnalyzerTypeOperations.overapproximate (package:analyzer/src/generated/exhaustiveness.dart:392:34)
#9      SealedClassStaticType._createSubtypes (package:_fe_analyzer_shared/src/exhaustiveness/types/sealed.dart:94:40)
#10     SealedClassStaticType.getSubtypes (package:_fe_analyzer_shared/src/exhaustiveness/types/sealed.dart:68:21)
#11     _Checker._unmatched (package:_fe_analyzer_shared/src/exhaustiveness/exhaustive.dart:143:31)
#12     reportErrors (package:_fe_analyzer_shared/src/exhaustiveness/exhaustive.dart:48:38)
#13     ConstantVerifier._validateSwitchExhaustiveness (package:analyzer/src/dart/constant/constant_verifier.dart:943:11)
#14     ConstantVerifier.visitSwitchStatement.<anonymous closure> (package:analyzer/src/dart/constant/constant_verifier.dart:462:9)
#15     ConstantVerifier._withConstantPatternValues (package:analyzer/src/dart/constant/constant_verifier.dart:1059:6)
#16     ConstantVerifier.visitSwitchStatement (package:analyzer/src/dart/constant/constant_verifier.dart:459:5)
#17     SwitchStatementImpl.accept (package:analyzer/src/dart/ast/ast.dart:16956:50)
#18     NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:12583:20)
#19     BlockImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:2091:17)
#20     RecursiveAstVisitor.visitBlock (package:analyzer/dart/ast/visitor.dart:894:10)
#21     BlockImpl.accept (package:analyzer/src/dart/ast/ast.dart:2087:50)
#22     BlockFunctionBodyImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:2047:12)
#23     RecursiveAstVisitor.visitBlockFunctionBody (package:analyzer/dart/ast/visitor.dart:900:10)
#24     BlockFunctionBodyImpl.accept (package:analyzer/src/dart/ast/ast.dart:2039:50)
#25     FunctionExpressionImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:8310:11)
#26     RecursiveAstVisitor.visitFunctionExpression (package:analyzer/dart/ast/visitor.dart:1224:10)
#27     ConstantVerifier.visitFunctionExpression (package:analyzer/src/dart/constant/constant_verifier.dart:225:11)
#28     FunctionExpressionImpl.accept (package:analyzer/src/dart/ast/ast.dart:8299:50)
#29     ExpressionFunctionBodyImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:5973:17)
#30     RecursiveAstVisitor.visitExpressionFunctionBody (package:analyzer/dart/ast/visitor.dart:1104:10)
#31     ExpressionFunctionBodyImpl.accept (package:analyzer/src/dart/ast/ast.dart:5965:15)
#32     MethodDeclarationImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:11693:10)
#33     RecursiveAstVisitor.visitMethodDeclaration (package:analyzer/dart/ast/visitor.dart:1422:10)
#34     ConstantVerifier.visitMethodDeclaration (package:analyzer/src/dart/constant/constant_verifier.dart:366:11)
#35     MethodDeclarationImpl.accept (package:analyzer/src/dart/ast/ast.dart:11685:50)
#36     NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:12583:20)
#37     ClassDeclarationImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:2954:13)
#38     RecursiveAstVisitor.visitClassDeclaration (package:analyzer/dart/ast/visitor.dart:948:10)
#39     ClassDeclarationImpl.accept (package:analyzer/src/dart/ast/ast.dart:2944:50)
#40     NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:12583:20)
#41     CompilationUnitImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:3614:21)
#42     RecursiveAstVisitor.visitCompilationUnit (package:analyzer/dart/ast/visitor.dart:972:10)
#43     CompilationUnitImpl.accept (package:analyzer/src/dart/ast/ast.dart:3607:50)
#44     LibraryAnalyzer._computeConstantErrors (package:analyzer/src/dart/analysis/library_analyzer.dart:265:23)
#45     LibraryAnalyzer._computeVerifyErrors (package:analyzer/src/dart/analysis/library_analyzer.dart:415:5)
#46     LibraryAnalyzer._computeDiagnostics (package:analyzer/src/dart/analysis/library_analyzer.dart:292:7)
#47     LibraryAnalyzer.analyze (package:analyzer/src/dart/analysis/library_analyzer.dart:108:5)
#48     AnalysisDriver._analyzeFileImpl.<anonymous closure> (package:analyzer/src/dart/analysis/driver.dart:1394:11)
<asynchronous suspension>
#49     PerformanceLog.runAsync (package:analyzer/src/dart/analysis/performance_logger.dart:50:14)
<asynchronous suspension>
#50     AnalysisDriver._analyzeFile.<anonymous closure> (package:analyzer/src/dart/analysis/driver.dart:1308:9)
<asynchronous suspension>
#51     OperationPerformanceImpl.runAsync (package:analyzer/src/util/performance/operation_performance.dart:174:14)
<asynchronous suspension>
#52     AnalysisDriver._analyzeFile (package:analyzer/src/dart/analysis/driver.dart:1305:5)
<asynchronous suspension>
#53     AnalysisDriver._produceErrors (package:analyzer/src/dart/analysis/driver.dart:2020:5)
<asynchronous suspension>
#54     AnalysisDriver.performWork (package:analyzer/src/dart/analysis/driver.dart:1245:7)
<asynchronous suspension>
#55     AnalysisDriverScheduler._run (package:analyzer/src/dart/analysis/driver.dart:2449:7)
<asynchronous suspension>


null
@eernstg eernstg added area-analyzer Use area-analyzer for Dart analyzer issues, including the analysis server and code completion. type-bug Incorrect behavior (everything from a crash to more subtle misbehavior) labels Jul 1, 2024
@eernstg eernstg changed the title The analyzer encounters an unhandled exception when The analyzer encounters an unhandled exception during constant verification in a switch statement Jul 1, 2024
@bwilkerson
Copy link
Member

@scheglov

@keertip keertip added P3 A lower priority bug or feature request analyzer-constants labels Jul 8, 2024
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
analyzer-constants area-analyzer Use area-analyzer for Dart analyzer issues, including the analysis server and code completion. P3 A lower priority bug or feature request type-bug Incorrect behavior (everything from a crash to more subtle misbehavior)
Projects
None yet
Development

No branches or pull requests

3 participants