Commit d6218114 by Ian Lance Taylor

compiler: Better error message of unsafe.Offsetof(method value).

From-SVN: r203454
parent 0213a547
...@@ -7253,6 +7253,15 @@ Builtin_call_expression::do_lower(Gogo* gogo, Named_object* function, ...@@ -7253,6 +7253,15 @@ Builtin_call_expression::do_lower(Gogo* gogo, Named_object* function,
if (this->code_ == BUILTIN_OFFSETOF) if (this->code_ == BUILTIN_OFFSETOF)
{ {
Expression* arg = this->one_arg(); Expression* arg = this->one_arg();
if (arg->bound_method_expression() != NULL
|| arg->interface_field_reference_expression() != NULL)
{
this->report_error(_("invalid use of method value as argument "
"of Offsetof"));
return this;
}
Field_reference_expression* farg = arg->field_reference_expression(); Field_reference_expression* farg = arg->field_reference_expression();
while (farg != NULL) while (farg != NULL)
{ {
...@@ -7262,7 +7271,8 @@ Builtin_call_expression::do_lower(Gogo* gogo, Named_object* function, ...@@ -7262,7 +7271,8 @@ Builtin_call_expression::do_lower(Gogo* gogo, Named_object* function,
// it must not be reached through pointer indirections. // it must not be reached through pointer indirections.
if (farg->expr()->deref() != farg->expr()) if (farg->expr()->deref() != farg->expr())
{ {
this->report_error(_("argument of Offsetof implies indirection of an embedded field")); this->report_error(_("argument of Offsetof implies "
"indirection of an embedded field"));
return this; return this;
} }
// Go up until we reach the original base. // Go up until we reach the original base.
...@@ -7672,6 +7682,8 @@ Find_call_expression::expression(Expression** pexpr) ...@@ -7672,6 +7682,8 @@ Find_call_expression::expression(Expression** pexpr)
bool bool
Builtin_call_expression::do_is_constant() const Builtin_call_expression::do_is_constant() const
{ {
if (this->is_error_expression())
return true;
switch (this->code_) switch (this->code_)
{ {
case BUILTIN_LEN: case BUILTIN_LEN:
......
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