From 56fc943329299ed3b53ddefd9bcdec997ee9cc71 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 1 Mar 2018 19:56:14 +0000 Subject: [PATCH] compiler: avoid crashing on bad self-referential type 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 | 2 +- gcc/go/gofrontend/expressions.cc | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index f23eef874fd..dee5f671184 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -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. diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index 10ab5b50db9..109d6b46931 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -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_, -- 2.30.2