Skip to content
New issue

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

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

Already on GitHub? Sign in 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in 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