Sorry about this, Rainer. I think I see the issue, though it's hard to be certain without access to a Solaris machine. Assuming the icmp6.h header hasn't changed since the last time Solaris code was open source [0], I think the issue is likely to be typedefs that define a named struct and an alias for that struct in one shot. I'll start pulling on that thread.
[0]: https://github.com/kofemann/opensolaris/blob/80192cd83/usr/src/uts/common/netinet/icmp6.h#L71-L74 On Thu, Dec 10, 2020 at 2:18 PM Rainer Orth <r...@cebitec.uni-bielefeld.de> wrote: > > Hi Ian, > > > On Tue, Dec 8, 2020 at 2:57 PM Nikhil Benesch <nikhil.bene...@gmail.com> > > wrote: > >> > >> This patch corrects -fdump-go-spec's handling of incomplete types. > >> To my knowledge the issue fixed here has not been previously > >> reported. It was exposed by an in-progress port of gccgo to FreeBSD. > >> > >> Given the following C code > >> > >> struct s_fwd v_fwd; > >> struct s_fwd { }; > >> > >> -fdump-go-spec currently produces the following Go code > >> > >> var v_fwd struct {}; > >> type s_fwd s_fwd; > >> > >> whereas the correct Go code is: > >> > >> var v_fwd s_fwd; > >> type s_fwd struct {}; > >> > >> (Go is considerably more permissive than C with out-of-order > >> declarations, so anywhere an out-of-order declaration is valid in > >> C it is valid in Go.) > >> > >> gcc/: > >> * godump.c (go_format_type): Don't consider whether a type has > >> been seen when determining whether to output a type by name. > >> Consider only the use_type_name parameter. > >> (go_output_typedef): When outputting a typedef, format the > >> declaration's original type, which contains the name of the > >> underlying type rather than the name of the typedef. > >> gcc/testsuite: > >> * gcc.misc-tests/godump-1.c: Add test case. > > > > Thanks. I changed function types to use type names, and committed like so. > > This patch badly broke Solaris bootstrap: > > runtime_sysinfo.go:623:6: error: invalid recursive type > 623 | type ___FILE ___FILE > | ^ > runtime_sysinfo.go:7045:6: error: redefinition of ‘_mld_hdr_t’ > 7045 | type _mld_hdr_t _mld_hdr > | ^ > runtime_sysinfo.go:1510:6: note: previous definition of ‘_mld_hdr_t’ was here > 1510 | type _mld_hdr_t _mld_hdr > | ^ > runtime_sysinfo.go:7070:6: error: redefinition of ‘_upad128_t’ > 7070 | type _upad128_t struct { _l [4]uint32; } > | ^ > runtime_sysinfo.go:7029:6: note: previous definition of ‘_upad128_t’ was here > 7029 | type _upad128_t struct {} > | ^ > runtime_sysinfo.go:7071:6: error: redefinition of ‘_zone_net_addr_t’ > 7071 | type _zone_net_addr_t _zone_net_addr > | ^ > runtime_sysinfo.go:1079:6: note: previous definition of ‘_zone_net_addr_t’ > was here > 1079 | type _zone_net_addr_t _zone_net_addr > | ^ > runtime_sysinfo.go:7072:6: error: redefinition of ‘_flow_arp_desc_t’ > 7072 | type _flow_arp_desc_t _flow_arp_desc_s > | ^ > runtime_sysinfo.go:1127:6: note: previous definition of ‘_flow_arp_desc_t’ > was here > 1127 | type _flow_arp_desc_t _flow_arp_desc_s > | ^ > runtime_sysinfo.go:7073:6: error: redefinition of ‘_flow_l3_desc_t’ > 7073 | type _flow_l3_desc_t _flow_l3_desc_s > | ^ > runtime_sysinfo.go:1130:6: note: previous definition of ‘_flow_l3_desc_t’ was > here > 1130 | type _flow_l3_desc_t _flow_l3_desc_s > | ^ > runtime_sysinfo.go:7074:6: error: redefinition of ‘_mac_ipaddr_t’ > 7074 | type _mac_ipaddr_t _mac_ipaddr_s > | ^ > runtime_sysinfo.go:1150:6: note: previous definition of ‘_mac_ipaddr_t’ was > here > 1150 | type _mac_ipaddr_t _mac_ipaddr_s > | ^ > runtime_sysinfo.go:7075:6: error: redefinition of ‘_mactun_info_t’ > 7075 | type _mactun_info_t _mactun_info_s > | ^ > runtime_sysinfo.go:1213:6: note: previous definition of ‘_mactun_info_t’ was > here > 1213 | type _mactun_info_t _mactun_info_s > | ^ > runtime_sysinfo.go:187:19: error: use of undefined type ‘_timespec’ > 187 | type _timestruc_t _timespec > | ^ > runtime_sysinfo.go:1213:21: error: use of undefined type ‘_mactun_info_s’ > 1213 | type _mactun_info_t _mactun_info_s > | ^ > runtime_sysinfo.go:741:13: error: use of undefined type ‘_ip6_hdr’ > 741 | type _ip6_t _ip6_hdr > | ^ > runtime_sysinfo.go:1079:23: error: use of undefined type ‘_zone_net_addr’ > 1079 | type _zone_net_addr_t _zone_net_addr > | ^ > runtime_sysinfo.go:1127:23: error: use of undefined type ‘_flow_arp_desc_s’ > 1127 | type _flow_arp_desc_t _flow_arp_desc_s > | ^ > runtime_sysinfo.go:1130:22: error: use of undefined type ‘_flow_l3_desc_s’ > 1130 | type _flow_l3_desc_t _flow_l3_desc_s > | ^ > runtime_sysinfo.go:1150:20: error: use of undefined type ‘_mac_ipaddr_s’ > 1150 | type _mac_ipaddr_t _mac_ipaddr_s > | ^ > runtime_sysinfo.go:1210:28: error: use of undefined type > ‘_mac_resource_props_s’ > 1210 | type _mac_resource_props_t _mac_resource_props_s > | ^ > runtime_sysinfo.go:1510:17: error: use of undefined type ‘_mld_hdr’ > 1510 | type _mld_hdr_t _mld_hdr > | ^ > runtime_sysinfo.go:1519:17: error: use of undefined type ‘_mld2mar’ > 1519 | type _mld2mar_t _mld2mar > | ^ > runtime_sysinfo.go:1535:29: error: use of undefined type > ‘_nd_neighbor_solicit’ > 1535 | type _nd_neighbor_solicit_t _nd_neighbor_solicit > | ^ > runtime_sysinfo.go:1538:28: error: use of undefined type ‘_nd_neighbor_advert’ > 1538 | type _nd_neighbor_advert_t _nd_neighbor_advert > | ^ > runtime_sysinfo.go:1541:21: error: use of undefined type ‘_nd_redirect’ > 1541 | type _nd_redirect_t _nd_redirect > | ^ > runtime_sysinfo.go:1548:28: error: use of undefined type ‘_nd_opt_prefix_info’ > 1548 | type _nd_opt_prefix_info_t _nd_opt_prefix_info > | ^ > make: *** [Makefile:2959: runtime.lo] Error 1 > > Comparing runtime_sysinfo.go with a slightly older version in two > instances: > > -type ___gnuc_va_list *int8 > -type ___va_list *int8 > -type ___FILE struct { _cnt int32; _ptr *uint8; _base *uint8; _flag uint8; > _magic uint8; Godump_0_pad [2]byte; } > +type ___FILE ___FILE > > +type _mld_hdr_t _mld_hdr > > -type _mld_hdr_t struct { mld_icmp6_hdr _icmp6_hdr; mld_addr [16]byte; } > +type _mld_hdr_t _mld_hdr > > Rainer > > -- > ----------------------------------------------------------------------------- > Rainer Orth, Center for Biotechnology, Bielefeld University