Commit 56fc9433 by Ian Lance Taylor

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
parent eedaaaf7
821960465883fbdd96568f2325f55ee4b05de1cb 262d629b1592f681fef396166a671e46cdb31230
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -8224,6 +8224,11 @@ Builtin_call_expression::do_numeric_constant_value(Numeric_constant* nc) const ...@@ -8224,6 +8224,11 @@ Builtin_call_expression::do_numeric_constant_value(Numeric_constant* nc) const
return false; return false;
if (st->named_type() != NULL) if (st->named_type() != NULL)
st->named_type()->convert(this->gogo_); st->named_type()->convert(this->gogo_);
if (st->is_error_type())
{
go_assert(saw_errors());
return false;
}
int64_t offset; int64_t offset;
this->seen_ = true; this->seen_ = true;
bool ok = st->struct_type()->backend_field_offset(this->gogo_, bool ok = st->struct_type()->backend_field_offset(this->gogo_,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment