Skip to content

Commit 8d08e77

Browse files
authored
Add a feature to explicitly include a file's SemIR (#5961)
Trying to figure out an easy way to debug semir in the prelude, #5703 removed an option to set `--exclude-dump-file-prefix` to empty. But, this is probably an improvement over that flow... With this change, it's possible to add `//@dump-sem-ir-file` to a specific prelude file, and its full IR will be printed. Additionally, it becomes an option with the default `--dump-sem-ir-ranges=only` to add `//@dump-sem-ir-file` and get the full file's IR.
1 parent 3f9fc63 commit 8d08e77

11 files changed

+484
-10
lines changed

toolchain/check/check.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -340,17 +340,17 @@ static auto MaybeDumpFormattedSemIR(
340340
return;
341341
}
342342

343-
bool has_ranges = sem_ir.parse_tree().tokens().has_dump_sem_ir_ranges();
343+
const auto& tokens = sem_ir.parse_tree().tokens();
344344
if (options.dump_sem_ir_ranges ==
345345
CheckParseTreesOptions::DumpSemIRRanges::Only &&
346-
!has_ranges) {
346+
!tokens.has_dump_sem_ir_ranges() && !tokens.has_include_in_dumps()) {
347347
return;
348348
}
349349

350350
bool use_dump_sem_ir_ranges =
351351
options.dump_sem_ir_ranges !=
352352
CheckParseTreesOptions::DumpSemIRRanges::Ignore &&
353-
has_ranges;
353+
tokens.has_dump_sem_ir_ranges();
354354
SemIR::Formatter formatter(&sem_ir, tree_and_subtrees_getter,
355355
options.include_in_dumps, use_dump_sem_ir_ranges);
356356
formatter.Format();

toolchain/check/testdata/basics/dump_sem_ir_ranges.carbon

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,12 @@ library "[[@TEST_NAME]]";
9191

9292
fn F();
9393

94+
// --- explicit_dump_file.carbon
95+
96+
library "[[@TEST_NAME]]";
97+
98+
//@include-in-dumps
99+
94100
// CHECK:STDOUT: --- function.carbon
95101
// CHECK:STDOUT:
96102
// CHECK:STDOUT: constants {
@@ -320,3 +326,19 @@ fn F();
320326
// CHECK:STDOUT:
321327
// CHECK:STDOUT: fn @F();
322328
// CHECK:STDOUT:
329+
// CHECK:STDOUT: --- explicit_dump_file.carbon
330+
// CHECK:STDOUT:
331+
// CHECK:STDOUT: imports {
332+
// CHECK:STDOUT: %Core: <namespace> = namespace file.%Core.import, [concrete] {
333+
// CHECK:STDOUT: import Core//prelude
334+
// CHECK:STDOUT: import Core//prelude/...
335+
// CHECK:STDOUT: }
336+
// CHECK:STDOUT: }
337+
// CHECK:STDOUT:
338+
// CHECK:STDOUT: file {
339+
// CHECK:STDOUT: package: <namespace> = namespace [concrete] {
340+
// CHECK:STDOUT: .Core = imports.%Core
341+
// CHECK:STDOUT: }
342+
// CHECK:STDOUT: %Core.import = import Core
343+
// CHECK:STDOUT: }
344+
// CHECK:STDOUT:

toolchain/check/testdata/basics/dump_sem_ir_ranges_ignore.carbon

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ library "[[@TEST_NAME]]";
2525

2626
fn F();
2727

28+
// --- explicit_dump_file.carbon
29+
30+
library "[[@TEST_NAME]]";
31+
32+
//@include-in-dumps
33+
2834
// CHECK:STDOUT: --- with-range.carbon
2935
// CHECK:STDOUT:
3036
// CHECK:STDOUT: constants {
@@ -57,3 +63,9 @@ fn F();
5763
// CHECK:STDOUT:
5864
// CHECK:STDOUT: fn @F();
5965
// CHECK:STDOUT:
66+
// CHECK:STDOUT: --- explicit_dump_file.carbon
67+
// CHECK:STDOUT:
68+
// CHECK:STDOUT: file {
69+
// CHECK:STDOUT: package: <namespace> = namespace [concrete] {}
70+
// CHECK:STDOUT: }
71+
// CHECK:STDOUT:

toolchain/check/testdata/basics/dump_sem_ir_ranges_only.carbon

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ library "[[@TEST_NAME]]";
2727

2828
fn F();
2929

30+
// --- explicit_dump_file.carbon
31+
32+
library "[[@TEST_NAME]]";
33+
34+
//@include-in-dumps
35+
3036
// CHECK:STDOUT: --- with-range.carbon
3137
// CHECK:STDOUT:
3238
// CHECK:STDOUT: constants {
@@ -40,3 +46,9 @@ fn F();
4046
// CHECK:STDOUT:
4147
// CHECK:STDOUT: fn @F();
4248
// CHECK:STDOUT:
49+
// CHECK:STDOUT: --- explicit_dump_file.carbon
50+
// CHECK:STDOUT:
51+
// CHECK:STDOUT: file {
52+
// CHECK:STDOUT: package: <namespace> = namespace [concrete] {}
53+
// CHECK:STDOUT: }
54+
// CHECK:STDOUT:

0 commit comments

Comments
 (0)