compiler: avoid crashing on bad self-referential type
authorIan Lance Taylor <ian@gcc.gnu.org>
Thu, 1 Mar 2018 19:56:14 +0000 (19:56 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 1 Mar 2018 19:56:14 +0000 (19:56 +0000)
    The compiler was crashing partway through emitting an error for a bad
    self-referential struct type (which refers to one of its own fields
    via an unsafe.Offset expression). Tweak the offset logic to check for
    this class of type error and exit cleanly.

    Fixes golang/go#24180

    Reviewed-on: https://go-review.googlesource.com/97855

From-SVN: r258112

gcc/go/gofrontend/MERGE
gcc/go/gofrontend/expressions.cc

index f23eef874fd1c6dce6e8b581f2613e176f60966f..dee5f671184e97cac03391847652e2745fbe8184 100644 (file)
@@ -1,4 +1,4 @@
-821960465883fbdd96568f2325f55ee4b05de1cb
+262d629b1592f681fef396166a671e46cdb31230
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index 10ab5b50db9275f7f298dd91aa7c93bebe577292..109d6b469316e37feef221b7e625984ee205cc72 100644 (file)
@@ -8224,6 +8224,11 @@ Builtin_call_expression::do_numeric_constant_value(Numeric_constant* nc) const
             return false;
           if (st->named_type() != NULL)
             st->named_type()->convert(this->gogo_);
+          if (st->is_error_type())
+            {
+              go_assert(saw_errors());
+              return false;
+            }
           int64_t offset;
           this->seen_ = true;
           bool ok = st->struct_type()->backend_field_offset(this->gogo_,