Patchwork Go patch committed: Fix handling of dummy types for -fdump-go-spec

login
register
mail settings
Submitter Ian Taylor
Date Dec. 5, 2012, 6:14 a.m.
Message ID <mcr4nk1rpof.fsf@google.com>
Download mbox | patch
Permalink /patch/203788/
State New
Headers show

Comments

Ian Taylor - Dec. 5, 2012, 6:14 a.m.
The -fdump-go-spec option handles types that are never defined by
outputting a dummy definition of the type.  However, it does not handle
types are defined but whose definition could not be represented in Go.
This patch fixes that problem: if the definition was found but could not
be printed, we produce a dummy type.  This is necessary because there
may be representable structs that have fields that point to these
types.  Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu.
Committed to mainline.

Ian


2012-12-04  Ian Lance Taylor  <iant@google.com>

	* godump.c (find_dummy_types): Output a dummy type if we couldn't
	output the real type.

Patch

Index: godump.c
===================================================================
--- godump.c	(revision 194180)
+++ godump.c	(working copy)
@@ -1,5 +1,5 @@ 
 /* Output Go language descriptions of types.
-   Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+   Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
    Written by Ian Lance Taylor <iant@google.com>.
 
 This file is part of GCC.
@@ -1164,9 +1164,11 @@  find_dummy_types (const void *ptr, void 
   struct godump_container *data = (struct godump_container *) adata;
   const char *type = (const char *) ptr;
   void **slot;
+  void **islot;
 
   slot = htab_find_slot (data->type_hash, type, NO_INSERT);
-  if (slot == NULL)
+  islot = htab_find_slot (data->invalid_hash, type, NO_INSERT);
+  if (slot == NULL || islot != NULL)
     fprintf (go_dump_file, "type _%s struct {}\n", type);
   return true;
 }