On Wed, Apr 11, 2018 at 09:48:05AM +0200, Andreas Krebbel wrote:
> c-c++-common/attr-nonstring-3.c fails on IBM Z. The reason appears to be
> that we provide builtin implementations for strcpy and stpcpy.  The
> warnings currently will only be emitted when expanding these as normal
> calls.
> 
> Bootstrapped and regression tested on x86_64 and s390x.
> 
> Ok?
> 
> gcc/ChangeLog:
> 
> 2018-04-11  Andreas Krebbel  <kreb...@linux.vnet.ibm.com>
> 
>       * builtins.c (expand_builtin_strcpy): Invoke
>       maybe_warn_nonstring_arg.
>       (expand_builtin_stpcpy): Likewise.

Don't you then warn twice if builtin implementations for strcpy and stpcpy
aren't available or can't be used, once here and once in calls.c?

> --- a/gcc/builtins.c
> +++ b/gcc/builtins.c
> @@ -3770,6 +3770,12 @@ expand_builtin_strcpy (tree exp, rtx target)
>    tree dest = CALL_EXPR_ARG (exp, 0);
>    tree src = CALL_EXPR_ARG (exp, 1);
>  
> +  /* Check to see if the argument was declared attribute nonstring
> +     and if so, issue a warning since at this point it's not known
> +     to be nul-terminated.  */
> +  tree fndecl = get_callee_fndecl (exp);
> +  maybe_warn_nonstring_arg (fndecl, exp);
> +
>    if (warn_stringop_overflow)
>      {
>        tree destsize = compute_objsize (dest, warn_stringop_overflow - 1);
> @@ -3828,6 +3834,12 @@ expand_builtin_stpcpy (tree exp, rtx target, 
> machine_mode mode)
>        tree len, lenp1;
>        rtx ret;
>  
> +      /* Check to see if the argument was declared attribute nonstring
> +      and if so, issue a warning since at this point it's not known
> +      to be nul-terminated.  */
> +      tree fndecl = get_callee_fndecl (exp);
> +      maybe_warn_nonstring_arg (fndecl, exp);
> +
>        /* Ensure we get an actual string whose length can be evaluated at
>        compile-time, not an expression containing a string.  This is
>        because the latter will potentially produce pessimized code
> -- 
> 2.9.1

        Jakub

Reply via email to