Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(5448)

Issue 6215052: [C++ Patch] Produce canonical names for debug info without changing normal pretty-printing

Can't Edit
Can't Publish+Mail
Start Review
Created:
11 years, 11 months ago by saugustine
Modified:
8 years, 8 months ago
Reviewers:
gdr, =gdr
CC:
gcc-patches_gcc.gnu.org
Base URL:
svn+ssh://gcc.gnu.org/svn/gcc/trunk/
Visibility:
Public.

Patch Set 1 #

Patch Set 2 : [C++ Patch] Produce canonical names for debug info without changing normal pretty-printing #

Patch Set 3 : [C++ Patch] Produce canonical names for debug info without changing normal pretty-printing #

Unified diffs Side-by-side diffs Delta from patch set Stats (+50 lines, -7 lines) Patch
M gcc/c-family/c-pretty-print.h View 1 1 chunk +2 lines, -1 line 0 comments Download
M gcc/c-family/c-pretty-print.c View 1 2 2 chunks +3 lines, -1 line 0 comments Download
M gcc/cp/cp-lang.c View 1 2 1 chunk +4 lines, -4 lines 0 comments Download
M gcc/cp/cp-tree.h View 1 2 1 chunk +2 lines, -0 lines 0 comments Download
M gcc/cp/error.c View 1 2 4 chunks +39 lines, -1 line 0 comments Download

Messages

Total messages: 7
saugustine
This patch adds new flags and defines such that the C++ decl pretty printer prints ...
11 years, 11 months ago (2012-05-16 20:03:08 UTC) #1
saugustine
On Wed, May 16, 2012 at 1:03 PM, Sterling Augustine <saugustine@google.com> wrote: > This patch ...
11 years, 11 months ago (2012-05-21 20:16:25 UTC) #2
saugustine
On Wed, May 16, 2012 at 1:03 PM, Sterling Augustine <saugustine@google.com> wrote: > This patch ...
11 years, 11 months ago (2012-05-29 22:32:18 UTC) #3
gdr_integrable-solutions.net
On Tue, May 29, 2012 at 5:32 PM, Sterling Augustine <saugustine@google.com> wrote: >> Index: gcc/c-family/c-pretty-print.h ...
11 years, 11 months ago (2012-05-30 21:15:07 UTC) #4
saugustine
On Wed, May 30, 2012 at 2:15 PM, Gabriel Dos Reis <gdr@integrable-solutions.net> wrote: > On ...
11 years, 11 months ago (2012-05-30 21:40:30 UTC) #5
gdr_integrable-solutions.net
On Wed, May 30, 2012 at 4:40 PM, Sterling Augustine <saugustine@google.com> wrote: > On Wed, ...
11 years, 11 months ago (2012-05-31 05:11:39 UTC) #6
saugustine
11 years, 11 months ago (2012-06-01 23:07:53 UTC) #7
After finding yet another bug in the previous patch dealing with
pretty-printing
decls for dwarf in canonical form, I have figured out a way to do it that is
less invasive and much cleaner.

This updated patch simply wraps the two entry points into the decl pretty-
printer called from cxx_dwarf_name with new functions that set the
appropriate flag on the pretty printer. This is much cleaner and avoids
the need for translating flags for C++ pretty-printing into standard C
pretty printing flags.

OK for mainline?

Sterling

2012-06-01   Sterling Augustine  <saugustine@google.com>

	* gcc/c-family/c-pretty-print.h (pp_c_flag_gnu_v3): New enumerator.
	* gcc/c-family/c-pretty-print.c (pp_c_specifier_qualifier_list): Check
	it at both the start and end of the function.
	* gcc/cp/error.c (dump_decl): Check pp_c_flag_gnu_v3.
	(decl_as_dwarf_string, lang_decl_dwarf_name): New functions.
	(lang_decl_name): Handle namespace decls.
	* gcc/cp/cp-tree.h: Declare decl_as_dwarf_string, lang_decl_dwarf_name.
	* gcc/cp/cp-lang.c: Call them.

Index: gcc/c-family/c-pretty-print.c
===================================================================
--- gcc/c-family/c-pretty-print.c	(revision 188034)
+++ gcc/c-family/c-pretty-print.c	(working copy)
@@ -446,7 +446,7 @@
 {
   const enum tree_code code = TREE_CODE (t);
 
-  if (TREE_CODE (t) != POINTER_TYPE)
+  if (!(pp->flags & pp_c_flag_gnu_v3) && code != POINTER_TYPE)
     pp_c_type_qualifier_list (pp, t);
   switch (code)
     {
@@ -494,6 +494,8 @@
       pp_simple_type_specifier (pp, t);
       break;
     }
+  if ((pp->flags & pp_c_flag_gnu_v3) && code != POINTER_TYPE)
+    pp_c_type_qualifier_list (pp, t);
 }
 
 /* parameter-type-list:
Index: gcc/c-family/c-pretty-print.h
===================================================================
--- gcc/c-family/c-pretty-print.h	(revision 188034)
+++ gcc/c-family/c-pretty-print.h	(working copy)
@@ -30,7 +30,8 @@
 typedef enum
   {
      pp_c_flag_abstract = 1 << 1,
-     pp_c_flag_last_bit = 2
+     pp_c_flag_gnu_v3 = 1 << 2,
+     pp_c_flag_last_bit = 3
   } pp_c_pretty_print_flags;
 
 
Index: gcc/cp/error.c
===================================================================
--- gcc/cp/error.c	(revision 188034)
+++ gcc/cp/error.c	(working copy)
@@ -1028,7 +1028,12 @@
 	    dump_scope (CP_DECL_CONTEXT (t), flags);
 	  flags &= ~TFF_UNQUALIFIED_NAME;
 	  if (DECL_NAME (t) == NULL_TREE)
-	    pp_cxx_ws_string (cxx_pp, M_("{anonymous}"));
+            {
+              if (!(pp_c_base (cxx_pp)->flags & pp_c_flag_gnu_v3))
+                pp_cxx_ws_string (cxx_pp, M_("{anonymous}"));
+              else
+                pp_cxx_ws_string (cxx_pp, M_("(anonymous namespace)"));
+            }
 	  else
 	    pp_cxx_tree_identifier (cxx_pp, DECL_NAME (t));
 	}
@@ -2556,7 +2561,22 @@
   return pp_formatted_text (cxx_pp);
 }
 
+/* Wrap decl_as_string with options appropriate for dwarf.  */
+
 const char *
+decl_as_dwarf_string (tree decl, int flags)
+{
+  const char *name;
+  /* Curiously, reinit_cxx_pp doesn't reset the flags field, so setting the
flag
+     here will be adequate to get the desired behaviour.  */
+  pp_c_base (cxx_pp)->flags |= pp_c_flag_gnu_v3;
+  name = decl_as_string (decl, flags);
+  /* Subsequent calls to the pretty printer shouldn't use this style.  */
+  pp_c_base (cxx_pp)->flags &= ~pp_c_flag_gnu_v3;
+  return name;
+}
+
+const char *
 decl_as_string (tree decl, int flags)
 {
   reinit_cxx_pp ();
@@ -2573,6 +2593,21 @@
   return pp_formatted_text (cxx_pp);
 }
 
+/* Wrap lang_decl_name with options appropriate for dwarf.  */
+
+const char *
+lang_decl_dwarf_name (tree decl, int v, bool translate)
+{
+  const char *name;
+  /* Curiously, reinit_cxx_pp doesn't reset the flags field, so setting the
flag
+     here will be adequate to get the desired behaviour.  */
+  pp_c_base (cxx_pp)->flags |= pp_c_flag_gnu_v3;
+  name = lang_decl_name (decl, v, translate);
+  /* Subsequent calls to the pretty printer shouldn't use this style.  */
+  pp_c_base (cxx_pp)->flags &= ~pp_c_flag_gnu_v3;
+  return name;
+}
+
 /* Generate the three forms of printable names for cxx_printable_name.  */
 
 const char *
@@ -2596,6 +2631,9 @@
 
   if (TREE_CODE (decl) == FUNCTION_DECL)
     dump_function_name (decl, TFF_PLAIN_IDENTIFIER);
+  else if ((DECL_NAME (decl) == NULL_TREE)
+           && TREE_CODE (decl) == NAMESPACE_DECL)
+    dump_decl (decl, TFF_PLAIN_IDENTIFIER);
   else
     dump_decl (DECL_NAME (decl), TFF_PLAIN_IDENTIFIER);
 
Index: gcc/cp/cp-lang.c
===================================================================
--- gcc/cp/cp-lang.c	(revision 188034)
+++ gcc/cp/cp-lang.c	(working copy)
@@ -118,11 +118,11 @@
       && (ANON_AGGRNAME_P (DECL_NAME (t)) || LAMBDANAME_P (DECL_NAME (t))))
     return NULL;
   if (verbosity >= 2)
-    return decl_as_string (t,
-			   TFF_DECL_SPECIFIERS | TFF_UNQUALIFIED_NAME
-			   | TFF_NO_OMIT_DEFAULT_TEMPLATE_ARGUMENTS);
+    return decl_as_dwarf_string (t,
+                                 TFF_DECL_SPECIFIERS | TFF_UNQUALIFIED_NAME
+                                 | TFF_NO_OMIT_DEFAULT_TEMPLATE_ARGUMENTS);
 
-  return cxx_printable_name (t, verbosity);
+  return lang_decl_dwarf_name (t, verbosity, false);
 }
 
 static enum classify_record
Index: gcc/cp/cp-tree.h
===================================================================
--- gcc/cp/cp-tree.h	(revision 188034)
+++ gcc/cp/cp-tree.h	(working copy)
@@ -5169,8 +5169,10 @@
 extern const char *type_as_string_translate	(tree, int);
 extern const char *decl_as_string		(tree, int);
 extern const char *decl_as_string_translate	(tree, int);
+extern const char *decl_as_dwarf_string		(tree, int);
 extern const char *expr_as_string		(tree, int);
 extern const char *lang_decl_name		(tree, int, bool);
+extern const char *lang_decl_dwarf_name		(tree, int, bool);
 extern const char *language_to_string		(enum languages);
 extern const char *class_key_or_enum_as_string	(tree);
 extern void print_instantiation_context		(void);

--
This patch is available for review at http://codereview.appspot.com/6215052
Sign in to reply to this message.

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b