qemu/compiler.h: Add qemu_build_not_reached
authorRichard Henderson <richard.henderson@linaro.org>
Mon, 23 Sep 2019 18:24:12 +0000 (11:24 -0700)
committerRichard Henderson <richard.henderson@linaro.org>
Wed, 25 Sep 2019 17:19:57 +0000 (10:19 -0700)
Use this as a compile-time assert that a particular
code path is not reachable.

Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
include/qemu/compiler.h

index 20780e722d51260ae4f9923811fcf16367fd16d3..7b93c733407eb05a9d2870abb099c7648b867c7c 100644 (file)
 #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__))
 
+/**
+ * qemu_build_not_reached()
+ *
+ * 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")
+    qemu_build_not_reached(void);
+#else
+#define qemu_build_not_reached()  g_assert_not_reached()
+#endif
+
 #endif /* COMPILER_H */