public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r13-1721] go: fix f().x where f returns zero-sized type
@ 2022-07-16 23:30 Ian Lance Taylor
  0 siblings, 0 replies; only message in thread
From: Ian Lance Taylor @ 2022-07-16 23:30 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:2b5baaef0b6e4d1d8e36cda091be26649163ffdb

commit r13-1721-g2b5baaef0b6e4d1d8e36cda091be26649163ffdb
Author: Ian Lance Taylor <iant@golang.org>
Date:   Sat Jul 16 16:29:38 2022 -0700

    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.

Diff:
---
 gcc/go/go-gcc.cc | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/gcc/go/go-gcc.cc b/gcc/go/go-gcc.cc
index 7b4b2adb058..1ba7206caeb 100644
--- a/gcc/go/go-gcc.cc
+++ b/gcc/go/go-gcc.cc
@@ -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)


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-07-16 23:30 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-16 23:30 [gcc r13-1721] go: fix f().x where f returns zero-sized type Ian Lance Taylor

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).