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.

Backports commit 8bff06a0bbf257a2083223534c1607bf87d913e6 from qemu
This commit is contained in:
Paolo Bonzini 2018-02-25 19:19:20 -05:00 committed by Lioncash
parent 5608b53b6f
commit a47c68164d
No known key found for this signature in database
GPG Key ID: 4E3C3CC1031BA9C7
2 changed files with 5 additions and 1 deletions

View File

@ -67,6 +67,10 @@ static union MSVC_FLOAT_HACK __NAN = {{0x00, 0x00, 0xC0, 0x7F}};
#define NAN (0.0 / 0.0)
#endif
#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 code is a copy of SOFTFLOAT_GNUC_PREREQ, see softfloat-macros.h.

View File

@ -193,7 +193,7 @@ typedef uint64_t tcg_insn_unit;
/* The port better have done this. */
#endif
#ifdef CONFIG_DEBUG_TCG
#if defined CONFIG_DEBUG_TCG || defined QEMU_STATIC_ANALYSIS
# define tcg_debug_assert(X) do { assert(X); } while (0)
#elif QEMU_GNUC_PREREQ(4, 5)
# define tcg_debug_assert(X) \