[Spice-devel] [spice-server PATCH 2/3] test-loop: increment a variable outside of spice_assert

Frediano Ziglio fziglio at redhat.com
Mon Aug 12 07:44:46 UTC 2019


> > 
> > On 8/11/19 2:56 PM, Frediano Ziglio wrote:
> > >>
> > >> spice_assert is a macro and it may be that variable will
> > >> be incremented twice (in theory, possibly not in practice).
> > >>
> > > 
> > > No, the issue is that Coverity assume that code can be stripped out
> > > as usually assert can be stripped out (defining NDEBUG for normal
> > > assert).
> > 
> > You are correct that this is what the covscan complains about:
> > "The containing function might work differently in a non-debug build."
> > 
> > But spice_assert definition does not depend on NDEBUG.
> > On the other hand it does not happen in reality that
> > the variable is incremented twice.
> > 
> > I'll change the above comment to say
> >    spice_assert is a macro so prevent side-effects by
> >    not changing the variable in it.
> > 
> 
> Why not telling the truth? That is to remove a Coverity false
> positive specifying which one?
> 

Is it coverity or clang ?
I just realized that covscan now uses both of them.

> > Uri.
> > 
> > > 
> > >> Simply do it one line above.
> > >>
> > >> Found by covscan
> > >>
> > >> Signed-off-by: Uri Lublin <uril at redhat.com>
> > 
> > 
> > > 
> > > Beside the commit message no complains to make Coverity happy
> > > 
> > >> ---
> > >>   server/tests/test-loop.c | 3 ++-
> > >>   1 file changed, 2 insertions(+), 1 deletion(-)
> > >>
> > >> diff --git a/server/tests/test-loop.c b/server/tests/test-loop.c
> > >> index 82af80ab3..4df3a7d20 100644
> > >> --- a/server/tests/test-loop.c
> > >> +++ b/server/tests/test-loop.c
> > >> @@ -78,7 +78,8 @@ static SpiceTimer *twice_timers_remove[2] = { NULL,
> > >> NULL
> > >> };
> > >>   static int twice_remove_called = 0;
> > >>   static void timer_not_twice_remove(void *opaque)
> > >>   {
> > >> -    spice_assert(++twice_remove_called == 1);
> > >> +    ++twice_remove_called;
> > >> +    spice_assert(twice_remove_called == 1);
> > >>   
> > >>       /* delete timers, should not have another call */
> > >>       core->timer_remove(twice_timers_remove[0]);
> > > 



More information about the Spice-devel mailing list