From a353fec45af2c09f8e3c849ac8f00e7342600019 Mon Sep 17 00:00:00 2001 From: Bernd Edlinger Date: Mon, 23 Jul 2018 13:20:38 +0000 Subject: [PATCH] gimple-fold.c (gimple_fold_builtin_printf): Don't create a not NUL terminated STRING_CST object. 2018-07-23 Bernd Edlinger * gimple-fold.c (gimple_fold_builtin_printf): Don't create a not NUL terminated STRING_CST object. From-SVN: r262932 --- gcc/ChangeLog | 5 +++++ gcc/gimple-fold.c | 16 +++------------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 13cc870ed54..2cbe833dcfd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2018-07-23 Bernd Edlinger + + * gimple-fold.c (gimple_fold_builtin_printf): Don't create a not NUL + terminated STRING_CST object. + 2018-07-23 Bernd Edlinger hsa-dump.c (dump_hsa_symbol): Avoid out of scope access to buf. diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c index 027ca4da97c..c3fa57064c2 100644 --- a/gcc/gimple-fold.c +++ b/gcc/gimple-fold.c @@ -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); -- 2.30.2