Skip to content

const_finder/ast_from_binary is crashing during dill parsing while running flutter icon tree shakingΒ #55855

Open
@sroddy

Description

@sroddy

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

Metadata

Metadata

Assignees

Labels

P2A bug or feature request we're likely to work oncustomer-flutterlegacy-area-front-endLegacy: Use area-dart-model instead.triagedIssue has been triaged by sub team

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions