On Mon, 6 Mar 2017, at 01:13 PM, Peter Meerwald-Stadler wrote: > the modeling file help 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 > > the pa_assert_se() macro needs to be rewritten for Coverity so that > the assignment is not declared a side-effect > > Signed-off-by: Peter Meerwald-Stadler <pmeerw at pmeerw.net> > Cc: Philip Withnall <philip at tecnocode.co.uk> > --- > coverity/model.c | 18 ++++++++++++++++++ > src/pulsecore/macro.h | 9 +++++++++ > 2 files changed, 27 insertions(+) > create mode 100644 coverity/model.c > > diff --git a/coverity/model.c b/coverity/model.c > new file mode 100644 > index 0000000..afe7ca5 > --- /dev/null > +++ b/coverity/model.c > @@ -0,0 +1,18 @@ > +/* Coverity Scan model > + * Copyright (C) 2017 Peter Meerwald-Stadler <pmeerw at pmeerw.net> > + * > + * 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 2c5d5f2..dbce5cd 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) > -- Ack, go ahead and push this. Do we need to modify our Coverity project settings? -- Arun