OSDN Git Service

Daily bump.
[pf3gnuchains/gcc-fork.git] / gcc / print-tree.c
index dad7e59..16ba392 100644 (file)
@@ -1,12 +1,12 @@
 /* Prints out tree in human readable form - GCC
    Copyright (C) 1990, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
 /* 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 Free Software Foundation, Inc.
+   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
 GCC is free software; you can redistribute it and/or modify it under
 the terms of the GNU General Public License as published by the Free
 
 This file is part of GCC.
 
 GCC is free software; you can redistribute it and/or modify it under
 the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
+Software Foundation; either version 3, or (at your option) any later
 version.
 
 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
 version.
 
 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
@@ -15,9 +15,8 @@ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 for more details.
 
 You should have received a copy of the GNU General Public License
 for more details.
 
 You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING.  If not, write to the Free
-Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301, USA.  */
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
 
 
 #include "config.h"
 
 
 #include "config.h"
@@ -26,9 +25,12 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
 #include "tm.h"
 #include "tree.h"
 #include "real.h"
 #include "tm.h"
 #include "tree.h"
 #include "real.h"
+#include "fixed-value.h"
 #include "ggc.h"
 #include "langhooks.h"
 #include "tree-iterator.h"
 #include "ggc.h"
 #include "langhooks.h"
 #include "tree-iterator.h"
+#include "diagnostic.h"
+#include "tree-flow.h"
 
 /* Define the hash table of nodes already seen.
    Such nodes are not repeated; brief cross-references are used.  */
 
 /* Define the hash table of nodes already seen.
    Such nodes are not repeated; brief cross-references are used.  */
@@ -57,37 +59,47 @@ debug_tree (tree node)
   putc ('\n', stderr);
 }
 
   putc ('\n', stderr);
 }
 
+/* Print PREFIX and ADDR to FILE.  */
+void
+dump_addr (FILE *file, const char *prefix, const void *addr)
+{
+  if (flag_dump_noaddr || flag_dump_unnumbered)
+    fprintf (file, "%s#", prefix);
+  else
+    fprintf (file, "%s%p", prefix, addr);
+}
+
 /* Print a node in brief fashion, with just the code, address and name.  */
 
 void
 /* 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;
+  enum tree_code_class tclass;
 
   if (node == 0)
     return;
 
 
   if (node == 0)
     return;
 
-  class = TREE_CODE_CLASS (TREE_CODE (node));
+  tclass = TREE_CODE_CLASS (TREE_CODE (node));
 
   /* Always print the slot this node is in, and its code, address and
      name if any.  */
   if (indent > 0)
     fprintf (file, " ");
 
   /* Always print the slot this node is in, and its code, address and
      name if any.  */
   if (indent > 0)
     fprintf (file, " ");
-  fprintf (file, "%s <%s %p",
-          prefix, tree_code_name[(int) TREE_CODE (node)], (char *) node);
+  fprintf (file, "%s <%s", prefix, tree_code_name[(int) TREE_CODE (node)]);
+  dump_addr (file, " ", node);
 
 
-  if (class == tcc_declaration)
+  if (tclass == tcc_declaration)
     {
       if (DECL_NAME (node))
        fprintf (file, " %s", IDENTIFIER_POINTER (DECL_NAME (node)));
       else if (TREE_CODE (node) == LABEL_DECL
               && LABEL_DECL_UID (node) != -1)
     {
       if (DECL_NAME (node))
        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));
     }
       else
        fprintf (file, " %c.%u", TREE_CODE (node) == CONST_DECL ? 'C' : 'D',
                 DECL_UID (node));
     }
-  else if (class == tcc_type)
+  else if (tclass == tcc_type)
     {
       if (TYPE_NAME (node))
        {
     {
       if (TYPE_NAME (node))
        {
@@ -105,7 +117,7 @@ print_node_brief (FILE *file, const char *prefix, tree node, int indent)
   /* We might as well always print the value of an integer or real.  */
   if (TREE_CODE (node) == INTEGER_CST)
     {
   /* We might as well always print the value of an integer or real.  */
   if (TREE_CODE (node) == INTEGER_CST)
     {
-      if (TREE_CONSTANT_OVERFLOW (node))
+      if (TREE_OVERFLOW (node))
        fprintf (file, " overflow");
 
       fprintf (file, " ");
        fprintf (file, " overflow");
 
       fprintf (file, " ");
@@ -117,7 +129,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_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)
     {
     }
   if (TREE_CODE (node) == REAL_CST)
     {
@@ -128,7 +141,7 @@ print_node_brief (FILE *file, const char *prefix, tree node, int indent)
 
       d = TREE_REAL_CST (node);
       if (REAL_VALUE_ISINF (d))
 
       d = TREE_REAL_CST (node);
       if (REAL_VALUE_ISINF (d))
-       fprintf (file, " Inf");
+       fprintf (file,  REAL_VALUE_NEGATIVE (d) ? " -Inf" : " Inf");
       else if (REAL_VALUE_ISNAN (d))
        fprintf (file, " Nan");
       else
       else if (REAL_VALUE_ISNAN (d))
        fprintf (file, " Nan");
       else
@@ -138,6 +151,18 @@ print_node_brief (FILE *file, const char *prefix, tree node, int indent)
          fprintf (file, " %s", string);
        }
     }
          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, ">");
 }
 
   fprintf (file, ">");
 }
@@ -163,7 +188,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
   int hash;
   struct bucket *b;
   enum machine_mode mode;
   int hash;
   struct bucket *b;
   enum machine_mode mode;
-  enum tree_code_class class;
+  enum tree_code_class tclass;
   int len;
   int i;
   expanded_location xloc;
   int len;
   int i;
   expanded_location xloc;
@@ -173,7 +198,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
     return;
   
   code = TREE_CODE (node);
     return;
   
   code = TREE_CODE (node);
-  class = TREE_CODE_CLASS (code);
+  tclass = TREE_CODE_CLASS (code);
 
   /* Don't get too deep in nesting.  If the user wants to see deeper,
      it is easy to use the address of a lowest-level node
 
   /* Don't get too deep in nesting.  If the user wants to see deeper,
      it is easy to use the address of a lowest-level node
@@ -185,7 +210,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
       return;
     }
 
       return;
     }
 
-  if (indent > 8 && (class == tcc_type || class == tcc_declaration))
+  if (indent > 8 && (tclass == tcc_type || tclass == tcc_declaration))
     {
       print_node_brief (file, prefix, node, indent);
       return;
     {
       print_node_brief (file, prefix, node, indent);
       return;
@@ -198,42 +223,46 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
       return;
     }
 
       return;
     }
 
-  hash = ((unsigned long) node) % HASH_SIZE;
-
-  /* If node is in the table, just mention its address.  */
-  for (b = table[hash]; b; b = b->next)
-    if (b->node == node)
-      {
-       print_node_brief (file, prefix, node, indent);
-       return;
-      }
-
-  /* Add this node to the table.  */
-  b = XNEW (struct bucket);
-  b->node = node;
-  b->next = table[hash];
-  table[hash] = b;
+  /* Allow this function to be called if the table is not there.  */
+  if (table)
+    {
+      hash = ((unsigned long) node) % HASH_SIZE;
+      
+      /* If node is in the table, just mention its address.  */
+      for (b = table[hash]; b; b = b->next)
+       if (b->node == node)
+         {
+           print_node_brief (file, prefix, node, indent);
+           return;
+         }
+      
+      /* Add this node to the table.  */
+      b = XNEW (struct bucket);
+      b->node = node;
+      b->next = table[hash];
+      table[hash] = b;
+    }
 
   /* Indent to the specified column, since this is the long form.  */
   indent_to (file, indent);
 
   /* Print the slot this node is in, and its code, and address.  */
 
   /* Indent to the specified column, since this is the long form.  */
   indent_to (file, indent);
 
   /* Print the slot this node is in, and its code, and address.  */
-  fprintf (file, "%s <%s %p",
-          prefix, tree_code_name[(int) TREE_CODE (node)], (void *) node);
+  fprintf (file, "%s <%s", prefix, tree_code_name[(int) TREE_CODE (node)]);
+  dump_addr (file, " ", node);
 
   /* Print the name, if any.  */
 
   /* Print the name, if any.  */
-  if (class == tcc_declaration)
+  if (tclass == tcc_declaration)
     {
       if (DECL_NAME (node))
        fprintf (file, " %s", IDENTIFIER_POINTER (DECL_NAME (node)));
       else if (TREE_CODE (node) == LABEL_DECL
               && LABEL_DECL_UID (node) != -1)
     {
       if (DECL_NAME (node))
        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));
     }
       else
        fprintf (file, " %c.%u", TREE_CODE (node) == CONST_DECL ? 'C' : 'D',
                 DECL_UID (node));
     }
-  else if (class == tcc_type)
+  else if (tclass == tcc_type)
     {
       if (TYPE_NAME (node))
        {
     {
       if (TYPE_NAME (node))
        {
@@ -270,8 +299,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);
 
   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))
   if (TREE_ADDRESSABLE (node))
     fputs (" addressable", file);
   if (TREE_THIS_VOLATILE (node))
@@ -343,8 +370,14 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
       if (TREE_CODE (node) == TYPE_DECL && TYPE_DECL_SUPPRESS_DEBUG (node))
        fputs (" suppress-debug", file);
 
       if (TREE_CODE (node) == TYPE_DECL && TYPE_DECL_SUPPRESS_DEBUG (node))
        fputs (" suppress-debug", file);
 
-      if (TREE_CODE (node) == FUNCTION_DECL && DECL_INLINE (node))
-       fputs (DECL_DECLARED_INLINE_P (node) ? " inline" : " autoinline", file);
+      if (TREE_CODE (node) == FUNCTION_DECL
+         && DECL_FUNCTION_SPECIFIC_TARGET (node))
+       fputs (" function-specific-target", file);
+      if (TREE_CODE (node) == FUNCTION_DECL
+         && DECL_FUNCTION_SPECIFIC_OPTIMIZATION (node))
+       fputs (" function-specific-opt", file);
+      if (TREE_CODE (node) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (node))
+       fputs (" autoinline", file);
       if (TREE_CODE (node) == FUNCTION_DECL && DECL_BUILT_IN (node))
        fputs (" built-in", file);
       if (TREE_CODE (node) == FUNCTION_DECL && DECL_NO_STATIC_CHAIN (node))
       if (TREE_CODE (node) == FUNCTION_DECL && DECL_BUILT_IN (node))
        fputs (" built-in", file);
       if (TREE_CODE (node) == FUNCTION_DECL && DECL_NO_STATIC_CHAIN (node))
@@ -391,7 +424,9 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
          if (DECL_VIRTUAL_P (node))
            fputs (" virtual", file);
          if (DECL_PRESERVE_P (node))
          if (DECL_VIRTUAL_P (node))
            fputs (" virtual", file);
          if (DECL_PRESERVE_P (node))
-           fputs (" preserve", file);    
+           fputs (" preserve", file);
+         if (DECL_NO_TBAA_P (node))
+           fputs (" no-tbaa", file);
          if (DECL_LANG_FLAG_0 (node))
            fputs (" decl_0", file);
          if (DECL_LANG_FLAG_1 (node))
          if (DECL_LANG_FLAG_0 (node))
            fputs (" decl_0", file);
          if (DECL_LANG_FLAG_1 (node))
@@ -418,28 +453,26 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
 
 
       xloc = expand_location (DECL_SOURCE_LOCATION (node));
 
 
       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))
        {         
          print_node (file, "size", DECL_SIZE (node), indent + 4);
          print_node (file, "unit size", DECL_SIZE_UNIT (node), indent + 4);
          
 
       if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
        {         
          print_node (file, "size", DECL_SIZE (node), indent + 4);
          print_node (file, "unit size", DECL_SIZE_UNIT (node), indent + 4);
          
-         if (TREE_CODE (node) != FUNCTION_DECL
-             || DECL_INLINE (node) || DECL_BUILT_IN (node))
+         if (TREE_CODE (node) != FUNCTION_DECL || DECL_BUILT_IN (node))
            indent_to (file, indent + 3);
          
            indent_to (file, indent + 3);
          
-         if (TREE_CODE (node) != FUNCTION_DECL)
-           {
-             if (DECL_USER_ALIGN (node))
-               fprintf (file, " user");
-             
-             fprintf (file, " align %d", DECL_ALIGN (node));
-             if (TREE_CODE (node) == FIELD_DECL)
-               fprintf (file, " offset_align " HOST_WIDE_INT_PRINT_UNSIGNED,
-                        DECL_OFFSET_ALIGN (node));
-           }
-         else if (DECL_BUILT_IN (node))
+         if (DECL_USER_ALIGN (node))
+           fprintf (file, " user");
+         
+         fprintf (file, " align %d", DECL_ALIGN (node));
+         if (TREE_CODE (node) == FIELD_DECL)
+           fprintf (file, " offset_align " HOST_WIDE_INT_PRINT_UNSIGNED,
+                    DECL_OFFSET_ALIGN (node));
+
+         if (TREE_CODE (node) == FUNCTION_DECL && DECL_BUILT_IN (node))
            {
              if (DECL_BUILT_IN_CLASS (node) == BUILT_IN_MD)
                fprintf (file, " built-in BUILT_IN_MD %d", DECL_FUNCTION_CODE (node));
            {
              if (DECL_BUILT_IN_CLASS (node) == BUILT_IN_MD)
                fprintf (file, " built-in BUILT_IN_MD %d", DECL_FUNCTION_CODE (node));
@@ -451,13 +484,16 @@ 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,
          
          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)
        {
          print_node (file, "offset", DECL_FIELD_OFFSET (node), indent + 4);
          print_node (file, "bit offset", DECL_FIELD_BIT_OFFSET (node),
                      indent + 4);
        }
       if (TREE_CODE (node) == FIELD_DECL)
        {
          print_node (file, "offset", DECL_FIELD_OFFSET (node), indent + 4);
          print_node (file, "bit offset", DECL_FIELD_BIT_OFFSET (node),
                      indent + 4);
+         if (DECL_BIT_FIELD_TYPE (node))
+           print_node (file, "bit_field_type", DECL_BIT_FIELD_TYPE (node),
+                       indent + 4);
        }
 
       print_node_brief (file, "context", DECL_CONTEXT (node), indent + 4);
        }
 
       print_node_brief (file, "context", DECL_CONTEXT (node), indent + 4);
@@ -502,8 +538,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
               && DECL_STRUCT_FUNCTION (node) != 0)
        {
          indent_to (file, indent + 4);
               && DECL_STRUCT_FUNCTION (node) != 0)
        {
          indent_to (file, indent + 4);
-         fprintf (file, "saved-insns %p",
-                  (void *) DECL_STRUCT_FUNCTION (node));
+         dump_addr (file, "saved-insns ", DECL_STRUCT_FUNCTION (node));
        }
 
       if ((TREE_CODE (node) == VAR_DECL || TREE_CODE (node) == PARM_DECL)
        }
 
       if ((TREE_CODE (node) == VAR_DECL || TREE_CODE (node) == PARM_DECL)
@@ -531,9 +566,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) == 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);
 
       if (TYPE_STRING_FLAG (node))
        fputs (" string-flag", file);
@@ -581,11 +613,17 @@ 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),
 
       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");
+      else
+       dump_addr (file, " canonical type ", TYPE_CANONICAL (node));
+      
       print_node (file, "attributes", TYPE_ATTRIBUTES (node), indent + 4);
 
       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);
        {
          fprintf (file, " precision %d", TYPE_PRECISION (node));
          print_node_brief (file, "min", TYPE_MIN_VALUE (node), indent + 4);
@@ -635,8 +673,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
     case tcc_binary:
     case tcc_reference:
     case tcc_statement:
     case tcc_binary:
     case tcc_reference:
     case tcc_statement:
-      if (TREE_CODE (node) == BIT_FIELD_REF && BIT_FIELD_REF_UNSIGNED (node))
-       fputs (" unsigned", file);
+    case tcc_vl_exp:
       if (TREE_CODE (node) == BIND_EXPR)
        {
          print_node (file, "vars", TREE_OPERAND (node, 0), indent + 4);
       if (TREE_CODE (node) == BIND_EXPR)
        {
          print_node (file, "vars", TREE_OPERAND (node, 0), indent + 4);
@@ -644,17 +681,34 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
          print_node (file, "block", TREE_OPERAND (node, 2), indent + 4);
          break;
        }
          print_node (file, "block", TREE_OPERAND (node, 2), indent + 4);
          break;
        }
-
-      len = TREE_CODE_LENGTH (TREE_CODE (node));
-
-      for (i = 0; i < len; i++)
+      if (TREE_CODE (node) == CALL_EXPR)
        {
        {
-         char temp[10];
-
-         sprintf (temp, "arg %d", i);
-         print_node (file, temp, TREE_OPERAND (node, i), indent + 4);
+         call_expr_arg_iterator iter;
+         tree arg;
+         print_node (file, "fn", CALL_EXPR_FN (node), indent + 4);
+         print_node (file, "static_chain", CALL_EXPR_STATIC_CHAIN (node),
+                     indent + 4);
+         i = 0;
+         FOR_EACH_CALL_EXPR_ARG (arg, iter, node)
+           {
+             char temp[10];
+             sprintf (temp, "arg %d", i);
+             print_node (file, temp, arg, indent + 4);
+             i++;
+           }
        }
        }
+      else
+       {
+         len = TREE_OPERAND_LENGTH (node);
 
 
+         for (i = 0; i < len; i++)
+           {
+             char temp[10];
+             
+             sprintf (temp, "arg %d", i);
+             print_node (file, temp, TREE_OPERAND (node, i), indent + 4);
+           }
+       }
       print_node (file, "chain", TREE_CHAIN (node), indent + 4);
       break;
 
       print_node (file, "chain", TREE_CHAIN (node), indent + 4);
       break;
 
@@ -663,7 +717,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
       switch (TREE_CODE (node))
        {
        case INTEGER_CST:
       switch (TREE_CODE (node))
        {
        case INTEGER_CST:
-         if (TREE_CONSTANT_OVERFLOW (node))
+         if (TREE_OVERFLOW (node))
            fprintf (file, " overflow");
 
          fprintf (file, " ");
            fprintf (file, " overflow");
 
          fprintf (file, " ");
@@ -676,7 +730,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_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:
          break;
 
        case REAL_CST:
@@ -688,7 +743,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
 
            d = TREE_REAL_CST (node);
            if (REAL_VALUE_ISINF (d))
 
            d = TREE_REAL_CST (node);
            if (REAL_VALUE_ISINF (d))
-             fprintf (file, " Inf");
+             fprintf (file,  REAL_VALUE_NEGATIVE (d) ? " -Inf" : " Inf");
            else if (REAL_VALUE_ISNAN (d))
              fprintf (file, " Nan");
            else
            else if (REAL_VALUE_ISNAN (d))
              fprintf (file, " Nan");
            else
@@ -700,6 +755,20 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
          }
          break;
 
          }
          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);
        case VECTOR_CST:
          {
            tree vals = TREE_VECTOR_CST_ELTS (node);
@@ -765,16 +834,32 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
              }
          break;
 
              }
          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:
        case STATEMENT_LIST:
-         fprintf (file, " head %p tail %p stmts",
-                  (void *) node->stmt_list.head, (void *) node->stmt_list.tail);
+         dump_addr (file, " head ", node->stmt_list.head);
+         dump_addr (file, " tail ", node->stmt_list.tail);
+         fprintf (file, " stmts");
          {
            tree_stmt_iterator i;
            for (i = tsi_start (node); !tsi_end_p (i); tsi_next (&i))
              {
                /* Not printing the addresses of the (not-a-tree)
                   'struct tree_stmt_list_node's.  */
          {
            tree_stmt_iterator i;
            for (i = tsi_start (node); !tsi_end_p (i); tsi_next (&i))
              {
                /* Not printing the addresses of the (not-a-tree)
                   'struct tree_stmt_list_node's.  */
-               fprintf (file, " %p", (void *)tsi_stmt (i));
+               dump_addr (file, " ", tsi_stmt (i));
              }
            fprintf (file, "\n");
            for (i = tsi_start (node); !tsi_end_p (i); tsi_next (&i))
              }
            fprintf (file, "\n");
            for (i = tsi_start (node); !tsi_end_p (i); tsi_next (&i))
@@ -799,8 +884,8 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
 
        case SSA_NAME:
          print_node_brief (file, "var", SSA_NAME_VAR (node), indent + 4);
 
        case SSA_NAME:
          print_node_brief (file, "var", SSA_NAME_VAR (node), indent + 4);
-         print_node_brief (file, "def_stmt",
-                           SSA_NAME_DEF_STMT (node), indent + 4);
+         fprintf (file, "def_stmt ");
+         print_gimple_stmt (file, SSA_NAME_DEF_STMT (node), indent + 4, 0);
 
          indent_to (file, indent + 4);
          fprintf (file, "version %u", SSA_NAME_VERSION (node));
 
          indent_to (file, indent + 4);
          fprintf (file, "version %u", SSA_NAME_VERSION (node));
@@ -810,18 +895,13 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
            fprintf (file, " in-free-list");
 
          if (SSA_NAME_PTR_INFO (node)
            fprintf (file, " in-free-list");
 
          if (SSA_NAME_PTR_INFO (node)
-             || SSA_NAME_VALUE (node)
-             || SSA_NAME_AUX (node))
+             || SSA_NAME_VALUE (node))
            {
              indent_to (file, indent + 3);
              if (SSA_NAME_PTR_INFO (node))
            {
              indent_to (file, indent + 3);
              if (SSA_NAME_PTR_INFO (node))
-               fprintf (file, " ptr-info %p",
-                        (void *) SSA_NAME_PTR_INFO (node));
+               dump_addr (file, " ptr-info ", SSA_NAME_PTR_INFO (node));
              if (SSA_NAME_VALUE (node))
              if (SSA_NAME_VALUE (node))
-               fprintf (file, " value %p",
-                        (void *) SSA_NAME_VALUE (node));
-             if (SSA_NAME_AUX (node))
-               fprintf (file, " aux %p", SSA_NAME_AUX (node));
+               dump_addr (file, " value ", SSA_NAME_VALUE (node));
            }
          break;
 
            }
          break;
 
@@ -839,6 +919,14 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
            }
          break;
 
            }
          break;
 
+       case OPTIMIZATION_NODE:
+         cl_optimization_print (file, indent + 4, TREE_OPTIMIZATION (node));
+         break;
+
+       case TARGET_OPTION_NODE:
+         cl_target_option_print (file, indent + 4, TREE_TARGET_OPTION (node));
+         break;
+
        default:
          if (EXCEPTIONAL_CLASS_P (node))
            lang_hooks.print_xnode (file, node, indent);
        default:
          if (EXCEPTIONAL_CLASS_P (node))
            lang_hooks.print_xnode (file, node, indent);
@@ -852,7 +940,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);
     {
       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, ">");
     }
 
   fprintf (file, ">");