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;