OSDN Git Service

PR c/43381
[pf3gnuchains/gcc-fork.git] / gcc / tree-pretty-print.c
index 1426907..44d4a5d 100644 (file)
@@ -99,13 +99,24 @@ debug_generic_stmt (tree t)
 void
 debug_tree_chain (tree t)
 {
+  struct pointer_set_t *seen = pointer_set_create ();
+
   while (t)
-  {
-    print_generic_expr (stderr, t, TDF_VOPS|TDF_MEMSYMS|TDF_UID);
-    fprintf(stderr, " ");
-    t = TREE_CHAIN (t);
-  }
+    {
+      print_generic_expr (stderr, t, TDF_VOPS|TDF_MEMSYMS|TDF_UID);
+      fprintf (stderr, " ");
+      t = TREE_CHAIN (t);
+      if (pointer_set_insert (seen, t))
+       {
+         fprintf (stderr, "... [cycled back to ");
+         print_generic_expr (stderr, t, TDF_VOPS|TDF_MEMSYMS|TDF_UID);
+         fprintf (stderr, "]");
+         break;
+       }
+    }
   fprintf (stderr, "\n");
+
+  pointer_set_destroy (seen);
 }
 
 /* Prints declaration DECL to the FILE with details specified by FLAGS.  */
@@ -171,11 +182,21 @@ dump_decl_name (pretty_printer *buffer, tree node, int flags)
   if ((flags & TDF_UID) || DECL_NAME (node) == NULL_TREE)
     {
       if (TREE_CODE (node) == LABEL_DECL && LABEL_DECL_UID (node) != -1)
-        pp_printf (buffer, "L.%d", (int) LABEL_DECL_UID (node));
+       pp_printf (buffer, "L.%d", (int) LABEL_DECL_UID (node));
+      else if (TREE_CODE (node) == DEBUG_EXPR_DECL)
+       {
+         if (flags & TDF_NOUID)
+           pp_string (buffer, "D#xxxx");
+         else
+           pp_printf (buffer, "D#%i", DEBUG_TEMP_UID (node));
+       }
       else
        {
          char c = TREE_CODE (node) == CONST_DECL ? 'C' : 'D';
-         pp_printf (buffer, "%c.%u", c, DECL_UID (node));
+         if (flags & TDF_NOUID)
+           pp_printf (buffer, "%c.xxxx", c);
+         else
+           pp_printf (buffer, "%c.%u", c, DECL_UID (node));
        }
     }
 }
@@ -613,13 +634,13 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
          {
            size_t len = TREE_VEC_LENGTH (node);
            for (i = 0; i < len - 1; i++)
-             {     
+             {
                dump_generic_node (buffer, TREE_VEC_ELT (node, i), spc, flags,
                                   false);
                pp_character (buffer, ',');
                pp_space (buffer);
              }
-           dump_generic_node (buffer, TREE_VEC_ELT (node, len - 1), spc, 
+           dump_generic_node (buffer, TREE_VEC_ELT (node, len - 1), spc,
                               flags, false);
          }
       }
@@ -644,6 +665,13 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
        else if (quals & TYPE_QUAL_RESTRICT)
          pp_string (buffer, "restrict ");
 
+       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (node)))
+         {
+           pp_string (buffer, "<address-space-");
+           pp_decimal_int (buffer, TYPE_ADDR_SPACE (node));
+           pp_string (buffer, "> ");
+         }
+
        tclass = TREE_CODE_CLASS (TREE_CODE (node));
 
        if (tclass == tcc_declaration)
@@ -742,6 +770,13 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
          if (quals & TYPE_QUAL_RESTRICT)
            pp_string (buffer, " restrict");
 
+         if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (node)))
+           {
+             pp_string (buffer, " <address-space-");
+             pp_decimal_int (buffer, TYPE_ADDR_SPACE (node));
+             pp_string (buffer, ">");
+           }
+
          if (TYPE_REF_CAN_ALIAS_ALL (node))
            pp_string (buffer, " {ref-all}");
        }
@@ -1003,9 +1038,14 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
       if (DECL_NAME (node))
        dump_decl_name (buffer, node, flags);
       else if (LABEL_DECL_UID (node) != -1)
-        pp_printf (buffer, "<L%d>", (int) LABEL_DECL_UID (node));
+       pp_printf (buffer, "<L%d>", (int) LABEL_DECL_UID (node));
       else
-        pp_printf (buffer, "<D.%u>", DECL_UID (node));
+       {
+         if (flags & TDF_NOUID)
+           pp_string (buffer, "<D.xxxx>");
+         else
+           pp_printf (buffer, "<D.%u>", DECL_UID (node));
+       }
       break;
 
     case TYPE_DECL:
@@ -1040,6 +1080,7 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
     case VAR_DECL:
     case PARM_DECL:
     case FIELD_DECL:
+    case DEBUG_EXPR_DECL:
     case NAMESPACE_DECL:
       dump_decl_name (buffer, node, flags);
       break;
@@ -1051,7 +1092,7 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
     case COMPONENT_REF:
       op0 = TREE_OPERAND (node, 0);
       str = ".";
-      if (TREE_CODE (op0) == INDIRECT_REF)
+      if (op0 && TREE_CODE (op0) == INDIRECT_REF)
        {
          op0 = TREE_OPERAND (op0, 0);
          str = "->";
@@ -1536,6 +1577,7 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
       NIY;
       break;
 
+    case ADDR_SPACE_CONVERT_EXPR:
     case FIXED_CONVERT_EXPR:
     case FIX_TRUNC_EXPR:
     case FLOAT_EXPR:
@@ -1676,14 +1718,6 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
        pp_string (buffer, " [non-local]");
       break;
 
-    case EXC_PTR_EXPR:
-      pp_string (buffer, "<<<exception object>>>");
-      break;
-
-    case FILTER_EXPR:
-      pp_string (buffer, "<<<filter object>>>");
-      break;
-
     case LOOP_EXPR:
       pp_string (buffer, "while (1)");
       if (!(flags & TDF_SLIM))
@@ -1784,11 +1818,6 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
       dump_generic_node (buffer, op0, spc, flags, false);
       break;
 
-    case RESX_EXPR:
-      pp_string (buffer, "resx ");
-      dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false);
-      break;
-
     case ASM_EXPR:
       pp_string (buffer, "__asm__");
       if (ASM_VOLATILE_P (node))
@@ -1889,7 +1918,7 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
       dump_generic_node (buffer, TREE_OPERAND (node, 2), spc, flags, false);
       pp_string (buffer, ">");
       break;
-      
+
     case VEC_COND_EXPR:
       pp_string (buffer, " VEC_COND_EXPR < ");
       dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false);
@@ -1994,7 +2023,7 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
     case OMP_SECTION:
       pp_string (buffer, "#pragma omp section");
       goto dump_omp_body;
+
     case OMP_MASTER:
       pp_string (buffer, "#pragma omp master");
       goto dump_omp_body;
@@ -2128,7 +2157,7 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
       dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false);
       pp_string (buffer, " > ");
       break;
-  
+
     case VEC_EXTRACT_ODD_EXPR:
       pp_string (buffer, " VEC_EXTRACT_ODD_EXPR < ");
       dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false);
@@ -2567,7 +2596,7 @@ op_symbol_code (enum tree_code code)
 
     case POINTER_PLUS_EXPR:
       return "+";
+
     case PLUS_EXPR:
       return "+";
 
@@ -2694,19 +2723,6 @@ print_call_name (pretty_printer *buffer, tree node, int flags)
       dump_generic_node (buffer, TREE_OPERAND (op0, 2), 0, flags, false);
       break;
 
-    case COMPONENT_REF:
-      /* The function is a pointer contained in a structure.  */
-      if (TREE_CODE (TREE_OPERAND (op0, 0)) == INDIRECT_REF ||
-         TREE_CODE (TREE_OPERAND (op0, 0)) == VAR_DECL)
-       dump_function_name (buffer, TREE_OPERAND (op0, 1), flags);
-      else
-       dump_generic_node (buffer, TREE_OPERAND (op0, 0), 0, flags, false);
-      /* else
-        We can have several levels of structures and a function
-        pointer inside.  This is not implemented yet...  */
-      /*                 NIY;*/
-      break;
-
     case ARRAY_REF:
       if (TREE_CODE (TREE_OPERAND (op0, 0)) == VAR_DECL)
        dump_function_name (buffer, TREE_OPERAND (op0, 0), flags);
@@ -2714,6 +2730,7 @@ print_call_name (pretty_printer *buffer, tree node, int flags)
        dump_generic_node (buffer, op0, 0, flags, false);
       break;
 
+    case COMPONENT_REF:
     case SSA_NAME:
     case OBJ_TYPE_REF:
       dump_generic_node (buffer, op0, 0, flags, false);