Test case is https://go.dev/cl/417874.
Fixes golang/go#23870
* go-gcc.cc (Gcc_backend::struct_field_expression): Handle a void
expression, as for f().x where f returns a zero-sized type.
if (struct_tree == error_mark_node
|| TREE_TYPE(struct_tree) == error_mark_node)
return this->error_expression();
+
+ // A function call that returns a zero-sized object will have been
+ // changed to return void. A zero-sized object can have a
+ // (zero-sized) field, so support that case.
+ if (TREE_TYPE(struct_tree) == void_type_node)
+ return bstruct;
+
gcc_assert(TREE_CODE(TREE_TYPE(struct_tree)) == RECORD_TYPE);
tree field = TYPE_FIELDS(TREE_TYPE(struct_tree));
if (field == NULL_TREE)