This is the mail archive of the gcc-patches@gcc.gnu.org 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]

[lto][patch] Fix segfaults in dump_generic_node


With the pruning of the trees in LTO, some nodes can now be NULL that
the pretty-printing code isn't expecting to be NULL, leading to
segfaults when GLOBAL_STREAMER_TRACE is defined. This patch fixes two
of those situations that I've encountered.

OK?

-cary


2008-11-06  Cary Coutant  <ccoutant@google.com>

        * tree-pretty-print.c (dump_generic_node): Guard against NULL
TREE_TYPE and
          TYPE_METHOD_BASETYPE.


Index: tree-pretty-print.c
===================================================================
--- tree-pretty-print.c	(revision 141655)
+++ tree-pretty-print.c	(working copy)
@@ -574,7 +574,12 @@ dump_generic_node (pretty_printer *buffe
     case REFERENCE_TYPE:
       str = (TREE_CODE (node) == POINTER_TYPE ? "*" : "&");

-      if (TREE_CODE (TREE_TYPE (node)) == FUNCTION_TYPE)
+      if (TREE_TYPE (node) == NULL)
+        {
+	  pp_string (buffer, str);
+          pp_string (buffer, "<null type>");
+        }
+      else if (TREE_CODE (TREE_TYPE (node)) == FUNCTION_TYPE)
         {
 	  tree fnode = TREE_TYPE (node);

@@ -615,7 +620,10 @@ dump_generic_node (pretty_printer *buffe
       break;

     case METHOD_TYPE:
-      dump_decl_name (buffer, TYPE_NAME (TYPE_METHOD_BASETYPE (node)), flags);
+      if (TYPE_METHOD_BASETYPE (node))
+        dump_decl_name (buffer, TYPE_NAME (TYPE_METHOD_BASETYPE
(node)), flags);
+      else
+        pp_string (buffer, "<null method basetype>");
       pp_string (buffer, "::");
       break;


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