Remove unnecessary "goto ok;" in generated C code
diff --git a/internal/cgen/func.go b/internal/cgen/func.go
index eca0bed..ba12ee7 100644
--- a/internal/cgen/func.go
+++ b/internal/cgen/func.go
@@ -271,7 +271,7 @@
if n.Effect().Coroutine() {
b.writex(k.bBodySuspend)
} else if k.hasGotoOK {
- b.writes("\ngoto ok;\nok:\n") // The goto avoids the "unused label" warning.
+ b.writes("\nok:\n")
}
}
@@ -501,11 +501,17 @@
}
func (g *gen) writeFuncImplBodySuspend(b *buffer) error {
+ if (g.currFunk.coroSuspPoint > 0) || g.currFunk.astFunc.Effect().Coroutine() {
+ if !g.currFunk.hasGotoOK {
+ b.writes("\ngoto ok;") // Avoid the "unused label" warning.
+ }
+ b.writes("\nok:\n")
+ }
+
if g.currFunk.coroSuspPoint > 0 {
// We've reached the end of the function body. Reset the coroutine
// suspension point so that the next call to this function starts at
// the top.
- b.writes("\ngoto ok;\nok:\n") // The goto avoids the "unused label" warning.
b.printf("self->private_impl.%s%s[0] = 0;\n",
pPrefix, g.currFunk.astFunc.FuncName().Str(g.tm))
b.writes("goto exit;\n}\n\n") // Close the coroutine switch.
@@ -523,9 +529,6 @@
return err
}
b.writes("\n")
-
- } else if g.currFunk.astFunc.Effect().Coroutine() {
- b.writes("\ngoto ok;\nok:\n") // The goto avoids the "unused label" warning.
}
return nil
}
diff --git a/internal/cgen/statement.go b/internal/cgen/statement.go
index cf5c0f8..d843a38 100644
--- a/internal/cgen/statement.go
+++ b/internal/cgen/statement.go
@@ -678,6 +678,7 @@
macro := ""
if maybeSuspend {
macro = "_MAYBE_SUSPEND"
+ g.currFunk.hasGotoOK = true
}
b.printf("WUFFS_BASE__COROUTINE_SUSPENSION_POINT%s(%d);\n", macro, g.currFunk.coroSuspPoint)
return nil
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index e3383c7..c99ce5c 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -22097,7 +22097,6 @@
}
self->private_impl.f_call_sequence = 3;
- goto ok;
ok:
self->private_impl.p_decode_image_config[0] = 0;
goto exit;
@@ -22206,7 +22205,6 @@
}
self->private_impl.f_call_sequence = 4;
- goto ok;
ok:
self->private_impl.p_decode_frame_config[0] = 0;
goto exit;
@@ -22394,7 +22392,6 @@
}
self->private_impl.f_call_sequence = 255;
- goto ok;
ok:
self->private_impl.p_decode_frame[0] = 0;
goto exit;
@@ -22508,7 +22505,6 @@
status = wuffs_base__make_status(NULL);
goto ok;
- goto ok;
ok:
goto exit;
exit:
@@ -22771,7 +22767,6 @@
status = wuffs_base__make_status(NULL);
goto ok;
- goto ok;
ok:
goto exit;
exit:
@@ -22912,7 +22907,6 @@
status = wuffs_base__make_status(NULL);
goto ok;
- goto ok;
ok:
goto exit;
exit:
@@ -23081,7 +23075,6 @@
status = wuffs_base__make_status(NULL);
goto ok;
- goto ok;
ok:
goto exit;
exit:
@@ -24167,7 +24160,6 @@
label__outer__break:;
self->private_impl.f_end_of_data = true;
- goto ok;
ok:
self->private_impl.p_decode_tokens[0] = 0;
goto exit;
@@ -25728,7 +25720,6 @@
WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(1);
}
- goto ok;
ok:
self->private_impl.p_transform_io[0] = 0;
goto exit;
@@ -25886,7 +25877,6 @@
}
}
- goto ok;
ok:
self->private_impl.p_decode_blocks[0] = 0;
goto exit;
@@ -26006,7 +25996,6 @@
}
}
- goto ok;
ok:
self->private_impl.p_decode_uncompressed[0] = 0;
goto exit;
@@ -27597,7 +27586,6 @@
goto exit;
}
- goto ok;
ok:
self->private_impl.p_decode_huffman_slow[0] = 0;
goto exit;
@@ -27869,7 +27857,6 @@
}
label__0__break:;
- goto ok;
ok:
self->private_impl.p_transform_io[0] = 0;
goto exit;
@@ -28113,7 +28100,6 @@
WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(1);
}
- goto ok;
ok:
self->private_impl.p_write_to[0] = 0;
goto exit;
@@ -28669,7 +28655,6 @@
status = wuffs_base__make_status(NULL);
goto ok;
- goto ok;
ok:
self->private_impl.p_tell_me_more[0] = 0;
goto exit;
@@ -28937,7 +28922,6 @@
wuffs_base__u64__sat_add_indirect(&self->private_impl.f_num_decoded_frame_configs_value, 1);
self->private_impl.f_call_sequence = 4;
- goto ok;
ok:
self->private_impl.p_decode_frame_config[0] = 0;
goto exit;
@@ -29603,7 +29587,6 @@
goto suspend;
}
- goto ok;
ok:
self->private_impl.p_decode_extension[0] = 0;
goto exit;
@@ -29672,7 +29655,6 @@
iop_a_src += self->private_data.s_skip_blocks[0].scratch;
}
- goto ok;
ok:
self->private_impl.p_skip_blocks[0] = 0;
goto exit;
@@ -29891,7 +29873,6 @@
goto suspend;
}
- goto ok;
ok:
self->private_impl.p_decode_ae[0] = 0;
goto exit;
@@ -30361,7 +30342,6 @@
wuffs_lzw__decoder__set_literal_width(&self->private_data.f_lzw, ((uint32_t)(v_lw)));
self->private_impl.f_previous_lzw_decode_ended_abruptly = true;
- goto ok;
ok:
self->private_impl.p_decode_id_part1[0] = 0;
goto exit;
@@ -30568,7 +30548,6 @@
goto exit;
}
- goto ok;
ok:
self->private_impl.p_decode_id_part2[0] = 0;
goto exit;
@@ -31178,7 +31157,6 @@
goto exit;
}
- goto ok;
ok:
self->private_impl.p_transform_io[0] = 0;
goto exit;
@@ -32635,7 +32613,6 @@
}
self->private_impl.f_end_of_data = true;
- goto ok;
ok:
self->private_impl.p_decode_tokens[0] = 0;
goto exit;
@@ -32937,7 +32914,6 @@
}
label__0__break:;
- goto ok;
ok:
self->private_impl.p_decode_leading[0] = 0;
goto exit;
@@ -33118,7 +33094,6 @@
}
}
- goto ok;
ok:
self->private_impl.p_decode_comment[0] = 0;
goto exit;
@@ -33279,7 +33254,6 @@
goto exit;
}
- goto ok;
ok:
self->private_impl.p_decode_inf_nan[0] = 0;
goto exit;
@@ -33425,7 +33399,6 @@
}
label__outer__break:;
- goto ok;
ok:
self->private_impl.p_decode_trailer[0] = 0;
goto exit;
@@ -33900,7 +33873,6 @@
}
self->private_impl.f_call_sequence = 4;
- goto ok;
ok:
self->private_impl.p_decode_frame_config[0] = 0;
goto exit;
@@ -34009,7 +33981,6 @@
label__0__break:;
self->private_impl.f_call_sequence = 255;
- goto ok;
ok:
self->private_impl.p_decode_frame[0] = 0;
goto exit;
@@ -34099,7 +34070,6 @@
status = wuffs_base__make_status(NULL);
goto ok;
- goto ok;
ok:
goto exit;
exit:
@@ -34699,7 +34669,6 @@
goto exit;
}
- goto ok;
ok:
self->private_impl.p_transform_io[0] = 0;
goto exit;
@@ -36851,7 +36820,6 @@
}
self->private_impl.f_call_sequence = 3;
- goto ok;
ok:
self->private_impl.p_decode_image_config[0] = 0;
goto exit;
@@ -37577,7 +37545,6 @@
}
self->private_impl.f_call_sequence = 4;
- goto ok;
ok:
self->private_impl.p_decode_frame_config[0] = 0;
goto exit;
@@ -37704,7 +37671,6 @@
label__0__break:;
self->private_impl.f_call_sequence = 255;
- goto ok;
ok:
self->private_impl.p_decode_frame[0] = 0;
goto exit;
@@ -38003,7 +37969,6 @@
}
}
- goto ok;
ok:
self->private_impl.p_decode_pass[0] = 0;
goto exit;
@@ -38807,7 +38772,6 @@
}
self->private_impl.f_call_sequence = 4;
- goto ok;
ok:
self->private_impl.p_decode_frame_config[0] = 0;
goto exit;
@@ -38972,7 +38936,6 @@
}
self->private_impl.f_call_sequence = 255;
- goto ok;
ok:
self->private_impl.p_decode_frame[0] = 0;
goto exit;