gimple-fold.c (gimple_fold_builtin_printf): Don't create a not NUL terminated STRING_CST object.

2018-07-23  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        * gimple-fold.c (gimple_fold_builtin_printf): Don't create a not NUL
        terminated STRING_CST object.

From-SVN: r262932
This commit is contained in:
Bernd Edlinger 2018-07-23 13:20:38 +00:00 committed by Bernd Edlinger
parent 723f415edc
commit a353fec45a
2 changed files with 8 additions and 13 deletions

View File

@ -1,3 +1,8 @@
2018-07-23 Bernd Edlinger <bernd.edlinger@hotmail.de>
* gimple-fold.c (gimple_fold_builtin_printf): Don't create a not NUL
terminated STRING_CST object.
2018-07-23 Bernd Edlinger <bernd.edlinger@hotmail.de>
hsa-dump.c (dump_hsa_symbol): Avoid out of scope access to buf.

View File

@ -3433,23 +3433,13 @@ gimple_fold_builtin_printf (gimple_stmt_iterator *gsi, tree fmt,
&& (int) len > 0)
{
char *newstr;
tree offset_node, string_cst;
/* Create a NUL-terminated string that's one char shorter
than the original, stripping off the trailing '\n'. */
newarg = build_string_literal (len, str);
string_cst = string_constant (newarg, &offset_node);
gcc_checking_assert (string_cst
&& (TREE_STRING_LENGTH (string_cst)
== (int) len)
&& integer_zerop (offset_node)
&& (unsigned char)
TREE_STRING_POINTER (string_cst)[len - 1]
== target_newline);
/* build_string_literal creates a new STRING_CST,
modify it in place to avoid double copying. */
newstr = CONST_CAST (char *, TREE_STRING_POINTER (string_cst));
newstr = xstrdup (str);
newstr[len - 1] = '\0';
newarg = build_string_literal (len, newstr);
free (newstr);
if (fn_puts)
{
gcall *repl = gimple_build_call (fn_puts, 1, newarg);