https://gcc.gnu.org/g:851e188c2abf935bb43a7e7ce2ac2e02c6a78ba8
commit r15-6827-g851e188c2abf935bb43a7e7ce2ac2e02c6a78ba8 Author: Hans-Peter Nilsson <h...@bitrange.com> Date: Mon Jan 6 08:44:04 2025 +0100 c-pretty-print.cc (pp_c_tree_decl_identifier): Strip private name encoding, PR118303 This is a part of PR118303. It fixes FAIL: gcc.dg/analyzer/CVE-2005-1689-minimal.c (test for excess errors) FAIL: gcc.dg/analyzer/CVE-2005-1689-minimal.c inbuf.data (test for warnings, line 62) for targets where the parameter on that line is subject to TARGET_CALLEE_COPIES being true. c-family: PR middle-end/118303 * c-pretty-print.cc (c_pretty_printer::primary_expression) <SSA_NAME>: Call primary_expression for all SSA_NAME_VAR nodes and instead move the DECL_ARTIFICIAL private name stripping to... (pp_c_tree_decl_identifier): ...here. Diff: --- gcc/c-family/c-pretty-print.cc | 39 +++++++++++++++------------------------ 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/gcc/c-family/c-pretty-print.cc b/gcc/c-family/c-pretty-print.cc index 22a71d1e3558..0b6810e12242 100644 --- a/gcc/c-family/c-pretty-print.cc +++ b/gcc/c-family/c-pretty-print.cc @@ -1398,29 +1398,7 @@ c_pretty_printer::primary_expression (tree e) case SSA_NAME: if (SSA_NAME_VAR (e)) - { - tree var = SSA_NAME_VAR (e); - if (tree id = SSA_NAME_IDENTIFIER (e)) - { - const char *name = IDENTIFIER_POINTER (id); - const char *dot; - if (DECL_ARTIFICIAL (var) && (dot = strchr (name, '.'))) - { - /* Print the name without the . suffix (such as in VLAs). - Use pp_c_identifier so that it can be converted into - the appropriate encoding. */ - size_t size = dot - name; - char *ident = XALLOCAVEC (char, size + 1); - memcpy (ident, name, size); - ident[size] = '\0'; - pp_c_identifier (this, ident); - } - else - primary_expression (var); - } - else - primary_expression (var); - } + primary_expression (SSA_NAME_VAR (e)); else if (gimple_assign_single_p (SSA_NAME_DEF_STMT (e))) { /* Print only the right side of the GIMPLE assignment. */ @@ -3033,7 +3011,20 @@ pp_c_tree_decl_identifier (c_pretty_printer *pp, tree t) gcc_assert (DECL_P (t)); if (DECL_NAME (t)) - name = IDENTIFIER_POINTER (DECL_NAME (t)); + { + const char *dot; + name = IDENTIFIER_POINTER (DECL_NAME (t)); + if (DECL_ARTIFICIAL (t) && (dot = strchr (name, '.'))) + { + /* Print the name without the . suffix (such as in VLAs and + callee-copied parameters). */ + size_t size = dot - name; + char *ident = XALLOCAVEC (char, size + 1); + memcpy (ident, name, size); + ident[size] = '\0'; + name = ident; + } + } else { static char xname[8];