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

[dart2js] crash in ListFactorySpecializer #52403

Closed
fredrik-smedberg opened this issue May 15, 2023 · 7 comments
Closed

[dart2js] crash in ListFactorySpecializer #52403

fredrik-smedberg opened this issue May 15, 2023 · 7 comments
Labels
area-web Use area-web for Dart web related issues, including the DDC and dart2js compilers and JS interop. dart2js-crash P1 A high priority bug; for example, a single project is unusable or has many test failures web-dart2js

Comments

@fredrik-smedberg
Copy link

fredrik-smedberg commented May 15, 2023

Apple M1
macOS Ventura 13.3.1 (a) (22E772610a)
Dart SDK version: 3.0.0 (stable) (Thu May 4 01:11:00 2023 -0700) on "macos_arm64"

flutter --version
Flutter 3.10.0 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 84a1e904f4 (6 dagar sedan) • 2023-05-09 07:41:44 -0700
Engine • revision d44b5a94c9
Tools • Dart 3.0.0 • DevTools 2.23.1

Error output

Target dart2js failed: Exception: .dart_tool/flutter_build/95c3e2b9852183996d6553a754760307/main.dart:
Internal Error: The compiler crashed when compiling this element.

The compiler is broken.

When compiling the above element, the compiler crashed. It is not
possible to tell if this is caused by a problem in your program or
not. Regardless, the compiler should not crash.

The Dart team would greatly appreciate if you would take a moment to
report this problem at http://dartbug.com/new.

Please include the following information:

* the name and version of your operating system,

* the Dart SDK build number (3.0.0), and

* the entire message you see here (including the full stack trace
  below as well as the source location above).

The compiler crashed: Crash when compiling:
type 'Null' is not a subtype of type 'FunctionType' in type cast

#0      CloneVisitorNotMembers.visitInstanceGetterInvocation (package:kernel/clone.dart:834:60)
#1      InstanceGetterInvocation.accept (package:kernel/ast.dart:6302:44)
#2      CloneVisitorNotMembers.clone (package:kernel/clone.dart:116:34)
#3      CloneVisitorNotMembers.visitLet (package:kernel/clone.dart:426:33)
#4      Let.accept (package:kernel/ast.dart:9277:44)
#5      CloneVisitorNotMembers.cloneOptional (package:kernel/clone.dart:128:29)
#6      CloneVisitorNotMembers.visitReturnStatement (package:kernel/clone.dart:548:32)
#7      ListGenerateLoopBodyInliner.visitReturnStatement (package:compiler/src/kernel/transformations/list_factory_specializer.dart:308:48)
#8      ReturnStatement.accept (package:kernel/ast.dart:10786:43)
#9      CloneVisitorNotMembers.cloneOptional (package:kernel/clone.dart:128:29)
#10     CloneVisitorNotMembers.cloneFunctionNodeBody (package:kernel/clone.dart:632:14)
#11     CloneVisitorNotMembers.visitFunctionNode (package:kernel/clone.dart:648:29)
#12     ListGenerateLoopBodyInliner.visitFunctionNode (package:compiler/src/kernel/transformations/list_factory_specializer.dart:353:26)
#13     FunctionNode.accept (package:kernel/ast.dart:4198:38)
#14     CloneVisitorNotMembers.clone (package:kernel/clone.dart:116:34)
#15     CloneVisitorNotMembers.visitFunctionExpression (package:kernel/clone.dart:389:35)
#16     FunctionExpression.accept (package:kernel/ast.dart:9166:44)
#17     CloneVisitorNotMembers.clone (package:kernel/clone.dart:116:34)
#18     CloneVisitorNotMembers.visitConditionalExpression (package:kernel/clone.dart:263:9)
#19     ConditionalExpression.accept (package:kernel/ast.dart:7420:44)
#20     CloneVisitorNotMembers.clone (package:kernel/clone.dart:116:34)
#21     CloneVisitorNotMembers.visitNamedExpression (package:kernel/clone.dart:669:43)
#22     NamedExpression.accept (package:kernel/ast.dart:5821:38)
#23     CloneVisitorNotMembers.clone (package:kernel/clone.dart:116:34)
#24     MappedListIterable.elementAt (dart:_internal/iterable.dart:415:31)
#25     ListIterator.moveNext (dart:_internal/iterable.dart:344:26)
#26     new _GrowableList._ofEfficientLengthIterable (dart:core-patch/growable_array.dart:189:27)
#27     new _GrowableList.of (dart:core-patch/growable_array.dart:150:28)
#28     new List.of (dart:core-patch/array_patch.dart:47:28)
#29     ListIterable.toList (dart:_internal/iterable.dart:214:7)
#30     CloneVisitorNotMembers.visitArguments (package:kernel/clone.dart:664:38)
#31     Arguments.accept (package:kernel/ast.dart:5746:38)
#32     CloneVisitorNotMembers.clone (package:kernel/clone.dart:116:34)
#33     CloneVisitorNotMembers.visitConstructorInvocation (package:kernel/clone.dart:240:31)
#34     ConstructorInvocation.accept (package:kernel/ast.dart:7119:44)
#35     CloneVisitorNotMembers.clone (package:kernel/clone.dart:116:34)
#36     CloneVisitorNotMembers.visitNamedExpression (package:kernel/clone.dart:669:43)
#37     NamedExpression.accept (package:kernel/ast.dart:5821:38)
#38     CloneVisitorNotMembers.clone (package:kernel/clone.dart:116:34)
#39     MappedListIterable.elementAt (dart:_internal/iterable.dart:415:31)
#40     ListIterator.moveNext (dart:_internal/iterable.dart:344:26)
#41     new _GrowableList._ofEfficientLengthIterable (dart:core-patch/growable_array.dart:189:27)
#42     new _GrowableList.of (dart:core-patch/growable_array.dart:150:28)
#43     new List.of (dart:core-patch/array_patch.dart:47:28)
#44     ListIterable.toList (dart:_internal/iterable.dart:214:7)
#45     CloneVisitorNotMembers.visitArguments (package:kernel/clone.dart:664:38)
#46     Arguments.accept (package:kernel/ast.dart:5746:38)
#47     CloneVisitorNotMembers.clone (package:kernel/clone.dart:116:34)
#48     CloneVisitorNotMembers.visitConstructorInvocation (package:kernel/clone.dart:240:31)
#49     ConstructorInvocation.accept (package:kernel/ast.dart:7119:44)
#50     CloneVisitorNotMembers.clone (package:kernel/clone.dart:116:34)
#51     ListGenerateLoopBodyInliner.visitReturnStatement (package:compiler/src/kernel/transformations/list_factory_specializer.dart:326:56)
#52     ReturnStatement.accept (package:kernel/ast.dart:10786:43)
#53     CloneVisitorNotMembers.clone (package:kernel/clone.dart:116:34)
#54     CloneVisitorNotMembers.cloneInContext (package:kernel/clone.dart:139:29)
#55     ListGenerateLoopBodyInliner.run (package:compiler/src/kernel/transformations/list_factory_specializer.dart:301:22)
#56     ListFactorySpecializer._loopBody (package:compiler/src/kernel/transformations/list_factory_specializer.dart:182:20)
#57     ListFactorySpecializer.transformListGenerateFactory (package:compiler/src/kernel/transformations/list_factory_specializer.dart:161:7)
#58     FactorySpecializer.transformStaticInvocation (package:compiler/src/kernel/transformations/factory_specializer.dart:31:25)
#59     _Lowering.visitStaticInvocation (package:compiler/src/kernel/transformations/lowering.dart:57:31)
#60     StaticInvocation.accept (package:kernel/ast.dart:7029:44)
#61     Transformer.transform (package:kernel/visitor.dart:1801:21)
#62     Transformer.transformList (package:kernel/visitor.dart:1836:18)
#63     Arguments.transformChildren (package:kernel/ast.dart:5761:7)
#64     Transformer.defaultTreeNode (package:kernel/visitor.dart:1858:10)
#65     TreeVisitor.visitArguments (package:kernel/visitor.dart:520:39)
#66     Arguments.accept (package:kernel/ast.dart:5746:38)
#67     Transformer.transform (package:kernel/visitor.dart:1801:21)
#68     InstanceInvocation.transformChildren (package:kernel/ast.dart:6152:21)
#69     Transformer.defaultTreeNode (package:kernel/visitor.dart:1858:10)
#70     TreeVisitor.defaultExpression (package:kernel/visitor.dart:229:43)
#71     TreeVisitor.visitInstanceInvocation (package:kernel/visitor.dart:274:57)
#72     InstanceInvocation.accept (package:kernel/ast.dart:6128:44)
#73     Transformer.transform (package:kernel/visitor.dart:1801:21)
#74     InstanceInvocation.transformChildren (package:kernel/ast.dart:6147:20)
#75     Transformer.defaultTreeNode (package:kernel/visitor.dart:1858:10)
#76     TreeVisitor.defaultExpression (package:kernel/visitor.dart:229:43)
#77     TreeVisitor.visitInstanceInvocation (package:kernel/visitor.dart:274:57)
#78     InstanceInvocation.accept (package:kernel/ast.dart:6128:44)
#79     Transformer.transform (package:kernel/visitor.dart:1801:21)
#80     NamedExpression.transformChildren (package:kernel/ast.dart:5836:17)
#81     Transformer.defaultTreeNode (package:kernel/visitor.dart:1858:10)
#82     TreeVisitor.visitNamedExpression (package:kernel/visitor.dart:521:51)
#83     NamedExpression.accept (package:kernel/ast.dart:5821:38)
#84     Transformer.transform (package:kernel/visitor.dart:1801:21)
#85     Transformer.transformList (package:kernel/visitor.dart:1836:18)
#86     Arguments.transformChildren (package:kernel/ast.dart:5762:7)
#87     Transformer.defaultTreeNode (package:kernel/visitor.dart:1858:10)
#88     TreeVisitor.visitArguments (package:kernel/visitor.dart:520:39)
#89     Arguments.accept (package:kernel/ast.dart:5746:38)
#90     Transformer.transform (package:kernel/visitor.dart:1801:21)
#91     ConstructorInvocation.transformChildren (package:kernel/ast.dart:7135:21)
#92     Transformer.defaultTreeNode (package:kernel/visitor.dart:1858:10)
#93     TreeVisitor.defaultExpression (package:kernel/visitor.dart:229:43)
#94     TreeVisitor.visitConstructorInvocation (package:kernel/visitor.dart:292:7)
#95     ConstructorInvocation.accept (package:kernel/ast.dart:7119:44)
#96     Transformer.transform (package:kernel/visitor.dart:1801:21)
#97     NamedExpression.transformChildren (package:kernel/ast.dart:5836:17)
#98     Transformer.defaultTreeNode (package:kernel/visitor.dart:1858:10)
#99     TreeVisitor.visitNamedExpression (package:kernel/visitor.dart:521:51)
#100    NamedExpression.accept (package:kernel/ast.dart:5821:38)
#101    Transformer.transform (package:kernel/visitor.dart:1801:21)
#102    Transformer.transformList (package:kernel/visitor.dart:1836:18)
#103    Arguments.transformChildren (package:kernel/ast.dart:5762:7)
#104    Transformer.defaultTreeNode (package:kernel/visitor.dart:1858:10)
#105    TreeVisitor.visitArguments (package:kernel/visitor.dart:520:39)
#106    Arguments.accept (package:kernel/ast.dart:5746:38)
#107    Transformer.transform (package:kernel/visitor.dart:1801:21)
#108    ConstructorInvocation.transformChildren (package:kernel/ast.dart:7135:21)
#109    Transformer.defaultTreeNode (package:kernel/visitor.dart:1858:10)
#110    TreeVisitor.defaultExpression (package:kernel/visitor.dart:229:43)
#111    TreeVisitor.visitConstructorInvocation (package:kernel/visitor.dart:292:7)
#112    ConstructorInvocation.accept (package:kernel/ast.dart:7119:44)
#113    Transformer.transform (package:kernel/visitor.dart:1801:21)
#114    NamedExpression.transformChildren (package:kernel/ast.dart:5836:17)
#115    Transformer.defaultTreeNode (package:kernel/visitor.dart:1858:10)
#116    TreeVisitor.visitNamedExpression (package:kernel/visitor.dart:521:51)
#117    NamedExpression.accept (package:kernel/ast.dart:5821:38)
#118    Transformer.transform (package:kernel/visitor.dart:1801:21)
#119    Transformer.transformList (package:kernel/visitor.dart:1836:18)
#120    Arguments.transformChildren (package:kernel/ast.dart:5762:7)
#121    Transformer.defaultTreeNode (package:kernel/visitor.dart:1858:10)
#122    TreeVisitor.visitArguments (package:kernel/visitor.dart:520:39)
#123    Arguments.accept (package:kernel/ast.dart:5746:38)
#124    Transformer.transform (package:kernel/visitor.dart:1801:21)
#125    ConstructorInvocation.transformChildren (package:kernel/ast.dart:7135:21)
#126    Transformer.defaultTreeNode (package:kernel/visitor.dart:1858:10)
#127    TreeVisitor.defaultExpression (package:kernel/visitor.dart:229:43)
#128    TreeVisitor.visitConstructorInvocation (package:kernel/visitor.dart:292:7)
#129    ConstructorInvocation.accept (package:kernel/ast.dart:7119:44)
#130    Transformer.transform (package:kernel/visitor.dart:1801:21)
#131    ReturnStatement.transformChildren (package:kernel/ast.dart:10800:22)
#132    _Lowering.visitReturnStatement (package:compiler/src/kernel/transformations/lowering.dart:105:15)
#133    ReturnStatement.accept (package:kernel/ast.dart:10786:43)
#134    Transformer.transform (package:kernel/visitor.dart:1801:21)
#135    Transformer.transformList (package:kernel/visitor.dart:1836:18)
#136    Block.transformChildren (package:kernel/ast.dart:9783:7)
#137    Transformer.defaultTreeNode (package:kernel/visitor.dart:1858:10)
#138    TreeVisitor.defaultStatement (package:kernel/visitor.dart:421:41)
#139    TreeVisitor.visitBlock (package:kernel/visitor.dart:426:31)
#140    Block.accept (package:kernel/ast.dart:9771:43)
#141    Transformer.transform (package:kernel/visitor.dart:1801:21)
#142    FunctionNode.transformChildren (package:kernel/ast.dart:4224:16)
#143    _Lowering.visitFunctionNode (package:compiler/src/kernel/transformations/lowering.dart:64:10)
#144    FunctionNode.accept (package:kernel/ast.dart:4198:38)
#145    Transformer.transform (package:kernel/visitor.dart:1801:21)
#146    Procedure.transformChildren (package:kernel/ast.dart:3611:20)
#147    Transformer.defaultTreeNode (package:kernel/visitor.dart:1858:10)
#148    TreeVisitor.defaultMember (package:kernel/visitor.dart:477:35)
#149    _Lowering.defaultMember (package:compiler/src/kernel/transformations/lowering.dart:44:18)
#150    TreeVisitor.visitProcedure (package:kernel/visitor.dart:481:39)
#151    Procedure.accept (package:kernel/ast.dart:3590:40)
#152    Transformer.transform (package:kernel/visitor.dart:1801:21)
#153    Transformer.transformList (package:kernel/visitor.dart:1836:18)
#154    Class.transformChildren (package:kernel/ast.dart:1536:7)
#155    Transformer.defaultTreeNode (package:kernel/visitor.dart:1858:10)
#156    TreeVisitor.visitClass (package:kernel/visitor.dart:490:31)
#157    Class.accept (package:kernel/ast.dart:1481:38)
#158    Transformer.transform (package:kernel/visitor.dart:1801:21)
#159    Transformer.transformList (package:kernel/visitor.dart:1836:18)
#160    Library.transformChildren (package:kernel/ast.dart:611:7)
#161    _Lowering.visitLibrary (package:compiler/src/kernel/transformations/lowering.dart:49:10)
#162    List.forEach (dart:core-patch/growable_array.dart:416:8)
#163    transformLibraries (package:compiler/src/kernel/transformations/lowering.dart:22:13)
#164    Dart2jsTarget.performModularTransformationsOnLibraries (package:compiler/src/kernel/dart2js_target.dart:173:14)
#165    KernelTarget.runBuildTransformations (package:front_end/src/fasta/kernel/kernel_target.dart:1568:19)
#166    KernelTarget.buildComponent.<anonymous closure> (package:front_end/src/fasta/kernel/kernel_target.dart:638:7)
<asynchronous suspension>
#167    withCrashReporting (package:front_end/src/fasta/crash.dart:136:12)
<asynchronous suspension>
#168    _buildInternal (package:front_end/src/kernel_generator_impl.dart:207:19)
<asynchronous suspension>
#169    withCrashReporting (package:front_end/src/fasta/crash.dart:136:12)
<asynchronous suspension>
#170    compile.<anonymous closure> (package:front_end/src/api_unstable/dart2js.dart:201:37)
<asynchronous suspension>
#171    compile (package:front_end/src/api_unstable/dart2js.dart:199:36)
<asynchronous suspension>
#172    _loadFromSource (package:compiler/src/phase/load_kernel.dart:299:29)
<asynchronous suspension>
#173    run (package:compiler/src/phase/load_kernel.dart:400:36)
<asynchronous suspension>
#174    Compiler.loadKernel (package:compiler/src/compiler.dart:395:9)
<asynchronous suspension>
#175    Compiler.produceKernel (package:compiler/src/compiler.dart:402:36)
<asynchronous suspension>
#176    Compiler.runSequentialPhases (package:compiler/src/compiler.dart:743:20)
<asynchronous suspension>
#177    Compiler.runInternal.<anonymous closure> (package:compiler/src/compiler.dart:319:7)
<asynchronous suspension>
#178    Compiler.runInternal (package:compiler/src/compiler.dart:318:5)
<asynchronous suspension>
#179    Compiler.run.<anonymous closure> (package:compiler/src/compiler.dart:239:11)
<asynchronous suspension>
#180    main (package:compiler/src/dart2js.dart:1473:3)
<asynchronous suspension>



#0      Dart2JSTarget.build (package:flutter_tools/src/build_system/targets/web.dart:212:7)
<asynchronous suspension>
#1      _BuildInstance._invokeInternal (package:flutter_tools/src/build_system/build_system.dart:847:9)
<asynchronous suspension>
#2      Future.wait.<anonymous closure> (dart:async/future.dart:525:21)
<asynchronous suspension>
#3      _BuildInstance.invokeTarget (package:flutter_tools/src/build_system/build_system.dart:785:32)
<asynchronous suspension>
#4      Future.wait.<anonymous closure> (dart:async/future.dart:525:21)
<asynchronous suspension>
#5      _BuildInstance.invokeTarget (package:flutter_tools/src/build_system/build_system.dart:785:32)
<asynchronous suspension>
#6      FlutterBuildSystem.build (package:flutter_tools/src/build_system/build_system.dart:614:16)
<asynchronous suspension>
#7      WebBuilder.buildWeb (package:flutter_tools/src/web/compile.dart:81:34)
<asynchronous suspension>
#8      BuildWebCommand.runCommand (package:flutter_tools/src/commands/build_web.dart:191:5)
<asynchronous suspension>
#9      FlutterCommand.run.<anonymous closure> (package:flutter_tools/src/runner/flutter_command.dart:1336:27)
<asynchronous suspension>
#10     AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:150:19)
<asynchronous suspension>
#11     CommandRunner.runCommand (package:args/command_runner.dart:212:13)
<asynchronous suspension>
#12     FlutterCommandRunner.runCommand.<anonymous closure> (package:flutter_tools/src/runner/flutter_command_runner.dart:296:9)
<asynchronous suspension>
#13     AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:150:19)
<asynchronous suspension>
#14     FlutterCommandRunner.runCommand (package:flutter_tools/src/runner/flutter_command_runner.dart:244:5)
<asynchronous suspension>
#15     run.<anonymous closure>.<anonymous closure> (package:flutter_tools/runner.dart:91:9)
<asynchronous suspension>
#16     AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:150:19)
<asynchronous suspension>
#17     main (package:flutter_tools/executable.dart:91:3)
<asynchronous suspension>

Compiling lib/main.dart for the Web...                              9,0s
Exception: Failed to compile application for the Web.
@sigmundch sigmundch added P1 A high priority bug; for example, a single project is unusable or has many test failures web-dart2js dart2js-crash area-web Use area-web for Dart web related issues, including the DDC and dart2js compilers and JS interop. labels May 15, 2023
@sigmundch sigmundch changed the title Dart compiler crashed [dart2js] crash in ListFactorySpecializer May 15, 2023
@sigmundch
Copy link
Member

updated title - this seems like a crash in ListFactorySpecializer.transformListGenerateFactor.

Aside - it may be worth also looking into adding our typical crash wrapper to the transformers as well, so we can provide more context on the error location.

@fishythefish
Copy link
Member

I think this is actually a bad cast in CFE code. Tentative fix: https://dart-review.googlesource.com/c/sdk/+/303420

@Mufaddal1125
Copy link

when can we expect this to be released? it's a quite while now.

@fredrik-smedberg
Copy link
Author

Update:
Still happens in Flutter 3.10.3 (Dart SDK build number 3.0.3), but only when building for web. Building for iOS seems to work fine.

@fishythefish
Copy link
Member

We're in the process of attempting to cherry pick the fix to stable: #52634

copybara-service bot pushed a commit that referenced this issue Jun 8, 2023
Bug: #52403
Fixes: #52634
Cherry-pick: https://dart-review.googlesource.com/c/sdk/+/303420
Change-Id: If05caab1b89236872092bdb6a1ee4a1c45953660
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/307964
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Commit-Queue: Mayank Patke <fishythefish@google.com>
@sigmundch
Copy link
Member

FYI - the cherry pick was accepted, and should be out on the next patch release

@Mufaddal1125
Copy link

Thanks for the updates.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-web Use area-web for Dart web related issues, including the DDC and dart2js compilers and JS interop. dart2js-crash P1 A high priority bug; for example, a single project is unusable or has many test failures web-dart2js
Projects
None yet
Development

No branches or pull requests

4 participants