OSDN Git Service

* godump.c (go_output_var): Don't output the variable if there is
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 11 Jan 2011 22:58:35 +0000 (22:58 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 11 Jan 2011 22:58:35 +0000 (22:58 +0000)
already a type with the same name.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@168683 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/godump.c

index a1fc0d1..a9bb4c2 100644 (file)
@@ -1,5 +1,10 @@
 2011-01-11  Ian Lance Taylor  <iant@google.com>
 
+       * godump.c (go_output_var): Don't output the variable if there is
+       already a type with the same name.
+
+2011-01-11  Ian Lance Taylor  <iant@google.com>
+
        * godump.c (go_format_type): Don't generate float80.
 
 2011-01-11  Richard Henderson  <rth@redhat.com>
index 3b4b766..4ec41f0 100644 (file)
@@ -715,13 +715,27 @@ go_output_typedef (struct godump_container *container, tree decl)
 static void
 go_output_var (struct godump_container *container, tree decl)
 {
+  bool is_valid;
+
   if (pointer_set_contains (container->decls_seen, decl)
       || pointer_set_contains (container->decls_seen, DECL_NAME (decl)))
     return;
   pointer_set_insert (container->decls_seen, decl);
   pointer_set_insert (container->decls_seen, DECL_NAME (decl));
-  if (!go_format_type (container, TREE_TYPE (decl), true, false))
+
+  is_valid = go_format_type (container, TREE_TYPE (decl), true, false);
+  if (is_valid
+      && htab_find_slot (container->type_hash,
+                        IDENTIFIER_POINTER (DECL_NAME (decl)),
+                        NO_INSERT) != NULL)
+    {
+      /* There is already a type with this name, probably from a
+        struct tag.  Prefer the type to the variable.  */
+      is_valid = false;
+    }
+  if (!is_valid)
     fprintf (go_dump_file, "// ");
+
   fprintf (go_dump_file, "var _%s ",
           IDENTIFIER_POINTER (DECL_NAME (decl)));
   go_output_type (container);