[PATCH, C] Warn ordered comparison pointer with null pointer constant

Joseph S. Myers joseph@codesourcery.com
Thu Apr 29 12:59:00 GMT 2010


On Thu, 29 Apr 2010, Shujing Zhao wrote:

> Hi,
> As Manuel's reply at http://gcc.gnu.org/ml/gcc-patches/2010-04/msg01425.html,
> this patch is to change the warning of (z >= (void *)0) as same as the warning
> of (z >= 0), if z is a pointer.
> 
> Tested on i686-pc-linux-gnu.
> Is it ok for trunk?

This patch is not correct.  Ordered comparisons of pointers to void are 
valid and so must not receive a pedwarn (must not receive an error with 
-pedantic-errors).

The existing code for these warnings about comparison with integer zero is 
certainly problematic - it makes no sense for

void *p;
void
f (void)
{
  (void) (p > 0);
  (void) (0 > p);
}

to get only one warning with -Wextra but two with -pedantic.  (Both 
alternatives should pedwarn if -pedantic, otherwise warn if -Wextra.)  If 
you also want to warn - not pedwarn, and so under -Wextra only - for 
ordered comparisons with a pointer-type null pointer constant, I think you 
should do so inside the case where comp_target_types has passed.

This sort of thing should best get four copies of any testcase (options 
"", "-pedantic", "-pedantic-errors", "-Wextra"), to verify properly what 
form of diagnostic is given in each case.

-- 
Joseph S. Myers
joseph@codesourcery.com



More information about the Gcc-patches mailing list