Richard Henderson <richard.hender...@linaro.org> writes:
> Use this as a compile-time assert that a particular > code path is not reachable. > > Signed-off-by: Richard Henderson <richard.hender...@linaro.org> Reviewed-by: Alex Bennée <alex.ben...@linaro.org> > --- > include/qemu/compiler.h | 15 +++++++++++++++ > 1 file changed, 15 insertions(+) > > diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h > index 20780e722d..6604ccea92 100644 > --- a/include/qemu/compiler.h > +++ b/include/qemu/compiler.h > @@ -221,4 +221,19 @@ > #define QEMU_GENERIC9(x, a0, ...) QEMU_GENERIC_IF(x, a0, QEMU_GENERIC8(x, > __VA_ARGS__)) > #define QEMU_GENERIC10(x, a0, ...) QEMU_GENERIC_IF(x, a0, QEMU_GENERIC9(x, > __VA_ARGS__)) > > +/** > + * optimize_away() > + * > + * The compiler, during optimization, is expected to prove that a call > + * to this function cannot be reached and remove it. If the compiler > + * supports QEMU_ERROR, this will be reported at compile time; otherwise > + * this will be reported at link time, due to the missing symbol. > + */ > +#ifdef __OPTIMIZE__ > +extern void QEMU_NORETURN QEMU_ERROR("code path is reachable") > + optimize_away(void); > +#else > +#define optimize_away() g_assert_not_reached() > +#endif > + > #endif /* COMPILER_H */ -- Alex Bennée