go: fix f().x where f returns zero-sized type
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.
This commit is contained in:
@@ -1707,6 +1707,13 @@ Gcc_backend::struct_field_expression(Bexpression* bstruct, size_t index,
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user