JSSpecCompiler: Compare CFG when running regression tests

This commit is contained in:
Dan Klishch 2023-10-01 23:31:15 -04:00 committed by Andrew Kaster
parent ce6b987330
commit 8126e76e59
Notes: sideshowbarker 2024-07-17 22:01:16 +09:00
2 changed files with 62 additions and 2 deletions

View file

@ -132,3 +132,53 @@ TreeList
ReturnNode
Var b
===== CFG after cfg-building =====
f():
0:
ControlFlowBranch true=3 false=7
UnresolvedReference cond1
1:
ControlFlowFunctionReturn
Var $return
2:
BinaryOperation Assignment
Var $return
Var b
ControlFlowJump jump=1
3:
BinaryOperation Declaration
Var a
MathematicalConstant 1
ControlFlowBranch true=5 false=6
UnresolvedReference cond2
4:
ControlFlowJump jump=2
5:
BinaryOperation Declaration
Var b
Var a
ControlFlowJump jump=4
6:
BinaryOperation Declaration
Var b
MathematicalConstant 3
ControlFlowJump jump=4
7:
BinaryOperation Declaration
Var b
MathematicalConstant 4
ControlFlowJump jump=2
8:
BinaryOperation Assignment
Var $return
Error ""
ControlFlowJump jump=1

View file

@ -18,6 +18,7 @@ struct TestDescription {
struct Flag {
StringView name;
bool dump_ast = false;
bool dump_cfg = false;
};
Vector<StringView> sources;
@ -29,15 +30,16 @@ constexpr StringView stderr_capture_filename = "stderr"sv;
constexpr StringView compiler_binary_name = "JSSpecCompiler"sv;
constexpr StringView relative_path_to_test = "Tests"sv;
constexpr TestDescription::Flag always_dump_ast = {
constexpr TestDescription::Flag always_dump_all = {
.name = "all"sv,
.dump_ast = true,
.dump_cfg = true
};
const Array regression_tests = {
TestDescription {
.sources = { "simple.cpp"sv },
.flags = { always_dump_ast },
.flags = { always_dump_all },
},
};
@ -52,6 +54,7 @@ Vector<DeprecatedString> build_command_line_arguments(LexicalPath const& test_so
Vector<DeprecatedString> result;
StringBuilder dump_ast_option;
StringBuilder dump_cfg_option;
for (auto const& flag : description.flags) {
if (flag.dump_ast) {
@ -59,9 +62,16 @@ Vector<DeprecatedString> build_command_line_arguments(LexicalPath const& test_so
dump_ast_option.append(","sv);
dump_ast_option.append(flag.name);
}
if (flag.dump_cfg) {
if (!dump_cfg_option.is_empty())
dump_cfg_option.append(","sv);
dump_cfg_option.append(flag.name);
}
}
if (!dump_ast_option.is_empty())
result.append(DeprecatedString::formatted("--dump-ast={}", dump_ast_option.string_view()));
if (!dump_cfg_option.is_empty())
result.append(DeprecatedString::formatted("--dump-cfg={}", dump_cfg_option.string_view()));
if (test_source.has_extension(".cpp"sv))
result.append("-xc++"sv);