OSDN Git Service

2008-05-11 Aaron W. LaFramboise <aaronavay62@aaronwl.com>
[pf3gnuchains/gcc-fork.git] / gcc / print-tree.c
index 7cd7701..4745491 100644 (file)
@@ -1,6 +1,6 @@
 /* Prints out tree in human readable form - GCC
    Copyright (C) 1990, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-   2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -25,6 +25,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "tm.h"
 #include "tree.h"
 #include "real.h"
+#include "fixed-value.h"
 #include "ggc.h"
 #include "langhooks.h"
 #include "tree-iterator.h"
@@ -58,7 +59,7 @@ debug_tree (tree node)
 
 /* Print PREFIX and ADDR to FILE.  */
 void
-dump_addr (FILE *file, const char *prefix, void *addr)
+dump_addr (FILE *file, const char *prefix, const void *addr)
 {
   if (flag_dump_noaddr || flag_dump_unnumbered)
     fprintf (file, "%s#", prefix);
@@ -69,7 +70,7 @@ dump_addr (FILE *file, const char *prefix, void *addr)
 /* Print a node in brief fashion, with just the code, address and name.  */
 
 void
-print_node_brief (FILE *file, const char *prefix, tree node, int indent)
+print_node_brief (FILE *file, const char *prefix, const_tree node, int indent)
 {
   enum tree_code_class class;
 
@@ -91,7 +92,7 @@ print_node_brief (FILE *file, const char *prefix, tree node, int indent)
        fprintf (file, " %s", IDENTIFIER_POINTER (DECL_NAME (node)));
       else if (TREE_CODE (node) == LABEL_DECL
               && LABEL_DECL_UID (node) != -1)
-       fprintf (file, " L." HOST_WIDE_INT_PRINT_DEC, LABEL_DECL_UID (node));
+       fprintf (file, " L.%d", (int) LABEL_DECL_UID (node));
       else
        fprintf (file, " %c.%u", TREE_CODE (node) == CONST_DECL ? 'C' : 'D',
                 DECL_UID (node));
@@ -126,7 +127,8 @@ print_node_brief (FILE *file, const char *prefix, tree node, int indent)
                 -TREE_INT_CST_LOW (node));
       else
        fprintf (file, HOST_WIDE_INT_PRINT_DOUBLE_HEX,
-                TREE_INT_CST_HIGH (node), TREE_INT_CST_LOW (node));
+                (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (node),
+                (unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (node));
     }
   if (TREE_CODE (node) == REAL_CST)
     {
@@ -147,6 +149,18 @@ print_node_brief (FILE *file, const char *prefix, tree node, int indent)
          fprintf (file, " %s", string);
        }
     }
+  if (TREE_CODE (node) == FIXED_CST)
+    {
+      FIXED_VALUE_TYPE f;
+      char string[60];
+
+      if (TREE_OVERFLOW (node))
+       fprintf (file, " overflow");
+
+      f = TREE_FIXED_CST (node);
+      fixed_to_decimal (string, &f, sizeof (string));
+      fprintf (file, " %s", string);
+    }
 
   fprintf (file, ">");
 }
@@ -237,7 +251,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
        fprintf (file, " %s", IDENTIFIER_POINTER (DECL_NAME (node)));
       else if (TREE_CODE (node) == LABEL_DECL
               && LABEL_DECL_UID (node) != -1)
-       fprintf (file, " L." HOST_WIDE_INT_PRINT_DEC, LABEL_DECL_UID (node));
+       fprintf (file, " L.%d", (int) LABEL_DECL_UID (node));
       else
        fprintf (file, " %c.%u", TREE_CODE (node) == CONST_DECL ? 'C' : 'D',
                 DECL_UID (node));
@@ -279,8 +293,6 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
   else if (TYPE_P (node) && TYPE_SIZES_GIMPLIFIED (node))
     fputs (" sizes-gimplified", file);
 
-  if (TREE_INVARIANT (node))
-    fputs (" invariant", file);
   if (TREE_ADDRESSABLE (node))
     fputs (" addressable", file);
   if (TREE_THIS_VOLATILE (node))
@@ -429,7 +441,8 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
 
 
       xloc = expand_location (DECL_SOURCE_LOCATION (node));
-      fprintf (file, " file %s line %d", xloc.file, xloc.line);
+      fprintf (file, " file %s line %d col %d", xloc.file, xloc.line,
+              xloc.column);
 
       if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
        {         
@@ -460,7 +473,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
          
          if (DECL_POINTER_ALIAS_SET_KNOWN_P (node))
            fprintf (file, " alias set " HOST_WIDE_INT_PRINT_DEC,
-                    DECL_POINTER_ALIAS_SET (node));
+                    (HOST_WIDE_INT) DECL_POINTER_ALIAS_SET (node));
        }
       if (TREE_CODE (node) == FIELD_DECL)
        {
@@ -521,15 +534,6 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
          && DECL_HAS_VALUE_EXPR_P (node))
        print_node (file, "value-expr", DECL_VALUE_EXPR (node), indent + 4);
 
-      if (TREE_CODE (node) == STRUCT_FIELD_TAG)
-       {
-         fprintf (file, " sft size " HOST_WIDE_INT_PRINT_DEC, 
-                  SFT_SIZE (node));
-         fprintf (file, " sft offset " HOST_WIDE_INT_PRINT_DEC,
-                  SFT_OFFSET (node));
-         print_node_brief (file, "parent var", SFT_PARENT_VAR (node), 
-                           indent + 4);
-       }
       /* Print the decl chain only if decl is at second level.  */
       if (indent == 4)
        print_node (file, "chain", TREE_CHAIN (node), indent + 4);
@@ -551,9 +555,6 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
       else if (TREE_CODE (node) == INTEGER_TYPE
               && TYPE_IS_SIZETYPE (node))
        fputs (" sizetype", file);
-      else if (TREE_CODE (node) == FUNCTION_TYPE
-              && TYPE_RETURNS_STACK_DEPRESSED (node))
-       fputs (" returns-stack-depressed", file);
 
       if (TYPE_STRING_FLAG (node))
        fputs (" string-flag", file);
@@ -601,7 +602,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
 
       fprintf (file, " align %d symtab %d alias set " HOST_WIDE_INT_PRINT_DEC,
               TYPE_ALIGN (node), TYPE_SYMTAB_ADDRESS (node),
-              TYPE_ALIAS_SET (node));
+              (HOST_WIDE_INT) TYPE_ALIAS_SET (node));
 
       if (TYPE_STRUCTURAL_EQUALITY_P (node))
        fprintf (file, " structural equality");
@@ -610,7 +611,8 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
       
       print_node (file, "attributes", TYPE_ATTRIBUTES (node), indent + 4);
 
-      if (INTEGRAL_TYPE_P (node) || TREE_CODE (node) == REAL_TYPE)
+      if (INTEGRAL_TYPE_P (node) || TREE_CODE (node) == REAL_TYPE
+         || TREE_CODE (node) == FIXED_POINT_TYPE)
        {
          fprintf (file, " precision %d", TYPE_PRECISION (node));
          print_node_brief (file, "min", TYPE_MIN_VALUE (node), indent + 4);
@@ -661,8 +663,6 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
     case tcc_reference:
     case tcc_statement:
     case tcc_vl_exp:
-      if (TREE_CODE (node) == BIT_FIELD_REF && BIT_FIELD_REF_UNSIGNED (node))
-       fputs (" unsigned", file);
       if (TREE_CODE (node) == BIND_EXPR)
        {
          print_node (file, "vars", TREE_OPERAND (node, 0), indent + 4);
@@ -731,7 +731,8 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
                     -TREE_INT_CST_LOW (node));
          else
            fprintf (file, HOST_WIDE_INT_PRINT_DOUBLE_HEX,
-                    TREE_INT_CST_HIGH (node), TREE_INT_CST_LOW (node));
+                    (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (node),
+                    (unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (node));
          break;
 
        case REAL_CST:
@@ -755,6 +756,20 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
          }
          break;
 
+       case FIXED_CST:
+         {
+           FIXED_VALUE_TYPE f;
+           char string[64];
+
+           if (TREE_OVERFLOW (node))
+             fprintf (file, " overflow");
+
+           f = TREE_FIXED_CST (node);
+           fixed_to_decimal (string, &f, sizeof (string));
+           fprintf (file, " %s", string);
+         }
+         break;
+
        case VECTOR_CST:
          {
            tree vals = TREE_VECTOR_CST_ELTS (node);
@@ -820,6 +835,21 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
              }
          break;
 
+       case CONSTRUCTOR:
+         {
+           unsigned HOST_WIDE_INT cnt;
+           tree index, value;
+           len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (node));
+           fprintf (file, " lngt %d", len);
+           FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (node),
+                                     cnt, index, value)
+             {
+               print_node (file, "idx", index, indent + 4);
+               print_node (file, "val", value, indent + 4);
+             }
+         }
+         break;
+
        case STATEMENT_LIST:
          dump_addr (file, " head ", node->stmt_list.head);
          dump_addr (file, " tail ", node->stmt_list.tail);
@@ -903,7 +933,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
     {
       expanded_location xloc = expand_location (EXPR_LOCATION (node));
       indent_to (file, indent+4);
-      fprintf (file, "%s:%d", xloc.file, xloc.line);
+      fprintf (file, "%s:%d:%d", xloc.file, xloc.line, xloc.column);
     }
 
   fprintf (file, ">");