On Thu, Feb 04, 2016 at 12:38:54PM +0100, Bert Huijben wrote:
> 
> 
> > -----Original Message-----
> > From: phi...@apache.org [mailto:phi...@apache.org]
> > Sent: woensdag 3 februari 2016 15:27
> > To: comm...@subversion.apache.org
> > Subject: svn commit: r1728324 -
> > /subversion/trunk/subversion/tests/svn_test_main.c
> > 
> > Author: philip
> > Date: Wed Feb  3 14:27:01 2016
> > New Revision: 1728324
> > 
> > URL: http://svn.apache.org/viewvc?rev=1728324&view=rev
> > Log:
> > * subversion/tests/svn_test_main.c
> >   (call_setjmp): New, to fix some potential setjmp/longjmp clobbers.
> >   (do_test_num): Call new function, tweak comment to explain why
> >    a parameter is modified.
> > 
> > Modified:
> >     subversion/trunk/subversion/tests/svn_test_main.c
> > 
> > Modified: subversion/trunk/subversion/tests/svn_test_main.c
> > URL:
> > http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/svn_test
> > _main.c?rev=1728324&r1=1728323&r2=1728324&view=diff
> > ==========================================================
> > ====================
> > --- subversion/trunk/subversion/tests/svn_test_main.c (original)
> > +++ subversion/trunk/subversion/tests/svn_test_main.c Wed Feb  3
> > 14:27:01 2016
> > @@ -393,6 +393,16 @@ log_results(const char *progname,
> >    return test_failed;
> >  }
> > 
> > +/* This function exists so that automatic variables in the calling
> > +   function are peserved.  At the time of writing 'err' and 'test_num'
> > +   in 'do_test_num()' were in danger of being clobbered by a direct
> > +   setjmp() call. */
> > +static int call_setjmp(jmp_buf env)
> > +{
> > +  return setjmp(env);
> 
> I don't think this is allowed.
> 
> Setjmp is not really a function that you can just call from an inner 
> function. As a macro it stores the current stack state, to allow a later 
> return by resetting the stack to the old state. With an inner function this 
> is not guaranteed to work. (I'm guessing many compilers would just inline the 
> single call, but then...)
> 
>       Bert 
> 
> 

Isn't the right fix to mark the affected variables as volatile?

Reply via email to