diff --git a/coverity/model.c b/coverity/model.c new file mode 100644 index 000000000..afe7ca5a6 --- /dev/null +++ b/coverity/model.c @@ -0,0 +1,18 @@ +/* Coverity Scan model + * Copyright (C) 2017 Peter Meerwald-Stadler + * + * This is a modeling file for Coverity Scan which helps to avoid false + * positives and increase scanning accuracy by explaining code Coverity + * can't see (out of tree libraries); the model file must be uploaded by + * an admin to: + * https://scan.coverity.com/projects/pulseaudio?tab=analysis_settings + */ + +void fail(void) { + __coverity_panic__(); +} + +void fail_unless(int x) { + if (!x) + __coverity_panic__(); +} diff --git a/src/pulsecore/macro.h b/src/pulsecore/macro.h index 2c5d5f283..dbce5cd06 100644 --- a/src/pulsecore/macro.h +++ b/src/pulsecore/macro.h @@ -186,6 +186,7 @@ static inline size_t PA_ALIGN(size_t l) { /* pa_assert_se() is an assert which guarantees side effects of x, * i.e. is never optimized away, regardless of NDEBUG or FASTPATH. */ +#ifndef __COVERITY__ #define pa_assert_se(expr) \ do { \ if (PA_UNLIKELY(!(expr))) { \ @@ -193,6 +194,14 @@ static inline size_t PA_ALIGN(size_t l) { abort(); \ } \ } while (false) +#else +#define pa_assert_se(expr) \ + do { \ + int _unique_var = (expr); \ + if (!_unique_var) \ + abort(); \ + } while (false) +#endif /* Does exactly nothing */ #define pa_nop() do {} while (false)