compat_compiler: add a macro to prevent coverity deadcode warnings.

The POSSIBLE(e) macro evaluates to the value of (e), but does so in
a way that a static analyzer will not conclude that (e) is
impossible.  We can use this when we expect our regular compilers to
eliminate deadcode, but we don't want coverity to complain about it.

Part of a fix for 32960.
This commit is contained in:
Nick Mathewson 2020-01-15 10:21:18 -05:00
parent d430b5a074
commit 5e27caa60c

View File

@ -227,4 +227,17 @@
#define EAT_SEMICOLON \
struct dummy_semicolon_eater__
/**
* Tell our static analysis tool to believe that (clang's scan-build or
* coverity scan) that an expression might be true. We use this to suppress
* dead-code warnings.
**/
#if defined(__COVERITY__) || defined(__clang_analyzer__)
/* By calling getenv, we force the analyzer not to conclude that 'expr' is
* false. */
#define POSSIBLE(expr) ((expr) || getenv("STATIC_ANALYZER_DEADCODE_DUMMY_"))
#else
#define POSSIBLE(expr) (expr)
#endif
#endif /* !defined(TOR_COMPAT_COMPILER_H) */