The code that lowers field references can sometimes introduce a double
pointer indirection in cases where it is not/safe appropriate. For
example, in
var p **struct { f int }
p.f = 0
the assignment LHS was being incorrectly lowered to (*(*p)).f.
Detect this situation and issue an error.
Fixes golang/go#21770
Reviewed-on: https://go-review.googlesource.com/62330
From-SVN: r251918
-9d0d5c03a8086f5dd3a23e910abd6e470196973c
+52ebad939927e6cbfb48dd277cef8db451e36533
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
go_assert(st != NULL);
if (type->struct_type() == NULL)
{
+ if (dereferenced)
+ {
+ go_error_at(location, "pointer type has no field %qs",
+ Gogo::message_name(name).c_str());
+ return Expression::make_error(location);
+ }
go_assert(type->points_to() != NULL);
expr = Expression::make_unary(OPERATOR_MULT, expr,
location);