This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Infering that the condition of a for loop is initially true?


On Mon, 18 Sep 2017, Niels Möller wrote:

> Andreas Schwab <schwab@suse.de> writes:
> 
> > The problem is that assert is not allowed to evaluate the expression
> > with -DNDEBUG, and side effects must not be carried out.
> 
> I'm suggesting that with -DNDEBUG, assert(x) should let the compiler
> assume that x is true, but without producing any code to evaluate it at
> runtime.

There's no requirement that x is even a valid expression with -DNDEBUG.  
Consider code that does

  int x;
#ifndef NDEBUG
  int other_variable_used_in_assertion = something ();
#endif
  /* ... */
  assert (other_variable_used_in_assertion == x);

where it is completely valid in ISO C not to have the NDEBUG conditional 
around the assert call, because in the NDEBUG case the macro argument 
won't be expanded.

-- 
Joseph S. Myers
joseph@codesourcery.com

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]