This is the mail archive of the gcc-patches@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: [PING] [PATCH] refine -Wstringop-truncation and -Wsizeof-pointer-memaccess for strncat of nonstrings (PR 85602)


On 05/29/2018 01:21 PM, Martin Sebor wrote:
> To make review and testing easier (thank you, Franz), attached
> is an updated patch rebased on top of today's trunk.
> 
> (Note that the patch intentionally doesn't suppress the warning
> for the submitted test case without adding the nonstring attribute.)
> 
> On 05/25/2018 02:59 PM, Martin Sebor wrote:
>> Ping:
>> https://gcc.gnu.org/ml/gcc-patches/2018-05/msg00869.html
>>
>> On 05/17/2018 08:01 PM, Martin Sebor wrote:
>>> The -Wstringop-truncation and -Wsizeof-pointer-memaccess warnings
>>> I added and enhanced, respectively, in GCC 8 are arguably overly
>>> strict for source arguments declared with the nonstring attribute.
>>>
>>> For example, -Wsizeof-pointer-memaccess triggers for the strncat
>>> call below:
>>>
>>>   __attribute__ ((nonstring)) char nonstr[8];
>>>   extern char *d;
>>>   strncat (d, nonstr, sizeof nonstr);
>>>
>>> even though it's still a fairly common (if unsafe) idiom from
>>> the early UNIX days (V7 from 1979 to be exact) where strncat
>>> was introduced.  (This use case, modulo the attribute, was
>>> reduced from coreutils.)
>>>
>>> Simialrly, -Wstringop-truncation warns for some strcat calls that
>>> are actually safe, such as in:
>>>
>>>   strcpy (nonstr, "123");
>>>   strncat (d, nonstr, 32);
>>>
>>> To help with the adoption of the warnings and the attribute and
>>> avoid unnecessary churn the attached patch relaxes both warnings
>>> to accept code like this without diagnostics.
>>>
>>> The patch doesn't add any new warnings so I'd like it considered
>>> for GCC 8 in addition to trunk.
>>>
>>> Thanks
>>> Martin
>>
> 
> 
> gcc-85602.diff
> 
> 
> PR middle-end/85602 - -Wsizeof-pointer-memaccess for strncat with size of source
> 
> gcc/c-family/ChangeLog:
> 
> 	PR middle-end/85602
> 	* c-warn.c (sizeof_pointer_memaccess_warning): Check for attribute
> 	nonstring.
> 
> gcc/ChangeLog:
> 
> 	PR middle-end/85602
> 	* calls.c (maybe_warn_nonstring_arg): Handle strncat.
> 	* tree-ssa-strlen.c (is_strlen_related_p): Make extern.
> 	Handle integer subtraction.
> 	(maybe_diag_stxncpy_trunc): Handle nonstring source arguments.
> 	* tree-ssa-strlen.h (is_strlen_related_p): Declare.
> 
> gcc/testsuite/ChangeLog:
> 
> 	PR middle-end/85602
> 	* c-c++-common/attr-nonstring-8.c: New test.
I wonder if get_attr_nonstring_decl belongs somewhere other than
calls.[ch].  It's really got nothing to do with calls.  That might be a
followup cleanup.

I suspect some of the hunks  need updating now that MPX is gone.  In
particular you no longer need to worry about _BND calls which should
simplify things somewhat.

OK for the trunk after updating for MPX removal and re-bootstrapping &
testing.

jeff




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