The Go runtime package in libgo is picking up C macros from runtime_sysinfo.go and then re-exporting them to runtime.inc. This can cause name conflicts. Change the Makefile so that we only put the macros we need into runtime.inc. These are the constants that are actually defined by Go code, not runtime_sysinfo.go. There are only a few, so we can pattern match.
This is an additional hack on runtime.inc. The long term goal is to convert the runtime package to Go and eliminate runtime.inc entirely, so a few hacks seem acceptable. This fixes GCC PR 77809. Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu. Committed to mainline. Ian
Index: gcc/go/gofrontend/MERGE =================================================================== --- gcc/go/gofrontend/MERGE (revision 240667) +++ gcc/go/gofrontend/MERGE (working copy) @@ -1,4 +1,4 @@ -f3fb9bf2d5a009a707962a416fcd1a8435756218 +325f8074c5224ae537f8e00aede5c780b70f914c The first line of this file holds the git revision number of the last merge done from the gofrontend repository. Index: libgo/Makefile.am =================================================================== --- libgo/Makefile.am (revision 240667) +++ libgo/Makefile.am (working copy) @@ -1284,8 +1284,13 @@ runtime_go_lo_GOCFLAGS = -fgo-c-header=r runtime-go.lo: $(BUILDPACKAGE) runtime.inc: s-runtime-inc; @true -s-runtime-inc: runtime-go.lo - $(SHELL) $(srcdir)/mvifdiff.sh runtime.inc.tmp runtime.inc +s-runtime-inc: runtime-go.lo Makefile + rm -f runtime.inc.tmp2 + grep -v "#define _" runtime.inc.tmp > runtime.inc.tmp2 + for pattern in '_G[a-z]' '_P[a-z]' _Max _Lock _Sig _Trace _MHeap _Num; do \ + grep "#define $$pattern" runtime.inc.tmp >> runtime.inc.tmp2; \ + done + $(SHELL) $(srcdir)/mvifdiff.sh runtime.inc.tmp2 runtime.inc $(STAMP) $@ runtime_check_GOCFLAGS = -fgo-compiling-runtime runtime/check: $(CHECK_DEPS)