Skip to content

Crash: dynamic is not a subtype of dart.core::Iterable in :result #34463

@alexmarkov

Description

@alexmarkov
import "dart:async";

class Foo {
  Future<List<Bar>> get bars => null;

  Future<int> get boom async => (await bars)
      .map((Bar bar) => bar.value)
      .reduce((int a, int b) => a + b);
}

class Bar {
  int value;
}

main() {}
Crash when compiling null,
at character offset null:
dynamic is not a subtype of dart.core::Iterable in :result
#0      TypeEnvironment.typeError (package:kernel/type_environment.dart:103:7)
#1      Expression.getStaticTypeAsInstanceOf (package:kernel/ast.dart:2135:11)
#2      MethodInvocation.getStaticType (package:kernel/ast.dart:2744:35)
#3      AnnotateWithStaticTypes.visitMethodInvocation (package:vm/transformations/call_site_annotator.dart:76:39)
#4      MethodInvocation.accept (package:kernel/ast.dart:2773:36)
#5      VariableSet.visitChildren (package:kernel/ast.dart:2204:12)
#6      RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#7      Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#8      TreeVisitor.defaultExpression (package:kernel/visitor.dart:135:43)
#9      TreeVisitor.visitVariableSet (package:kernel/visitor.dart:139:43)
#10     VariableSet.accept (package:kernel/ast.dart:2200:36)
#11     ExpressionStatement.visitChildren (package:kernel/ast.dart:3604:17)
#12     RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#13     Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#14     TreeVisitor.defaultStatement (package:kernel/visitor.dart:186:41)
#15     TreeVisitor.visitExpressionStatement (package:kernel/visitor.dart:188:7)
#16     ExpressionStatement.accept (package:kernel/ast.dart:3600:35)
#17     visitList (package:kernel/ast.dart:5539:14)
#18     Block.visitChildren (package:kernel/ast.dart:3632:5)
#19     RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#20     Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#21     TreeVisitor.defaultStatement (package:kernel/visitor.dart:186:41)
#22     TreeVisitor.visitBlock (package:kernel/visitor.dart:189:31)
#23     Block.accept (package:kernel/ast.dart:3628:35)
#24     LabeledStatement.visitChildren (package:kernel/ast.dart:3735:11)
#25     RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#26     Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#27     TreeVisitor.defaultStatement (package:kernel/visitor.dart:186:41)
#28     TreeVisitor.visitLabeledStatement (package:kernel/visitor.dart:193:53)
#29     LabeledStatement.accept (package:kernel/ast.dart:3731:35)
#30     visitList (package:kernel/ast.dart:5539:14)
#31     Block.visitChildren (package:kernel/ast.dart:3632:5)
#32     RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#33     Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#34     TreeVisitor.defaultStatement (package:kernel/visitor.dart:186:41)
#35     TreeVisitor.visitBlock (package:kernel/visitor.dart:189:31)
#36     Block.accept (package:kernel/ast.dart:3628:35)
#37     TryCatch.visitChildren (package:kernel/ast.dart:4078:11)
#38     RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#39     Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#40     TreeVisitor.defaultStatement (package:kernel/visitor.dart:186:41)
#41     TreeVisitor.visitTryCatch (package:kernel/visitor.dart:204:37)
#42     TryCatch.accept (package:kernel/ast.dart:4074:35)
#43     FunctionNode.visitChildren (package:kernel/ast.dart:2033:11)
#44     RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#45     Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#46     TreeVisitor.visitFunctionNode (package:kernel/visitor.dart:242:45)
#47     FunctionNode.accept (package:kernel/ast.dart:2026:30)
#48     FunctionDeclaration.visitChildren (package:kernel/ast.dart:4374:15)
#49     RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#50     Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#51     TreeVisitor.defaultStatement (package:kernel/visitor.dart:186:41)
#52     TreeVisitor.visitFunctionDeclaration (package:kernel/visitor.dart:210:7)
#53     FunctionDeclaration.accept (package:kernel/ast.dart:4369:35)
#54     visitList (package:kernel/ast.dart:5539:14)
#55     Block.visitChildren (package:kernel/ast.dart:3632:5)
#56     RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#57     Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#58     TreeVisitor.defaultStatement (package:kernel/visitor.dart:186:41)
#59     TreeVisitor.visitBlock (package:kernel/visitor.dart:189:31)
#60     Block.accept (package:kernel/ast.dart:3628:35)
#61     FunctionNode.visitChildren (package:kernel/ast.dart:2033:11)
#62     RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#63     Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#64     TreeVisitor.visitFunctionNode (package:kernel/visitor.dart:242:45)
#65     FunctionNode.accept (package:kernel/ast.dart:2026:30)
#66     Procedure.visitChildren (package:kernel/ast.dart:1695:15)
#67     RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#68     Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#69     TreeVisitor.defaultMember (package:kernel/visitor.dart:213:35)
#70     TreeVisitor.visitProcedure (package:kernel/visitor.dart:215:39)
#71     AnnotateWithStaticTypes.visitProcedure (package:vm/transformations/call_site_annotator.dart:46:11)
#72     Procedure.accept (package:kernel/ast.dart:1688:32)
#73     visitList (package:kernel/ast.dart:5539:14)
#74     Class.visitChildren (package:kernel/ast.dart:969:5)
#75     RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#76     Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#77     TreeVisitor.visitClass (package:kernel/visitor.dart:222:31)
#78     Class.accept (package:kernel/ast.dart:921:30)
#79     visitList (package:kernel/ast.dart:5539:14)
#80     Library.visitChildren (package:kernel/ast.dart:416:5)
#81     RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#82     Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#83     TreeVisitor.visitLibrary (package:kernel/visitor.dart:236:35)
#84     List.forEach (dart:core/runtime/libgrowable_array.dart:278:8)
#85     transformLibraries (package:vm/transformations/call_site_annotator.dart:29:13)
#86     VmTarget.performModularTransformationsOnLibraries (package:vm/target/vm.dart:72:5)
#87     KernelTarget.runBuildTransformations (package:front_end/src/fasta/kernel/kernel_target.dart:782:19)
#88     KernelTarget.buildComponent.<anonymous closure> (package:front_end/src/fasta/kernel/kernel_target.dart:301:11)
<asynchronous suspension>
#89     withCrashReporting (package:front_end/src/fasta/deprecated_problems.dart:69:24)
<asynchronous suspension>
#90     KernelTarget.buildComponent (package:front_end/src/fasta/kernel/kernel_target.dart:291:12)
<asynchronous suspension>
#91     generateKernelInternal.<anonymous closure> (package:front_end/src/kernel_generator_impl.dart:150:42)
<asynchronous suspension>
#92     withCrashReporting (package:front_end/src/fasta/deprecated_problems.dart:69:24)
<asynchronous suspension>
#93     generateKernelInternal (package:front_end/src/kernel_generator_impl.dart:57:10)
<asynchronous suspension>
#94     generateKernel.<anonymous closure> (package:front_end/src/kernel_generator_impl.dart:42:18)
<asynchronous suspension>
#95     CompilerContext.runWithOptions.<anonymous closure> (package:front_end/src/fasta/compiler_context.dart:131:20)
<asynchronous suspension>
#96     CompilerContext.runInContext.<anonymous closure>.<anonymous closure> (package:front_end/src/fasta/compiler_context.dart:120:46)
#97     new Future.sync (dart:async/future.dart:224:31)
#98     CompilerContext.runInContext.<anonymous closure> (package:front_end/src/fasta/compiler_context.dart:120:19)
#99     _rootRun (dart:async/zone.dart:1124:13)
#100    _CustomZone.run (dart:async/zone.dart:1021:19)
#101    _runZoned (dart:async/zone.dart:1516:10)
#102    runZoned (dart:async/zone.dart:1463:12)
#103    CompilerContext.runInContext (package:front_end/src/fasta/compiler_context.dart:119:12)
#104    CompilerContext.runWithOptions (package:front_end/src/fasta/compiler_context.dart:129:10)
#105    generateKernel (package:front_end/src/kernel_generator_impl.dart:41:32)
<asynchronous suspension>
#106    kernelForComponent (package:front_end/src/api_prototype/kernel_generator.dart:83:17)
<asynchronous suspension>
#107    SingleShotCompilerWrapper.compileInternal (file:///usr/local/google/home/alexmarkov/work/dart/sdk/pkg/vm/bin/kernel_service.dart:186:11)
<asynchronous suspension>
#108    Compiler.compile.<anonymous closure> (file:///usr/local/google/home/alexmarkov/work/dart/sdk/pkg/vm/bin/kernel_service.dart:134:39)
#109    new Future.<anonymous closure> (dart:async/future.dart:176:37)
#110    _rootRun (dart:async/zone.dart:1120:38)
#111    _CustomZone.run (dart:async/zone.dart:1021:19)
#112    _CustomZone.runGuarded (dart:async/zone.dart:923:7)
#113    _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:963:23)
#114    _rootRun (dart:async/zone.dart:1124:13)
#115    _CustomZone.run (dart:async/zone.dart:1021:19)
#116    _CustomZone.bindCallback.<anonymous closure> (dart:async/zone.dart:947:23)
#117    Timer._createTimer.<anonymous closure> (dart:async/runtime/libtimer_patch.dart:21:15)
#118    _Timer._runTimers (dart:isolate/runtime/libtimer_impl.dart:382:19)
#119    _Timer._handleMessage (dart:isolate/runtime/libtimer_impl.dart:416:5)
#120    _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:171:12)


#0      TypeEnvironment.typeError (package:kernel/type_environment.dart:103:7)
#1      Expression.getStaticTypeAsInstanceOf (package:kernel/ast.dart:2135:11)
#2      MethodInvocation.getStaticType (package:kernel/ast.dart:2744:35)
#3      AnnotateWithStaticTypes.visitMethodInvocation (package:vm/transformations/call_site_annotator.dart:76:39)
#4      MethodInvocation.accept (package:kernel/ast.dart:2773:36)
#5      VariableSet.visitChildren (package:kernel/ast.dart:2204:12)
#6      RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#7      Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#8      TreeVisitor.defaultExpression (package:kernel/visitor.dart:135:43)
#9      TreeVisitor.visitVariableSet (package:kernel/visitor.dart:139:43)
#10     VariableSet.accept (package:kernel/ast.dart:2200:36)
#11     ExpressionStatement.visitChildren (package:kernel/ast.dart:3604:17)
#12     RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#13     Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#14     TreeVisitor.defaultStatement (package:kernel/visitor.dart:186:41)
#15     TreeVisitor.visitExpressionStatement (package:kernel/visitor.dart:188:7)
#16     ExpressionStatement.accept (package:kernel/ast.dart:3600:35)
#17     visitList (package:kernel/ast.dart:5539:14)
#18     Block.visitChildren (package:kernel/ast.dart:3632:5)
#19     RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#20     Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#21     TreeVisitor.defaultStatement (package:kernel/visitor.dart:186:41)
#22     TreeVisitor.visitBlock (package:kernel/visitor.dart:189:31)
#23     Block.accept (package:kernel/ast.dart:3628:35)
#24     LabeledStatement.visitChildren (package:kernel/ast.dart:3735:11)
#25     RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#26     Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#27     TreeVisitor.defaultStatement (package:kernel/visitor.dart:186:41)
#28     TreeVisitor.visitLabeledStatement (package:kernel/visitor.dart:193:53)
#29     LabeledStatement.accept (package:kernel/ast.dart:3731:35)
#30     visitList (package:kernel/ast.dart:5539:14)
#31     Block.visitChildren (package:kernel/ast.dart:3632:5)
#32     RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#33     Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#34     TreeVisitor.defaultStatement (package:kernel/visitor.dart:186:41)
#35     TreeVisitor.visitBlock (package:kernel/visitor.dart:189:31)
#36     Block.accept (package:kernel/ast.dart:3628:35)
#37     TryCatch.visitChildren (package:kernel/ast.dart:4078:11)
#38     RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#39     Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#40     TreeVisitor.defaultStatement (package:kernel/visitor.dart:186:41)
#41     TreeVisitor.visitTryCatch (package:kernel/visitor.dart:204:37)
#42     TryCatch.accept (package:kernel/ast.dart:4074:35)
#43     FunctionNode.visitChildren (package:kernel/ast.dart:2033:11)
#44     RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#45     Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#46     TreeVisitor.visitFunctionNode (package:kernel/visitor.dart:242:45)
#47     FunctionNode.accept (package:kernel/ast.dart:2026:30)
#48     FunctionDeclaration.visitChildren (package:kernel/ast.dart:4374:15)
#49     RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#50     Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#51     TreeVisitor.defaultStatement (package:kernel/visitor.dart:186:41)
#52     TreeVisitor.visitFunctionDeclaration (package:kernel/visitor.dart:210:7)
#53     FunctionDeclaration.accept (package:kernel/ast.dart:4369:35)
#54     visitList (package:kernel/ast.dart:5539:14)
#55     Block.visitChildren (package:kernel/ast.dart:3632:5)
#56     RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#57     Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#58     TreeVisitor.defaultStatement (package:kernel/visitor.dart:186:41)
#59     TreeVisitor.visitBlock (package:kernel/visitor.dart:189:31)
#60     Block.accept (package:kernel/ast.dart:3628:35)
#61     FunctionNode.visitChildren (package:kernel/ast.dart:2033:11)
#62     RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#63     Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#64     TreeVisitor.visitFunctionNode (package:kernel/visitor.dart:242:45)
#65     FunctionNode.accept (package:kernel/ast.dart:2026:30)
#66     Procedure.visitChildren (package:kernel/ast.dart:1695:15)
#67     RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#68     Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#69     TreeVisitor.defaultMember (package:kernel/visitor.dart:213:35)
#70     TreeVisitor.visitProcedure (package:kernel/visitor.dart:215:39)
#71     AnnotateWithStaticTypes.visitProcedure (package:vm/transformations/call_site_annotator.dart:46:11)
#72     Procedure.accept (package:kernel/ast.dart:1688:32)
#73     visitList (package:kernel/ast.dart:5539:14)
#74     Class.visitChildren (package:kernel/ast.dart:969:5)
#75     RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#76     Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#77     TreeVisitor.visitClass (package:kernel/visitor.dart:222:31)
#78     Class.accept (package:kernel/ast.dart:921:30)
#79     visitList (package:kernel/ast.dart:5539:14)
#80     Library.visitChildren (package:kernel/ast.dart:416:5)
#81     RecursiveVisitor.defaultNode (package:kernel/visitor.dart:385:10)
#82     Visitor.defaultTreeNode (package:kernel/visitor.dart:305:39)
#83     TreeVisitor.visitLibrary (package:kernel/visitor.dart:236:35)
#84     List.forEach (dart:core/runtime/libgrowable_array.dart:278:8)
#85     transformLibraries (package:vm/transformations/call_site_annotator.dart:29:13)
#86     VmTarget.performModularTransformationsOnLibraries (package:vm/target/vm.dart:72:5)
#87     KernelTarget.runBuildTransformations (package:front_end/src/fasta/kernel/kernel_target.dart:782:19)
#88     KernelTarget.buildComponent.<anonymous closure> (package:front_end/src/fasta/kernel/kernel_target.dart:301:11)
<asynchronous suspension>
#89     withCrashReporting (package:front_end/src/fasta/deprecated_problems.dart:69:24)
<asynchronous suspension>
#90     KernelTarget.buildComponent (package:front_end/src/fasta/kernel/kernel_target.dart:291:12)
<asynchronous suspension>
#91     generateKernelInternal.<anonymous closure> (package:front_end/src/kernel_generator_impl.dart:150:42)
<asynchronous suspension>
#92     withCrashReporting (package:front_end/src/fasta/deprecated_problems.dart:69:24)
<asynchronous suspension>
#93     generateKernelInternal (package:front_end/src/kernel_generator_impl.dart:57:10)
<asynchronous suspension>
#94     generateKernel.<anonymous closure> (package:front_end/src/kernel_generator_impl.dart:42:18)
<asynchronous suspension>
#95     CompilerContext.runWithOptions.<anonymous closure> (package:front_end/src/fasta/compiler_context.dart:131:20)
<asynchronous suspension>
#96     CompilerContext.runInContext.<anonymous closure>.<anonymous closure> (package:front_end/src/fasta/compiler_context.dart:120:46)
#97     new Future.sync (dart:async/future.dart:224:31)
#98     CompilerContext.runInContext.<anonymous closure> (package:front_end/src/fasta/compiler_context.dart:120:19)
#99     _rootRun (dart:async/zone.dart:1124:13)
#100    _CustomZone.run (dart:async/zone.dart:1021:19)
#101    _runZoned (dart:async/zone.dart:1516:10)
#102    runZoned (dart:async/zone.dart:1463:12)
#103    CompilerContext.runInContext (package:front_end/src/fasta/compiler_context.dart:119:12)
#104    CompilerContext.runWithOptions (package:front_end/src/fasta/compiler_context.dart:129:10)
#105    generateKernel (package:front_end/src/kernel_generator_impl.dart:41:32)
<asynchronous suspension>
#106    kernelForComponent (package:front_end/src/api_prototype/kernel_generator.dart:83:17)
<asynchronous suspension>
#107    SingleShotCompilerWrapper.compileInternal (file:///usr/local/google/home/alexmarkov/work/dart/sdk/pkg/vm/bin/kernel_service.dart:186:11)
<asynchronous suspension>
#108    Compiler.compile.<anonymous closure> (file:///usr/local/google/home/alexmarkov/work/dart/sdk/pkg/vm/bin/kernel_service.dart:134:39)
#109    new Future.<anonymous closure> (dart:async/future.dart:176:37)
#110    _rootRun (dart:async/zone.dart:1120:38)
#111    _CustomZone.run (dart:async/zone.dart:1021:19)
#112    _CustomZone.runGuarded (dart:async/zone.dart:923:7)
#113    _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:963:23)
#114    _rootRun (dart:async/zone.dart:1124:13)
#115    _CustomZone.run (dart:async/zone.dart:1021:19)
#116    _CustomZone.bindCallback.<anonymous closure> (dart:async/zone.dart:947:23)
#117    Timer._createTimer.<anonymous closure> (dart:async/runtime/libtimer_patch.dart:21:15)
#118    _Timer._runTimers (dart:isolate/runtime/libtimer_impl.dart:382:19)
#119    _Timer._handleMessage (dart:isolate/runtime/libtimer_impl.dart:416:5)
#120    _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:171:12)

It looks like async transformer produces kernel AST which is not strongly typed.
Then, call_site_annotator queries static type of a receiver which triggers the crash.

/cc @sjindel-google @mraleph @kmillikin @jensjoha @keertip

Metadata

Metadata

Assignees

Labels

P0A serious issue requiring immediate resolutionfront-end-kernellegacy-area-front-endLegacy: Use area-dart-model instead.type-bugIncorrect behavior (everything from a crash to more subtle misbehavior)

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions