From 3ce4cdb2f7ea5dfe464e2d5ddfe6b29c7411b104 Mon Sep 17 00:00:00 2001 From: Martin Sebor Date: Wed, 30 May 2018 22:24:43 +0000 Subject: [PATCH] PR middle-end/85369 - no -Wstringop-overflow for a strcpy / stpcpy call with a nonstring pointer when providing movstr pattern gcc/ChangeLog: PR middle-end/85369 * builtins.c (expand_builtin_stpcpy_1): New function. (expand_builtin_stpcpy): Call it, and call maybe_warn_nonstring_arg only if the former succeeds. From-SVN: r260976 --- gcc/ChangeLog | 7 +++++++ gcc/builtins.c | 21 ++++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 587ff24423a..2c3858370ce 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2018-05-30 Martin Sebor + + PR middle-end/85369 + * builtins.c (expand_builtin_stpcpy_1): New function. + (expand_builtin_stpcpy): Call it, and call maybe_warn_nonstring_arg + only if the former succeeds. + 2018-05-31 Sameera Deshpande * config/aarch64/aarch64-cores.def (saphira) : Add support for ARMv8.4 diff --git a/gcc/builtins.c b/gcc/builtins.c index 841c1ef4da7..97419399bae 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -3814,7 +3814,7 @@ expand_builtin_strcpy_args (tree dest, tree src, rtx target) mode MODE if that's convenient). */ static rtx -expand_builtin_stpcpy (tree exp, rtx target, machine_mode mode) +expand_builtin_stpcpy_1 (tree exp, rtx target, machine_mode mode) { tree dst, src; location_t loc = EXPR_LOCATION (exp); @@ -3891,6 +3891,25 @@ expand_builtin_stpcpy (tree exp, rtx target, machine_mode mode) } } +/* Expand a call EXP to the stpcpy builtin and diagnose uses of nonstring + arguments while being careful to avoid duplicate warnings (which could + be issued if the expander were to expand the call, resulting in it + being emitted in expand_call(). */ + +static rtx +expand_builtin_stpcpy (tree exp, rtx target, machine_mode mode) +{ + if (rtx ret = expand_builtin_stpcpy_1 (exp, target, mode)) + { + /* The call has been successfully expanded. Check for nonstring + arguments and issue warnings as appropriate. */ + maybe_warn_nonstring_arg (get_callee_fndecl (exp), exp); + return ret; + } + + return NULL_RTX; +} + /* Check a call EXP to the stpncpy built-in for validity. Return NULL_RTX on both success and failure. */ -- 2.30.2