On 10/29/20 1:28 PM, Thomas Huth wrote: > To be able to compile this file with -Werror=implicit-fallthrough, > we need to add some fallthrough annotations to the case statements > that might fall through. Unfortunately, the typical "/* fallthrough */" > comments do not work here as expected since some case labels are > wrapped in macros and the compiler fails to match the comments in > this case. But using __attribute__((fallthrough)) seems to work fine, > so let's use that instead. > > Signed-off-by: Thomas Huth <th...@redhat.com> > --- > tcg/optimize.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/tcg/optimize.c b/tcg/optimize.c > index 220f4601d5..c2768c9770 100644 > --- a/tcg/optimize.c > +++ b/tcg/optimize.c > @@ -26,6 +26,12 @@ > #include "qemu/osdep.h" > #include "tcg/tcg-op.h" > > +#if __has_attribute(fallthrough) > +# define fallthrough() __attribute__((fallthrough)) > +#else > +# define fallthrough() do {} while (0) > +#endif
This looks something we can reuse, what about adding it as QEMU_FALLTHROUGH in "qemu/compiler.h"? > + > #define CASE_OP_32_64(x) \ > glue(glue(case INDEX_op_, x), _i32): \ > glue(glue(case INDEX_op_, x), _i64) > @@ -855,6 +861,7 @@ void tcg_optimize(TCGContext *s) > if ((arg_info(op->args[1])->mask & 0x80) != 0) { > break; > } > + fallthrough(); > CASE_OP_32_64(ext8u): > mask = 0xff; > goto and_const; > @@ -862,6 +869,7 @@ void tcg_optimize(TCGContext *s) > if ((arg_info(op->args[1])->mask & 0x8000) != 0) { > break; > } > + fallthrough(); > CASE_OP_32_64(ext16u): > mask = 0xffff; > goto and_const; > @@ -869,6 +877,7 @@ void tcg_optimize(TCGContext *s) > if ((arg_info(op->args[1])->mask & 0x80000000) != 0) { > break; > } > + fallthrough(); > case INDEX_op_ext32u_i64: > mask = 0xffffffffU; > goto and_const; > @@ -886,6 +895,7 @@ void tcg_optimize(TCGContext *s) > if ((arg_info(op->args[1])->mask & 0x80000000) != 0) { > break; > } > + fallthrough(); > case INDEX_op_extu_i32_i64: > /* We do not compute affected as it is a size changing op. */ > mask = (uint32_t)arg_info(op->args[1])->mask; >