This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RFA: PATCH to use pretty function names in tree dumps

Constructors tend to show up as __complete_ctor in -fdump-tree dumps for C++, which can make it hard to tell which type is being constructed. This patch fixes the existing print_call_name function to actually use dump_function_name for functions and changes the gimple pretty-printer to use it as well. So now instead of __complete_ctor (args) we see Type::Type (args). This change will also cause us to start printing the class/namespace scope of other functions.

Tested x86_64-pc-linux-gnu. OK for trunk?

2009-05-20  Jason Merrill  <>

	* tree-pretty-print.c (print_call_name): Take the callee, not the
	call itself.  Make non-static.  Use dump_function_name for
	(dump_generic_node): Adjust.
	* diagnostic.h: Declare print_call_name.
	* gimple-pretty-print.c (dump_gimple_call): Use it.

diff --git a/gcc/diagnostic.h b/gcc/diagnostic.h
index 998c11e..aa9aaf8 100644
--- a/gcc/diagnostic.h
+++ b/gcc/diagnostic.h
@@ -226,6 +226,7 @@ extern void print_generic_expr (FILE *, tree, int);
 extern void print_generic_decl (FILE *, tree, int);
 extern void debug_c_tree (tree);
 extern void dump_omp_clauses (pretty_printer *, tree, int, int);
+extern void print_call_name (pretty_printer *, tree);
 /* In gimple-pretty-print.c  */
 extern void debug_generic_expr (tree);
diff --git a/gcc/gimple-pretty-print.c b/gcc/gimple-pretty-print.c
index 163acf9..e837d0a 100644
--- a/gcc/gimple-pretty-print.c
+++ b/gcc/gimple-pretty-print.c
@@ -508,7 +508,7 @@ dump_gimple_call (pretty_printer *buffer, gimple gs, int spc, int flags)
 	  pp_space (buffer);
-      dump_generic_node (buffer, gimple_call_fn (gs), spc, flags, false);
+      print_call_name (buffer, gimple_call_fn (gs));
       pp_string (buffer, " (");
       dump_gimple_call_args (buffer, gs, flags);
       pp_character (buffer, ')');
diff --git a/gcc/tree-pretty-print.c b/gcc/tree-pretty-print.c
index d9d31ee..7c40a2c 100644
--- a/gcc/tree-pretty-print.c
+++ b/gcc/tree-pretty-print.c
@@ -40,7 +40,6 @@ along with GCC; see the file COPYING3.  If not see
 /* Local functions, macros and variables.  */
 static const char *op_symbol (const_tree);
 static void pretty_print_string (pretty_printer *, const char*);
-static void print_call_name (pretty_printer *, const_tree);
 static void newline_and_indent (pretty_printer *, int);
 static void maybe_init_pretty_print (FILE *);
 static void print_struct_decl (pretty_printer *, const_tree, int, int);
@@ -1210,7 +1209,7 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
     case CALL_EXPR:
-      print_call_name (buffer, node);
+      print_call_name (buffer, CALL_EXPR_FN (node));
       /* Print parameters.  */
       pp_space (buffer);
@@ -2608,32 +2607,31 @@ op_symbol (const_tree op)
   return op_symbol_code (TREE_CODE (op));
-/* Prints the name of a CALL_EXPR.  */
+/* Prints the name of a call.  NODE is the CALL_EXPR_FN of a CALL_EXPR or
+   the gimple_call_fn of a GIMPLE_CALL.  */
-static void
-print_call_name (pretty_printer *buffer, const_tree node)
+print_call_name (pretty_printer *buffer, tree node)
-  tree op0;
-  gcc_assert (TREE_CODE (node) == CALL_EXPR);
-  op0 = CALL_EXPR_FN (node);
+  tree op0 = node;
   if (TREE_CODE (op0) == NON_LVALUE_EXPR)
     op0 = TREE_OPERAND (op0, 0);
+ again:
   switch (TREE_CODE (op0))
     case VAR_DECL:
     case PARM_DECL:
+    case FUNCTION_DECL:
       dump_function_name (buffer, op0);
     case ADDR_EXPR:
     case INDIRECT_REF:
     case NOP_EXPR:
-      dump_generic_node (buffer, TREE_OPERAND (op0, 0), 0, 0, false);
-      break;
+      op0 = TREE_OPERAND (op0, 0);
+      goto again;
     case COND_EXPR:
       pp_string (buffer, "(");

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]