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];

Reply via email to