aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2018-03-01 19:56:14 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2018-03-01 19:56:14 +0000
commit56fc943329299ed3b53ddefd9bcdec997ee9cc71 (patch)
tree642557ee91807bd6032e46f1e207e9ca9f92ddb7 /gcc
parenteedaaaf7d7892011245b1e2054ca917c6d81c213 (diff)
downloadgcc-56fc943329299ed3b53ddefd9bcdec997ee9cc71.zip
gcc-56fc943329299ed3b53ddefd9bcdec997ee9cc71.tar.gz
gcc-56fc943329299ed3b53ddefd9bcdec997ee9cc71.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/go/gofrontend/MERGE2
-rw-r--r--gcc/go/gofrontend/expressions.cc5
2 files changed, 6 insertions, 1 deletions
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE
index f23eef8..dee5f67 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 10ab5b5..109d6b4 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_,