Skip to content

[cfe] Crash with cyclic dependency in type alias #43800

@eernstg

Description

@eernstg

Consider the following program:

typedef F = Function(Function<X extends F>());

void main() {}

This program crashes the front end with a fresh dart from 342f9f0, with a stack trace that indicates an infinite loop. Hence, some extra checks for cyclic dependencies in a type alias seem to be needed.

Crash when compiling null,
at character offset null:
Stack Overflow
#0      FunctionType.visitChildren (package:kernel/ast.dart:7487:3)
#1      RecursiveVisitor.defaultNode (package:kernel/visitor.dart:603:10)
#2      Visitor.defaultDartType (package:kernel/visitor.dart:518:39)
#3      Visitor.visitFunctionType (package:kernel/visitor.dart:525:45)
#4      FunctionType.accept (package:kernel/ast.dart:7481:42)
#5      FunctionType.visitChildren (package:kernel/ast.dart:9504:14)
#6      RecursiveVisitor.defaultNode (package:kernel/visitor.dart:603:10)
#7      Visitor.defaultDartType (package:kernel/visitor.dart:518:39)
#8      Visitor.visitFunctionType (package:kernel/visitor.dart:525:45)
#9      FunctionType.accept (package:kernel/ast.dart:7481:42)
#10     TypeParameter.visitChildren (package:kernel/ast.dart:8552:11)
...
#14170  Visitor.defaultTreeNode (package:kernel/visitor.dart:603:10)
#14171  TreeVisitor.visitLibrary (package:kernel/visitor.dart:246:35)
#14172  List.forEach (dart:core-patch/growable_array.dart:313:8)
#14173  transformLibraries (package:vm/transformations/call_site_annotator.dart>
#14174  VmTarget.performModularTransformationsOnLibraries (package:vm/target/vm>
#14175  KernelTarget.runBuildTransformations (package:front_end/src/fasta/kerne>
#14176  KernelTarget.buildComponent.<anonymous closure> (package:front_end/src/>
#14177  _rootRunUnary (dart:async/zone.dart:1198:47)
#14178  _CustomZone.runUnary (dart:async/zone.dart:1100:19)
...

Variants like typedef F = List<Function<X extends F>()> Function(); and typedef F = Function(List<Function<X extends F>()>); encounter the same issue.

Metadata

Metadata

Assignees

Labels

crashProcess exits with SIGSEGV, SIGABRT, etc. An unhandled exception is not a crash.legacy-area-front-endLegacy: Use area-dart-model instead.

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions