Julian Foad wrote on Mon, Apr 23, 2012 at 17:18:22 +0100:
> I (Julian Foad) wrote:
> 
> > There isn't currently an easy build switch (such as NDEBUG) to disable 
> > SVN_ERR_ASSERT completely at compile time.  That's just a side issue.  If 
> > you want such a switch, just ask; we can easily create one.  Or if you 
> > think we 
> > need two levels of assertions -- one for quick tests and another for slow 
> > tests 
> > -- and want to be able to compile-out the slow ones independently of the 
> > quick 
> > ones, just ask.  But implying we should use 'assert' for slow tests and 
> > 'SVN_ERR_ASSERT' for quick tests is the Wrong Way.
> 
> We can also introduce run-time control of whether the conditions are 
> evaluated: test a global 'assertions enabled?' variable or function before 
> evaluating the condition.  For example:
> 
> Index: subversion/include/svn_error.h
> ===================================================================
>  #define SVN_ERR_ASSERT(expr)                                            \
>    do {                                                                  \
> -    if (!(expr))                                                        \
> +    if (svn_error__assertions_enabled && !(expr))                       \
>        SVN_ERR(svn_error__malfunction(TRUE, __FILE__, __LINE__, #expr)); \
>    } while (0)
>  
> +/* ... */
> +extern svn_boolean_t svn_error__assertions_enabled;
> 

That doesn't sound right.  Surely we don't want to allow disabling _all_
uses of SVN_ERR_ASSERT() this way?  (Remember that some of them
translate to segfaults (possibly corruptions?) if the condition doesn't
hold)

Perhaps we should have two flavours of the SVN_ERR_ASSERT() macros --
one unconditional and one only for developers.

Daniel

> - Julian

Reply via email to