Le 28/01/2021 à 18:21, Stefan Weil a écrit : > gcc (Debian 10.2.1-6) 10.2.1 20210110 aborts builds with enabled sanitizers: > > ../../../target/rx/op_helper.c: In function ‘helper_scmpu’: > ../../../target/rx/op_helper.c:213:24: error: ‘tmp1’ may be used > uninitialized in this function [-Werror=maybe-uninitialized] > 213 | env->psw_c = (tmp0 >= tmp1); > | ~~~~~~^~~~~~~~ > ../../../target/rx/op_helper.c:213:24: error: ‘tmp0’ may be used > uninitialized in this function [-Werror=maybe-uninitialized] > ../../../target/rx/op_helper.c: In function ‘helper_suntil’: > ../../../target/rx/op_helper.c:299:23: error: ‘tmp’ may be used uninitialized > in this function [-Werror=maybe-uninitialized] > 299 | env->psw_c = (tmp <= env->regs[2]); > | ~~~~~^~~~~~~~~~~~~~~~ > ../../../target/rx/op_helper.c: In function ‘helper_swhile’: > ../../../target/rx/op_helper.c:318:23: error: ‘tmp’ may be used uninitialized > in this function [-Werror=maybe-uninitialized] > 318 | env->psw_c = (tmp <= env->regs[2]); > | ~~~~~^~~~~~~~~~~~~~~~ > > Rewriting the code fixes those errors. > > Signed-off-by: Stefan Weil <s...@weilnetz.de> > --- > > Those error are false positives, but simple code changes help the > compiler (and perhaps reviewers) to understand it better. > > Stefan > > > target/rx/op_helper.c | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) > > diff --git a/target/rx/op_helper.c b/target/rx/op_helper.c > index 59389f4992..4d315b4449 100644 > --- a/target/rx/op_helper.c > +++ b/target/rx/op_helper.c > @@ -201,14 +201,14 @@ void helper_scmpu(CPURXState *env) > if (env->regs[3] == 0) { > return; > } > - while (env->regs[3] != 0) { > + do { > tmp0 = cpu_ldub_data_ra(env, env->regs[1]++, GETPC()); > tmp1 = cpu_ldub_data_ra(env, env->regs[2]++, GETPC()); > env->regs[3]--; > if (tmp0 != tmp1 || tmp0 == '\0') { > break; > } > - } > + } while (env->regs[3] != 0); > env->psw_z = tmp0 - tmp1; > env->psw_c = (tmp0 >= tmp1); > } > @@ -287,14 +287,14 @@ void helper_suntil(CPURXState *env, uint32_t sz) > if (env->regs[3] == 0) { > return ; > } > - while (env->regs[3] != 0) { > + do { > tmp = cpu_ldufn[sz](env, env->regs[1], GETPC()); > env->regs[1] += 1 << sz; > env->regs[3]--; > if (tmp == env->regs[2]) { > break; > } > - } > + } while (env->regs[3] != 0); > env->psw_z = tmp - env->regs[2]; > env->psw_c = (tmp <= env->regs[2]); > } > @@ -306,14 +306,14 @@ void helper_swhile(CPURXState *env, uint32_t sz) > if (env->regs[3] == 0) { > return ; > } > - while (env->regs[3] != 0) { > + do { > tmp = cpu_ldufn[sz](env, env->regs[1], GETPC()); > env->regs[1] += 1 << sz; > env->regs[3]--; > if (tmp != env->regs[2]) { > break; > } > - } > + } while (env->regs[3] != 0); > env->psw_z = env->regs[3]; > env->psw_c = (tmp <= env->regs[2]); > } >
Applied to my trivial-patches branch. Thanks, Laurent