dart-lang / sdk

The Dart SDK, including the VM, JS and Wasm compilers, analysis, core libraries, and more.
https://dart.dev
BSD 3-Clause "New" or "Revised" License
10.2k stars 1.57k forks source link

CFE Crash: `Unsupported operation: Statement constant evaluation does not support PatternSwitchStatement.` #53111

Open jensjoha opened 1 year ago

jensjoha commented 1 year ago
out/ReleaseX64/dart --enable-asserts pkg/front_end/test/fasta/weak_suite.dart -DsemiFuzz=true -- weak/const_functions/const_functions_switch_statements

Can also be triggered without fuzzing by just reordering the file.

Crashes like this:

#0      StatementConstantEvaluator.defaultStatement (package:front_end/src/fasta/kernel/constant_evaluator.dart:5462:5)
#1      StatementVisitor.visitPatternSwitchStatement (package:kernel/visitor.dart:139:7)
#2      PatternSwitchStatement.accept (package:kernel/src/ast/patterns.dart:1854:14)
#3      StatementConstantEvaluator.visitLabeledStatement (package:front_end/src/fasta/kernel/constant_evaluator.dart:5580:46)
#4      LabeledStatement.accept (package:kernel/ast.dart:9198:43)
#5      StatementConstantEvaluator.visitBlock.<anonymous closure> (package:front_end/src/fasta/kernel/constant_evaluator.dart:5480:50)
#6      ConstantEvaluator.withNewEnvironment (package:front_end/src/fasta/kernel/constant_evaluator.dart:5323:18)
#7      StatementConstantEvaluator.visitBlock (package:front_end/src/fasta/kernel/constant_evaluator.dart:5478:26)
#8      Block.accept (package:kernel/ast.dart:8994:43)
#9      ConstantEvaluator.executeBody (package:front_end/src/fasta/kernel/constant_evaluator.dart:2606:40)
[...]

/cc @johnniwinther @kallentu

johnniwinther commented 1 year ago

With https://dart-review.googlesource.com/c/sdk/+/317884 the crash is avoided. The semi-fuzzing still fails, though, since the evaluator tries to evaluate the pattern switch statement before it has been lowered to a switch statement that it supports.