re PR go/86343 (types built by GO share TYPE_FIELDS in unsupported way)
authorIan Lance Taylor <iant@golang.org>
Wed, 9 Jan 2019 23:38:55 +0000 (23:38 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Wed, 9 Jan 2019 23:38:55 +0000 (23:38 +0000)
PR go/86343
* go-gcc.cc (Gcc_backend::set_placeholder_struct_type): Go back to
build_distinct_type_copy, but copy the fields so that they have
the right DECL_CONTEXT.

From-SVN: r267789

gcc/go/ChangeLog
gcc/go/go-gcc.cc

index 64e20cd128a407e66f74056da7b1b7404fb6f235..0a579bd94177fb4f4eb95ed42717af3edb804025 100644 (file)
@@ -1,3 +1,10 @@
+2019-01-09  Ian Lance Taylor  <iant@golang.org>
+
+       PR go/86343
+       * go-gcc.cc (Gcc_backend::set_placeholder_struct_type): Go back to
+       build_distinct_type_copy, but copy the fields so that they have
+       the right DECL_CONTEXT.
+
 2019-01-09  Sandra Loosemore  <sandra@codesourcery.com>
 
        PR other/16615
index afdc7f8c5b2b36c86caf1c605c9337a70aeace77..7fbdd0741191260d1c6bb61d4d2c01d41ae8b58e 100644 (file)
@@ -1098,9 +1098,13 @@ Gcc_backend::set_placeholder_struct_type(
   if (TYPE_NAME(t) != NULL_TREE)
     {
       // Build the data structure gcc wants to see for a typedef.
-      tree copy = build_variant_type_copy(t);
+      tree copy = build_distinct_type_copy(t);
       TYPE_NAME(copy) = NULL_TREE;
       DECL_ORIGINAL_TYPE(TYPE_NAME(t)) = copy;
+      TYPE_SIZE(copy) = NULL_TREE;
+      Btype* bc = this->make_type(copy);
+      this->fill_in_struct(bc, fields);
+      delete bc;
     }
 
   return r->get_tree() != error_mark_node;