re PR go/89321 (cross build with riscv64 gccgo compilation failed due to assert in...
authorIan Lance Taylor <ian@gcc.gnu.org>
Thu, 14 Feb 2019 21:07:13 +0000 (21:07 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 14 Feb 2019 21:07:13 +0000 (21:07 +0000)
PR go/89321
    compiler: copy has_padding field from converted struct

    Test case is https://golang.org/cl/162617.

    Fixes https://gcc.gnu.org/PR89321

    Reviewed-on: https://go-review.googlesource.com/c/162618

From-SVN: r268904

gcc/go/gofrontend/MERGE
gcc/go/gofrontend/types.cc

index f74b5f8..ebf8cd5 100644 (file)
@@ -1,4 +1,4 @@
-a487c86418488f6a17dab4f9945e2a5d495e3ddb
+c2fc3b83d832725accd4fa5874a5b5ca02dd90dc
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index e411456..9081af6 100644 (file)
@@ -1003,6 +1003,16 @@ Type::get_backend(Gogo* gogo)
          ins.first->second.is_placeholder = false;
        }
 
+      // We set the has_padding field of a Struct_type when we convert
+      // to the backend type, so if we have multiple Struct_type's
+      // mapping to the same backend type we need to copy the
+      // has_padding field.  FIXME: This is awkward.  We shouldn't
+      // really change the type when setting the backend type, but
+      // there isn't any other good time to add the padding field.
+      if (ins.first->first->struct_type() != NULL
+         && ins.first->first->struct_type()->has_padding())
+       this->struct_type()->set_has_padding();
+
       return ins.first->second.btype;
     }