compiler: never omit assertions if using a static analysis tool

Assertions help both Coverity and the clang static analyzer avoid
false positives, but on the other hand both are confused when
the condition is compiled as (void)(x != FOO).  Always expand
assertion macros when using Coverity or clang, through a new
QEMU_STATIC_ANALYSIS preprocessor symbol.

This fixes a couple false positives in TCG.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Paolo Bonzini 2016-07-15 18:27:40 +02:00
parent 3cbeb52467
commit 8bff06a0bb
2 changed files with 4 additions and 1 deletions

View File

@ -3,6 +3,9 @@
#ifndef COMPILER_H #ifndef COMPILER_H
#define COMPILER_H #define COMPILER_H
#if defined __clang_analyzer__ || defined __COVERITY__
#define QEMU_STATIC_ANALYSIS 1
#endif
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| The macro QEMU_GNUC_PREREQ tests for minimum version of the GNU C compiler. | The macro QEMU_GNUC_PREREQ tests for minimum version of the GNU C compiler.

View File

@ -191,7 +191,7 @@ typedef uint64_t tcg_insn_unit;
#endif #endif
#ifdef CONFIG_DEBUG_TCG #if defined CONFIG_DEBUG_TCG || defined QEMU_STATIC_ANALYSIS
# define tcg_debug_assert(X) do { assert(X); } while (0) # define tcg_debug_assert(X) do { assert(X); } while (0)
#elif QEMU_GNUC_PREREQ(4, 5) #elif QEMU_GNUC_PREREQ(4, 5)
# define tcg_debug_assert(X) \ # define tcg_debug_assert(X) \