Skip to content

Commit a1d72da

Browse files
committed
Only emit loop break labels when match-embedded break uses goto, fixing -Werror unused-label failures on plain loops.
1 parent 32bbe3f commit a1d72da

1 file changed

Lines changed: 9 additions & 1 deletion

File tree

src/cgen/mod.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ pub struct Codegen {
7474
epilogue_label: String,
7575
loop_continue_label: Option<String>,
7676
loop_break_label: Option<String>,
77+
loop_break_label_used: bool,
7778
match_in_switch: u32,
7879
/// When true (single-file merge), module calls use `{alias}_{func}` C names.
7980
mangle_merged_module_calls: bool,
@@ -118,6 +119,7 @@ impl Codegen {
118119
epilogue_label: "epilogue".to_string(),
119120
loop_continue_label: None,
120121
loop_break_label: None,
122+
loop_break_label_used: false,
121123
match_in_switch: 0,
122124
mangle_merged_module_calls: false,
123125
multi_file_module: None,
@@ -1990,6 +1992,7 @@ impl Codegen {
19901992
self.write_indent();
19911993
if self.match_in_switch > 0 {
19921994
if let Some(ref label) = self.loop_break_label {
1995+
self.loop_break_label_used = true;
19931996
self.writeln(&format!("goto {};", label));
19941997
} else {
19951998
self.writeln("break;");
@@ -2452,6 +2455,8 @@ impl Codegen {
24522455
self.temp_var_counter += 1;
24532456
}
24542457
let prev_break = self.loop_break_label.take();
2458+
let prev_break_used = self.loop_break_label_used;
2459+
self.loop_break_label_used = false;
24552460
if let Some(ref label) = break_label {
24562461
self.loop_break_label = Some(label.clone());
24572462
}
@@ -2476,11 +2481,14 @@ impl Codegen {
24762481
self.indent_level -= 1;
24772482
self.write_indent();
24782483
self.writeln("}");
2479-
if let Some(label) = break_label {
2484+
if let Some(label) = break_label
2485+
&& self.loop_break_label_used
2486+
{
24802487
self.write_indent();
24812488
self.writeln(&format!("{}:", label));
24822489
}
24832490
self.loop_break_label = prev_break;
2491+
self.loop_break_label_used = prev_break_used;
24842492
}
24852493
IRStmt::UnsafeBlock(unsafe_block) => {
24862494
// Unsafe blocks lower to regular C blocks (no special syntax)

0 commit comments

Comments
 (0)