sdk
sdk copied to clipboard
const_finder/ast_from_binary is crashing during dill parsing while running flutter icon tree shaking
After updating to latest Flutter stable (3.22.1) our app is no longer building.
Running on macOS 14.4.1.
The failing step happens when the script executes the const_finder command during the icon tree shaking step.
Building with --no-tree-shake-icons produces a perfectly running build (so it seems more a problem of the parser rather than the builder).
I reproduced the error by running the following command:
dart path/to/const_finder.dart.snapshot --kernel-file /path/to/app.dill --class-library-uri 'package:flutter/src/widgets/icon_data.dart' --class-name 'IconData' --annotation-class-name '_StaticIconProvider' --annotation-class-library-uri 'package:flutter/src/widgets/icon_data.dart'
the exception thrown in debug mode is:
Unhandled exception:
'package:kernel/binary/ast_from_binary.dart': Failed assertion: line 2024 pos 16: 'targetReference != null && typeArguments != null': is not true.
#0 _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:51:61)
#1 _AssertionError._throwNew (dart:core-patch/errors_patch.dart:40:5)
#2 BinaryBuilder.readFunctionNode (package:kernel/binary/ast_from_binary.dart:2024:16)
#3 BinaryBuilder.readProcedure (package:kernel/binary/ast_from_binary.dart:1884:29)
#4 BinaryBuilder._readProcedureList.<anonymous closure> (package:kernel/binary/ast_from_binary.dart:1353:14)
#5 new _GrowableList.generate (dart:core-patch/growable_array.dart:136:28)
#6 new List.generate (dart:core-patch/array_patch.dart:46:13)
#7 BinaryBuilder._readProcedureList (package:kernel/binary/ast_from_binary.dart:1351:32)
#8 BinaryBuilder.readClassPartialContent (package:kernel/binary/ast_from_binary.dart:1710:31)
#9 BinaryBuilder._setLazyLoadClass.<anonymous closure> (package:kernel/binary/ast_from_binary.dart:1738:7)
#10 Class.ensureLoaded (package:kernel/ast.dart:1235:23)
#11 Reference._tryLoadNode (package:kernel/canonical_name.dart:450:23)
#12 Reference.node (package:kernel/canonical_name.dart:428:21)
#13 Reference.asProcedure (package:kernel/canonical_name.dart:541:28)
#14 RedirectingFactoryTearOffConstant.target (package:kernel/ast.dart:14390:43)
#15 RedirectingFactoryTearOffConstant.visitChildren (package:kernel/ast.dart:14397:5)
#16 RecursiveVisitor.defaultNode (package:kernel/visitor.dart:1725:10)
#17 VisitorDefault.defaultConstant (package:kernel/visitor.dart:1527:39)
#18 _ConstVisitor.defaultConstant (package:kernel/const_finder.dart:104:13)
#19 _ConstVisitor.defaultConstantReference (package:kernel/const_finder.dart:110:5)
#20 ConstantReferenceVisitorDefaultMixin.visitRedirectingFactoryTearOffConstantReference (package:kernel/visitor.dart:1119:7)
#21 RedirectingFactoryTearOffConstant.acceptReference (package:kernel/ast.dart:14410:9)
#22 ConstantExpression.visitChildren (package:kernel/ast.dart:8711:14)
#23 RecursiveVisitor.defaultNode (package:kernel/visitor.dart:1725:10)
#24 VisitorDefault.defaultTreeNode (package:kernel/visitor.dart:1521:39)
#25 TreeVisitorDefault.defaultExpression (package:kernel/visitor.dart:618:43)
#26 ExpressionVisitorDefaultMixin.visitConstantExpression (package:kernel/visitor.dart:204:57)
#27 ConstantExpression.accept (package:kernel/ast.dart:8703:44)
#28 visitList (package:kernel/ast.dart:14913:14)
#29 Arguments.visitChildren (package:kernel/ast.dart:5428:5)
#30 RecursiveVisitor.defaultNode (package:kernel/visitor.dart:1725:10)
#31 VisitorDefault.defaultTreeNode (package:kernel/visitor.dart:1521:39)
#32 TreeVisitorDefaultMixin.visitArguments (package:kernel/visitor.dart:579:39)
#33 Arguments.accept (package:kernel/ast.dart:5420:38)
#34 StaticInvocation.visitChildren (package:kernel/ast.dart:6617:15)
#35 RecursiveVisitor.defaultNode (package:kernel/visitor.dart:1725:10)
#36 VisitorDefault.defaultTreeNode (package:kernel/visitor.dart:1521:39)
#37 TreeVisitorDefault.defaultExpression (package:kernel/visitor.dart:618:43)
#38 ExpressionVisitorDefaultMixin.visitStaticInvocation (package:kernel/visitor.dart:151:53)
#39 StaticInvocation.accept (package:kernel/ast.dart:6608:44)
#40 VariableDeclaration.visitChildren (package:kernel/ast.dart:10801:18)
#41 RecursiveVisitor.defaultNode (package:kernel/visitor.dart:1725:10)
#42 VisitorDefault.defaultTreeNode (package:kernel/visitor.dart:1521:39)
#43 TreeVisitorDefault.defaultStatement (package:kernel/visitor.dart:622:41)
#44 StatementVisitorDefaultMixin.visitVariableDeclaration (package:kernel/visitor.dart:386:7)
#45 VariableDeclaration.accept (package:kernel/ast.dart:10791:43)
#46 Let.visitChildren (package:kernel/ast.dart:8779:14)
#47 RecursiveVisitor.defaultNode (package:kernel/visitor.dart:1725:10)
#48 VisitorDefault.defaultTreeNode (package:kernel/visitor.dart:1521:39)
#49 TreeVisitorDefault.defaultExpression (package:kernel/visitor.dart:618:43)
#50 ExpressionVisitorDefaultMixin.visitLet (package:kernel/visitor.dart:216:27)
#51 Let.accept (package:kernel/ast.dart:8772:44)
#52 VariableSet.visitChildren (package:kernel/ast.dart:4287:11)
#53 RecursiveVisitor.defaultNode (package:kernel/visitor.dart:1725:10)
#54 VisitorDefault.defaultTreeNode (package:kernel/visitor.dart:1521:39)
#55 TreeVisitorDefault.defaultExpression (package:kernel/visitor.dart:618:43)
#56 ExpressionVisitorDefaultMixin.visitVariableSet (package:kernel/visitor.dart:99:43)
#57 VariableSet.accept (package:kernel/ast.dart:4279:44)
#58 ExpressionStatement.visitChildren (package:kernel/ast.dart:9202:16)
#59 RecursiveVisitor.defaultNode (package:kernel/visitor.dart:1725:10)
#60 VisitorDefault.defaultTreeNode (package:kernel/visitor.dart:1521:39)
#61 TreeVisitorDefault.defaultStatement (package:kernel/visitor.dart:622:41)
#62 StatementVisitorDefaultMixin.visitExpressionStatement (package:kernel/visitor.dart:343:7)
#63 ExpressionStatement.accept (package:kernel/ast.dart:9194:43)
#64 visitList (package:kernel/ast.dart:14913:14)
#65 Block.visitChildren (package:kernel/ast.dart:9254:5)
#66 RecursiveVisitor.defaultNode (package:kernel/visitor.dart:1725:10)
#67 VisitorDefault.defaultTreeNode (package:kernel/visitor.dart:1521:39)
#68 TreeVisitorDefault.defaultStatement (package:kernel/visitor.dart:622:41)
#69 StatementVisitorDefaultMixin.visitBlock (package:kernel/visitor.dart:345:31)
#70 Block.accept (package:kernel/ast.dart:9247:43)
#71 visitList (package:kernel/ast.dart:14913:14)
#72 Block.visitChildren (package:kernel/ast.dart:9254:5)
#73 RecursiveVisitor.defaultNode (package:kernel/visitor.dart:1725:10)
#74 VisitorDefault.defaultTreeNode (package:kernel/visitor.dart:1521:39)
#75 TreeVisitorDefault.defaultStatement (package:kernel/visitor.dart:622:41)
#76 StatementVisitorDefaultMixin.visitBlock (package:kernel/visitor.dart:345:31)
#77 Block.accept (package:kernel/ast.dart:9247:43)
#78 FunctionNode.visitChildren (package:kernel/ast.dart:3915:11)
#79 RecursiveVisitor.defaultNode (package:kernel/visitor.dart:1725:10)
#80 VisitorDefault.defaultTreeNode (package:kernel/visitor.dart:1521:39)
#81 TreeVisitorDefaultMixin.visitFunctionNode (package:kernel/visitor.dart:577:45)
#82 FunctionNode.accept (package:kernel/ast.dart:3898:38)
#83 FunctionExpression.visitChildren (package:kernel/ast.dart:8663:14)
#84 RecursiveVisitor.defaultNode (package:kernel/visitor.dart:1725:10)
#85 VisitorDefault.defaultTreeNode (package:kernel/visitor.dart:1521:39)
#86 TreeVisitorDefault.defaultExpression (package:kernel/visitor.dart:618:43)
#87 ExpressionVisitorDefaultMixin.visitFunctionExpression (package:kernel/visitor.dart:202:57)
#88 FunctionExpression.accept (package:kernel/ast.dart:8655:44)
#89 VariableDeclaration.visitChildren (package:kernel/ast.dart:10801:18)
#90 RecursiveVisitor.defaultNode (package:kernel/visitor.dart:1725:10)
#91 VisitorDefault.defaultTreeNode (package:kernel/visitor.dart:1521:39)
#92 TreeVisitorDefault.defaultStatement (package:kernel/visitor.dart:622:41)
#93 StatementVisitorDefaultMixin.visitVariableDeclaration (package:kernel/visitor.dart:386:7)
#94 VariableDeclaration.accept (package:kernel/ast.dart:10791:43)
#95 Let.visitChildren (package:kernel/ast.dart:8779:14)
#96 RecursiveVisitor.defaultNode (package:kernel/visitor.dart:1725:10)
#97 VisitorDefault.defaultTreeNode (package:kernel/visitor.dart:1521:39)
#98 TreeVisitorDefault.defaultExpression (package:kernel/visitor.dart:618:43)
#99 ExpressionVisitorDefaultMixin.visitLet (package:kernel/visitor.dart:216:27)
#100 Let.accept (package:kernel/ast.dart:8772:44)
#101 Let.visitChildren (package:kernel/ast.dart:8780:10)
#102 RecursiveVisitor.defaultNode (package:kernel/visitor.dart:1725:10)
#103 VisitorDefault.defaultTreeNode (package:kernel/visitor.dart:1521:39)
#104 TreeVisitorDefault.defaultExpression (package:kernel/visitor.dart:618:43)
#105 ExpressionVisitorDefaultMixin.visitLet (package:kernel/visitor.dart:216:27)
#106 Let.accept (package:kernel/ast.dart:8772:44)
#107 ReturnStatement.visitChildren (package:kernel/ast.dart:10214:17)
#108 RecursiveVisitor.defaultNode (package:kernel/visitor.dart:1725:10)
#109 VisitorDefault.defaultTreeNode (package:kernel/visitor.dart:1521:39)
#110 TreeVisitorDefault.defaultStatement (package:kernel/visitor.dart:622:41)
#111 StatementVisitorDefaultMixin.visitReturnStatement (package:kernel/visitor.dart:377:51)
#112 ReturnStatement.accept (package:kernel/ast.dart:10206:43)
#113 visitList (package:kernel/ast.dart:14913:14)
#114 Block.visitChildren (package:kernel/ast.dart:9254:5)
#115 RecursiveVisitor.defaultNode (package:kernel/visitor.dart:1725:10)
#116 VisitorDefault.defaultTreeNode (package:kernel/visitor.dart:1521:39)
#117 TreeVisitorDefault.defaultStatement (package:kernel/visitor.dart:622:41)
#118 StatementVisitorDefaultMixin.visitBlock (package:kernel/visitor.dart:345:31)
#119 Block.accept (package:kernel/ast.dart:9247:43)
#120 FunctionNode.visitChildren (package:kernel/ast.dart:3915:11)
#121 RecursiveVisitor.defaultNode (package:kernel/visitor.dart:1725:10)
#122 VisitorDefault.defaultTreeNode (package:kernel/visitor.dart:1521:39)
#123 TreeVisitorDefaultMixin.visitFunctionNode (package:kernel/visitor.dart:577:45)
#124 FunctionNode.accept (package:kernel/ast.dart:3898:38)
#125 Procedure.visitChildren (package:kernel/ast.dart:3268:14)
#126 RecursiveVisitor.defaultNode (package:kernel/visitor.dart:1725:10)
#127 VisitorDefault.defaultTreeNode (package:kernel/visitor.dart:1521:39)
#128 TreeVisitorDefault.defaultMember (package:kernel/visitor.dart:626:35)
#129 MemberVisitorDefaultMixin.visitProcedure (package:kernel/visitor.dart:411:39)
#130 _ConstVisitor.visitProcedure (package:kernel/const_finder.dart:97:11)
#131 Procedure.accept (package:kernel/ast.dart:3255:40)
#132 visitList (package:kernel/ast.dart:14913:14)
#133 Library.visitChildren (package:kernel/ast.dart:599:5)
#134 ConstFinder.findInstances (package:kernel/const_finder.dart:208:15)
#135 main (file:///Volumes/External/cloud/engine/src/flutter/tools/const_finder/bin/main.dart:103:41)
#136 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:295:33)
#137 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)
It seems to fail while parsing a redirected const factory constructor that is not strictly related to the goal the command is trying to achieve.
I can send you the app.dill artifact that is producing this error in private, if you provide me a way to do so (file weights about 115MB).
Thanks
cc @alexmarkov
@johnniwinther This looks like a kernel (de-)serialization bug related to RedirectingFactoryTarget.
@johnniwinther were you able to confirm if this is a CFE issue or a VM issue ?