OSDN Git Service

PR middle-end/27328
[pf3gnuchains/gcc-fork.git] / gcc / tree-pretty-print.c
index 4e50b8d..b86d2ce 100644 (file)
@@ -101,7 +101,12 @@ debug_generic_stmt (tree t)
 void
 debug_tree_chain (tree t)
 {
-  print_generic_expr (stderr, t, TDF_VOPS|TDF_UID|TDF_CHAIN);
+  while (t)
+  {
+    print_generic_expr (stderr, t, TDF_VOPS|TDF_UID);
+    fprintf(stderr, " ");
+    t = TREE_CHAIN (t);
+  }
   fprintf (stderr, "\n");
 }
 
@@ -160,32 +165,20 @@ dump_decl_name (pretty_printer *buffer, tree node, int flags)
 {
   tree t = node;
 
-  while (t)
+  if (DECL_NAME (t))
+    pp_tree_identifier (buffer, DECL_NAME (t));
+  if ((flags & TDF_UID)
+      || DECL_NAME (t) == NULL_TREE)
     {
-      if (DECL_NAME (t))
-       pp_tree_identifier (buffer, DECL_NAME (t));
-
-      if ((flags & TDF_UID)
-         || DECL_NAME (t) == NULL_TREE)
-       {
-         if (TREE_CODE (t) == LABEL_DECL
-             && LABEL_DECL_UID (t) != -1)
-           pp_printf (buffer, "L." HOST_WIDE_INT_PRINT_DEC,
-               LABEL_DECL_UID (t));
-         else
-           {
-             char c = TREE_CODE (t) == CONST_DECL ? 'C' : 'D';
-             pp_printf (buffer, "%c.%u", c, DECL_UID (t));
-           }
-       }
-
-      if (flags & TDF_CHAIN)
+      if (TREE_CODE (t) == LABEL_DECL
+          && LABEL_DECL_UID (t) != -1)
+        pp_printf (buffer, "L." HOST_WIDE_INT_PRINT_DEC,
+                  LABEL_DECL_UID (t));
+      else
        {
-         t = TREE_CHAIN (t);
-         pp_string (buffer, " ");
+         char c = TREE_CODE (t) == CONST_DECL ? 'C' : 'D';
+         pp_printf (buffer, "%c.%u", c, DECL_UID (t));
        }
-      else
-       t = NULL_TREE;
     }
 }
 
@@ -263,133 +256,144 @@ dump_array_domain (pretty_printer *buffer, tree domain, int spc, int flags)
   pp_character (buffer, ']');
 }
 
-/* Dump the list of OpenMP clauses.  */
+
+/* Dump OpenMP clause CLAUSE.  BUFFER, CLAUSE, SPC and FLAGS are as in
+   dump_generic_node.  */
 
 static void
-dump_omp_clauses (pretty_printer *buffer, tree clause, int spc, int flags)
+dump_omp_clause (pretty_printer *buffer, tree clause, int spc, int flags)
 {
   const char *name;
 
-  if (clause == NULL)
-    return;
-
-  pp_space (buffer);
-  while (1)
+  switch (OMP_CLAUSE_CODE (clause))
     {
-      switch (TREE_CODE (clause))
-       {
-       case OMP_CLAUSE_PRIVATE:
-         name = "private";
-         goto print_remap;
-       case OMP_CLAUSE_SHARED:
-         name = "shared";
-         goto print_remap;
-       case OMP_CLAUSE_FIRSTPRIVATE:
-         name = "firstprivate";
-         goto print_remap;
-       case OMP_CLAUSE_LASTPRIVATE:
-         name = "lastprivate";
-         goto print_remap;
-       case OMP_CLAUSE_COPYIN:
-         name = "copyin";
-         goto print_remap;
-       case OMP_CLAUSE_COPYPRIVATE:
-         name = "copyprivate";
-         goto print_remap;
-       print_remap:
-         pp_string (buffer, name);
-         pp_character (buffer, '(');
-         dump_generic_node (buffer, OMP_CLAUSE_DECL (clause),
-                            spc, flags, false);
-         pp_character (buffer, ')');
-         break;
-
-       case OMP_CLAUSE_REDUCTION:
-         pp_string (buffer, "reduction(");
-         pp_string (buffer, op_symbol_1 (OMP_CLAUSE_REDUCTION_CODE (clause)));
-         pp_character (buffer, ':');
-         dump_generic_node (buffer, OMP_CLAUSE_DECL (clause),
-                            spc, flags, false);
-         pp_character (buffer, ')');
-         break;
+    case OMP_CLAUSE_PRIVATE:
+      name = "private";
+      goto print_remap;
+    case OMP_CLAUSE_SHARED:
+      name = "shared";
+      goto print_remap;
+    case OMP_CLAUSE_FIRSTPRIVATE:
+      name = "firstprivate";
+      goto print_remap;
+    case OMP_CLAUSE_LASTPRIVATE:
+      name = "lastprivate";
+      goto print_remap;
+    case OMP_CLAUSE_COPYIN:
+      name = "copyin";
+      goto print_remap;
+    case OMP_CLAUSE_COPYPRIVATE:
+      name = "copyprivate";
+      goto print_remap;
+  print_remap:
+      pp_string (buffer, name);
+      pp_character (buffer, '(');
+      dump_generic_node (buffer, OMP_CLAUSE_DECL (clause),
+         spc, flags, false);
+      pp_character (buffer, ')');
+      break;
 
-       case OMP_CLAUSE_IF:
-         pp_string (buffer, "if(");
-         dump_generic_node (buffer, OMP_CLAUSE_IF_EXPR (clause),
-                            spc, flags, false);
-         pp_character (buffer, ')');
-         break;
+    case OMP_CLAUSE_REDUCTION:
+      pp_string (buffer, "reduction(");
+      pp_string (buffer, op_symbol_1 (OMP_CLAUSE_REDUCTION_CODE (clause)));
+      pp_character (buffer, ':');
+      dump_generic_node (buffer, OMP_CLAUSE_DECL (clause),
+         spc, flags, false);
+      pp_character (buffer, ')');
+      break;
 
-       case OMP_CLAUSE_NUM_THREADS:
-         pp_string (buffer, "num_threads(");
-         dump_generic_node (buffer, OMP_CLAUSE_NUM_THREADS_EXPR (clause),
-                            spc, flags, false);
-         pp_character (buffer, ')');
-         break;
+    case OMP_CLAUSE_IF:
+      pp_string (buffer, "if(");
+      dump_generic_node (buffer, OMP_CLAUSE_IF_EXPR (clause),
+         spc, flags, false);
+      pp_character (buffer, ')');
+      break;
 
-       case OMP_CLAUSE_NOWAIT:
-         pp_string (buffer, "nowait");
-         break;
-       case OMP_CLAUSE_ORDERED:
-         pp_string (buffer, "ordered");
-         break;
+    case OMP_CLAUSE_NUM_THREADS:
+      pp_string (buffer, "num_threads(");
+      dump_generic_node (buffer, OMP_CLAUSE_NUM_THREADS_EXPR (clause),
+         spc, flags, false);
+      pp_character (buffer, ')');
+      break;
 
-       case OMP_CLAUSE_DEFAULT:
-         pp_string (buffer, "default(");
-         switch (OMP_CLAUSE_DEFAULT_KIND (clause))
-           {
-           case OMP_CLAUSE_DEFAULT_UNSPECIFIED:
-             break;
-           case OMP_CLAUSE_DEFAULT_SHARED:
-             pp_string (buffer, "shared");
-             break;
-           case OMP_CLAUSE_DEFAULT_NONE:
-             pp_string (buffer, "none");
-             break;
-           case OMP_CLAUSE_DEFAULT_PRIVATE:
-             pp_string (buffer, "private");
-             break;
-           default:
-             gcc_unreachable ();
-           }
-         pp_character (buffer, ')');
-         break;
+    case OMP_CLAUSE_NOWAIT:
+      pp_string (buffer, "nowait");
+      break;
+    case OMP_CLAUSE_ORDERED:
+      pp_string (buffer, "ordered");
+      break;
 
-       case OMP_CLAUSE_SCHEDULE:
-         pp_string (buffer, "schedule(");
-         switch (OMP_CLAUSE_SCHEDULE_KIND (clause))
-           {
-           case OMP_CLAUSE_SCHEDULE_STATIC:
-             pp_string (buffer, "static");
-             break;
-           case OMP_CLAUSE_SCHEDULE_DYNAMIC:
-             pp_string (buffer, "dynamic");
-             break;
-           case OMP_CLAUSE_SCHEDULE_GUIDED:
-             pp_string (buffer, "guided");
-             break;
-           case OMP_CLAUSE_SCHEDULE_RUNTIME:
-             pp_string (buffer, "runtime");
-             break;
-           default:
-             gcc_unreachable ();
-           }
-         if (OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (clause))
-           {
-             pp_character (buffer, ',');
-             dump_generic_node (buffer,
-                                OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (clause),
-                                spc, flags, false);
-           }
-         pp_character (buffer, ')');
-         break;
+    case OMP_CLAUSE_DEFAULT:
+      pp_string (buffer, "default(");
+      switch (OMP_CLAUSE_DEFAULT_KIND (clause))
+       {
+      case OMP_CLAUSE_DEFAULT_UNSPECIFIED:
+       break;
+      case OMP_CLAUSE_DEFAULT_SHARED:
+       pp_string (buffer, "shared");
+       break;
+      case OMP_CLAUSE_DEFAULT_NONE:
+       pp_string (buffer, "none");
+       break;
+      case OMP_CLAUSE_DEFAULT_PRIVATE:
+       pp_string (buffer, "private");
+       break;
+      default:
+       gcc_unreachable ();
+       }
+      pp_character (buffer, ')');
+      break;
 
-       default:
-         /* Should never happen.  */
-         dump_generic_node (buffer, clause, spc, flags, false);
-         break;
+    case OMP_CLAUSE_SCHEDULE:
+      pp_string (buffer, "schedule(");
+      switch (OMP_CLAUSE_SCHEDULE_KIND (clause))
+       {
+      case OMP_CLAUSE_SCHEDULE_STATIC:
+       pp_string (buffer, "static");
+       break;
+      case OMP_CLAUSE_SCHEDULE_DYNAMIC:
+       pp_string (buffer, "dynamic");
+       break;
+      case OMP_CLAUSE_SCHEDULE_GUIDED:
+       pp_string (buffer, "guided");
+       break;
+      case OMP_CLAUSE_SCHEDULE_RUNTIME:
+       pp_string (buffer, "runtime");
+       break;
+      default:
+       gcc_unreachable ();
        }
+      if (OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (clause))
+       {
+         pp_character (buffer, ',');
+         dump_generic_node (buffer,
+             OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (clause),
+             spc, flags, false);
+       }
+      pp_character (buffer, ')');
+      break;
 
+    default:
+      /* Should never happen.  */
+      dump_generic_node (buffer, clause, spc, flags, false);
+      break;
+    }
+}
+
+
+/* Dump the list of OpenMP clauses.  BUFFER, SPC and FLAGS are as in
+   dump_generic_node.  */
+
+static void
+dump_omp_clauses (pretty_printer *buffer, tree clause, int spc, int flags)
+{
+  if (clause == NULL)
+    return;
+
+  pp_space (buffer);
+  while (1)
+    {
+      dump_omp_clause (buffer, clause, spc, flags);
       clause = OMP_CLAUSE_CHAIN (clause);
       if (clause == NULL)
        return;
@@ -397,6 +401,7 @@ dump_omp_clauses (pretty_printer *buffer, tree clause, int spc, int flags)
     }
 }
 
+
 /* Dump the node NODE on the pretty_printer BUFFER, SPC spaces of indent.
    FLAGS specifies details to show in the dump (see TDF_* in tree.h).  If
    IS_STMT is true, the object printed is considered to be a statement
@@ -496,7 +501,6 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
     case VECTOR_TYPE:
     case ENUMERAL_TYPE:
     case BOOLEAN_TYPE:
-    case CHAR_TYPE:
       {
        unsigned int quals = TYPE_QUALS (node);
        enum tree_code_class class;
@@ -843,7 +847,7 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
        }
       break;
 
-    case TYPE_MEMORY_TAG:
+    case SYMBOL_MEMORY_TAG:
     case NAME_MEMORY_TAG:
     case STRUCT_FIELD_TAG:
     case VAR_DECL:
@@ -1553,8 +1557,8 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
       break;
 
     case RESX_EXPR:
-      pp_string (buffer, "resx");
-      /* ??? Any sensible way to present the eh region?  */
+      pp_string (buffer, "resx ");
+      dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false);
       break;
 
     case ASM_EXPR:
@@ -1702,6 +1706,21 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
     case OMP_PARALLEL:
       pp_string (buffer, "#pragma omp parallel");
       dump_omp_clauses (buffer, OMP_PARALLEL_CLAUSES (node), spc, flags);
+      if (OMP_PARALLEL_FN (node))
+       {
+         pp_string (buffer, " [child fn: ");
+         dump_generic_node (buffer, OMP_PARALLEL_FN (node), spc, flags, false);
+
+         pp_string (buffer, " (");
+
+         if (OMP_PARALLEL_DATA_ARG (node))
+           dump_generic_node (buffer, OMP_PARALLEL_DATA_ARG (node), spc, flags,
+                              false);
+         else
+           pp_string (buffer, "???");
+
+         pp_string (buffer, ")]");
+       }
 
     dump_omp_body:
       if (!(flags & TDF_SLIM) && OMP_BODY (node))
@@ -1803,6 +1822,23 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
       dump_omp_clauses (buffer, OMP_SINGLE_CLAUSES (node), spc, flags);
       goto dump_omp_body;
 
+    case OMP_RETURN:
+      pp_string (buffer, "OMP_RETURN");
+      if (OMP_RETURN_NOWAIT (node))
+       pp_string (buffer, " [nowait]");
+      is_expr = false;
+      break;
+
+    case OMP_CONTINUE:
+      pp_string (buffer, "OMP_CONTINUE");
+      is_expr = false;
+      break;
+
+    case OMP_CLAUSE:
+      dump_omp_clause (buffer, node, spc, flags);
+      is_expr = false;
+      break;
+
     case REDUC_MAX_EXPR:
       pp_string (buffer, " REDUC_MAX_EXPR < ");
       dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false);