OSDN Git Service

* godump.c (go_output_typedef): Support printing enum values that
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 3 Oct 2011 20:29:11 +0000 (20:29 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 3 Oct 2011 20:29:11 +0000 (20:29 +0000)
don't fit in a signed HOST_WIDE_INT.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@179480 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/godump.c

index 95d3699..8fe495d 100644 (file)
@@ -1,3 +1,9 @@
+2011-10-03  Jakub Jelinek  <jakub@redhat.com>
+           Ian Lance Taylor  <iant@google.com>
+
+       * godump.c (go_output_typedef): Support printing enum values that
+       don't fit in a signed HOST_WIDE_INT.
+
 2011-09-30  Jakub Jelinek  <jakub@redhat.com>
 
        PR inline-asm/50571
index 7ee7af0..e18bb38 100644 (file)
@@ -844,9 +844,24 @@ go_output_typedef (struct godump_container *container, tree decl)
       for (element = TYPE_VALUES (TREE_TYPE (decl));
           element != NULL_TREE;
           element = TREE_CHAIN (element))
-       fprintf (go_dump_file, "const _%s = " HOST_WIDE_INT_PRINT_DEC "\n",
-                IDENTIFIER_POINTER (TREE_PURPOSE (element)),
-                tree_low_cst (TREE_VALUE (element), 0));
+       {
+         fprintf (go_dump_file, "const _%s = ",
+                  IDENTIFIER_POINTER (TREE_PURPOSE (element)));
+         if (host_integerp (TREE_VALUE (element), 0))
+           fprintf (go_dump_file, HOST_WIDE_INT_PRINT_DEC,
+                    tree_low_cst (TREE_VALUE (element), 0));
+         else if (host_integerp (TREE_VALUE (element), 1))
+           fprintf (go_dump_file, HOST_WIDE_INT_PRINT_UNSIGNED,
+                    ((unsigned HOST_WIDE_INT)
+                     tree_low_cst (TREE_VALUE (element), 1)));
+         else
+           fprintf (go_dump_file, HOST_WIDE_INT_PRINT_DOUBLE_HEX,
+                    ((unsigned HOST_WIDE_INT)
+                     TREE_INT_CST_HIGH (TREE_VALUE (element))),
+                    TREE_INT_CST_LOW (TREE_VALUE (element)));
+         fprintf (go_dump_file, "\n");
+       }
+
       pointer_set_insert (container->decls_seen, TREE_TYPE (decl));
       if (TYPE_CANONICAL (TREE_TYPE (decl)) != NULL_TREE)
        pointer_set_insert (container->decls_seen,