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