[Bug lto/51744] Erroneous warning: memset used with constant zero length parameter

mark at infocomm dot com gcc-bugzilla@gcc.gnu.org
Mon Mar 24 11:49:00 GMT 2014


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51744

--- Comment #7 from Mark Pizzolato <mark at infocomm dot com> ---
Thanks for reducing this test case further.  That illuminates something for me:

Specifically:

Notice in the following lines:

  if (__builtin_constant_p (__len) && __len == 0
      && (!__builtin_constant_p (__ch) || __ch != 0))
    {

The part of the expression "|| __ch != 0)"

What could possibly be the purpose of this check?

That is exactly why the 3rd condition I previously mentioned:

> 3) memset is called with a NON zero fill value argument.

triggers this issue.  The warning is about the length, but it is checking the
value being set.  How could that make sense?  Clearly this check lets the vast
majority of uses of memset pass without issue since all of those cases use 0 as
the value to be set.

>From my point of view, if that check wasn't there (i.e. remove "|| __ch != 0"
from the expression), the problem would not exist.



More information about the Gcc-bugs mailing list