Open
Description
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