[patch] cse.c: gcc_assertify an "if" statement whose condition is always false.

Jeffrey A Law law@redhat.com
Thu Jan 27 19:51:00 GMT 2005


On Thu, 2005-01-27 at 11:40 -0800, Mark Mitchell wrote:
> Kazu Hirata wrote:
> > Hi Mark,
> > 
> > 
> >>I dunno, I like asserts -- they document the assumption.  But, there's 
> >>no point in guarding ggc_assert with ENABLE_CHECKING, as ggc_assert 
> >>already is conditionalized on that macro.  OK with that change.
> > 
> > 
> > Actually, gcc_assert is guarded with ENABLE_ASSERT_CHECKING, not
> > ENABLE_CHECKING.  In other words, if we don't guard this gcc_assert
> > with ENABLE_CHECKING, a release version of GCC would basically have
> > 
> >   if (x == 0)
> >     fancy_abort (...);
> > 
> > The idea is to keep the assertion while we are developing GCC and omit
> > it when we release it, so I'd like to go with either my original patch
> > or Jakub's idea of droping the whole "if" statement.
> > 
> > --enable-checking=release, which will presumably be default on a
> > release, will have ENABLE_ASSERT_CHECKING, but not ENABLE_CHECKING.
> 
> I think that was a compromise; people wanted to keep assertions in 
> releases for historical reasons.  There's no intrinsic difference 
> between a gcc_assert() and something guarded by ENABLE_CHECING.
> 
> In any case, I think that guarding asserts with ENABLE_CHECKING is 
> weird; if you want to guard it with ENABLE_CHECING, then don't use 
> ggc_assert.
> 
> What do other people think?
Well, I definitely prefer having the assert vs just removing the code
as Jakub suggested.

The assert states pretty clearly that if we get into this code with
x == 0 that the problem lies elsewhere -- ie, if the caller might
pass in a null value, then the caller is at fault.

As to whether or not we wrap the assert into an ENABLE_CHECKING or
not.  I don't really care, particularly since 99.9% of my builds
are with checking-enabled compilers.

jeff



More information about the Gcc-patches mailing list