libgo patch committed: Update to Go1.17rc2 release

Ian Lance Taylor iant@golang.org
Fri Aug 13 03:23:35 GMT 2021


This patch updates libgo from the Go1.16.5 release to the Go 1.17rc2
release.  As usual with these version updates, the patch itself is too
large to attach to this e-mail message.  I've attached the changes to
files that are specific to gccgo.  Bootstraped and ran Go testsuite on
x86_64-pc-linux-gnu.  Committed to mainline.

Ian
-------------- next part --------------
5fe441d33024fe33b9835c3e8d6b9f6cf24715f1
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE
index 539d886b08f..bcbe1d93018 100644
--- a/gcc/go/gofrontend/MERGE
+++ b/gcc/go/gofrontend/MERGE
@@ -1,4 +1,4 @@
-5edbb624b2595d644eb6842c952a292c41f7d6fa
+33f65dce43bd01c1fa38cd90a78c9aea6ca6dd59
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
diff --git a/libgo/MERGE b/libgo/MERGE
index ac842716022..4286d5c5433 100644
--- a/libgo/MERGE
+++ b/libgo/MERGE
@@ -1,4 +1,4 @@
-7677616a263e8ded606cc8297cb67ddc667a876e
+72ab3ff68b1ec894fe5599ec82b8849f3baa9d94
 
 The first line of this file holds the git revision number of the
 last merge done from the master library sources.
diff --git a/libgo/Makefile.am b/libgo/Makefile.am
index dec98756673..92fedcf6eb8 100644
--- a/libgo/Makefile.am
+++ b/libgo/Makefile.am
@@ -366,6 +366,7 @@ toolexeclibgoregexp_DATA = \
 toolexeclibgoruntimedir = $(toolexeclibgodir)/runtime
 
 toolexeclibgoruntime_DATA = \
+	runtime/cgo.gox \
 	runtime/debug.gox \
 	runtime/metrics.gox \
 	runtime/pprof.gox \
@@ -428,7 +429,9 @@ noinst_DATA = \
 	internal/testenv.gox \
 	internal/trace.gox \
 	net/internal/socktest.gox \
-	os/signal/internal/pty.gox
+	os/signal/internal/pty.gox \
+	reflect/internal/example1.gox \
+	reflect/internal/example2.gox
 
 if LIBGO_IS_RTEMS
 rtems_task_variable_add_file = runtime/rtems-task-variable-add.c
@@ -480,14 +483,10 @@ version.go: s-version; @true
 s-version: Makefile
 	rm -f version.go.tmp
 	echo "package sys" > version.go.tmp
-	echo 'func init() { DefaultGoroot = "$(prefix)" }' >> version.go.tmp
-	echo 'const TheVersion = "'`cat $(srcdir)/VERSION | sed 1q`' '`$(GOC) --version | sed 1q`'"' >> version.go.tmp
-	echo 'const Goexperiment = ``' >> version.go.tmp
 	echo 'const GOARCH = "'$(GOARCH)'"' >> version.go.tmp
 	echo 'const GOOS = "'$(GOOS)'"' >> version.go.tmp
 	echo 'const GccgoToolDir = "$(libexecsubdir)"' >> version.go.tmp
-	echo >> version.go.tmp
-	echo "type ArchFamilyType int" >> version.go.tmp
+	echo 'const StackGuardMultiplierDefault = 1' >> version.go.tmp
 	echo >> version.go.tmp
 	echo "const (" >> version.go.tmp
 	echo "	UNKNOWN ArchFamilyType = iota" >> version.go.tmp
@@ -507,13 +506,13 @@ s-version: Makefile
 	done
 	echo >> version.go.tmp
 	echo "const (" >> version.go.tmp
-	echo "  ArchFamily = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) family`" >> version.go.tmp
-	echo "  BigEndian = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) bigendian`" >> version.go.tmp
-	echo "  CacheLineSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) cachelinesize`" >> version.go.tmp
-	echo "  DefaultPhysPageSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) defaultphyspagesize`" >> version.go.tmp
-	echo "  Int64Align = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) int64align`" >> version.go.tmp
-	echo "  MinFrameSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) minframesize`" >> version.go.tmp
-	echo "  PCQuantum = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) pcquantum`" >> version.go.tmp
+	echo "  _ArchFamily = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) family`" >> version.go.tmp
+	echo "  _BigEndian = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) bigendian`" >> version.go.tmp
+	echo "  _DefaultPhysPageSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) defaultphyspagesize`" >> version.go.tmp
+	echo "  _Int64Align = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) int64align`" >> version.go.tmp
+	echo "  _MinFrameSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) minframesize`" >> version.go.tmp
+	echo "  _PCQuantum = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) pcquantum`" >> version.go.tmp
+	echo "  _StackAlign = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) stackalign`" >> version.go.tmp
 	echo ")" >> version.go.tmp
 	echo >> version.go.tmp
 	for a in $(ALLGOOS); do \
@@ -526,7 +525,6 @@ s-version: Makefile
 	  fi; \
 	done
 	echo >> version.go.tmp
-	echo "type Uintreg uintptr" >> version.go.tmp
 	$(SHELL) $(srcdir)/mvifdiff.sh version.go.tmp version.go
 	$(STAMP) $@
 
@@ -547,24 +545,31 @@ s-gcpu: Makefile
 	$(SHELL) $(srcdir)/mvifdiff.sh gcpugen.go.tmp gcpugen.go
 	$(STAMP) $@
 
+buildcfg.go: s-buildcfg; @true
+s-buildcfg: Makefile
+	rm -f buildcfg.go.tmp
+	echo "package buildcfg" > buildcfg.go.tmp
+	echo "import \"runtime\"" >> buildcfg.go.tmp
+	echo 'func defaultGOROOTValue() string { return `$(prefix)` }' >> buildcfg.go.tmp
+	echo 'const defaultGO386 = `sse2`' >> buildcfg.go.tmp
+	echo 'const defaultGOARM = `5`' >> buildcfg.go.tmp
+	echo 'const defaultGOMIPS = `hardfloat`' >> buildcfg.go.tmp
+	echo 'const defaultGOMIPS64 = `hardfloat`' >> buildcfg.go.tmp
+	echo 'const defaultGOPPC64 = `power8`' >> buildcfg.go.tmp
+	echo 'const defaultGOEXPERIMENT = `fieldtrack`' >> buildcfg.go.tmp
+	echo 'const defaultGO_EXTLINK_ENABLED = ``' >> buildcfg.go.tmp
+	echo 'const defaultGO_LDSO = ``' >> buildcfg.go.tmp
+	echo 'const version = `'`cat $(srcdir)/VERSION | sed 1q`' '`$(GOC) --version | sed 1q`'`' >> buildcfg.go.tmp
+	echo 'const defaultGOOS = runtime.GOOS' >> buildcfg.go.tmp
+	echo 'const defaultGOARCH = runtime.GOARCH' >> buildcfg.go.tmp
+	$(SHELL) $(srcdir)/mvifdiff.sh buildcfg.go.tmp buildcfg.go
+	$(STAMP) $@
+
 objabi.go: s-objabi; @true
 s-objabi: Makefile
 	rm -f objabi.go.tmp
 	echo "package objabi" > objabi.go.tmp
-	echo "import \"runtime\"" >> objabi.go.tmp
-	echo 'func defaultGOROOTValue() string { return `$(prefix)` }' >> objabi.go.tmp
-	echo 'const defaultGO386 = `sse2`' >> objabi.go.tmp
-	echo 'const defaultGOARM = `5`' >> objabi.go.tmp
-	echo 'const defaultGOMIPS = `hardfloat`' >> objabi.go.tmp
-	echo 'const defaultGOMIPS64 = `hardfloat`' >> objabi.go.tmp
-	echo 'const defaultGOPPC64 = `power8`' >> objabi.go.tmp
-	echo 'const defaultGOOS = runtime.GOOS' >> objabi.go.tmp
-	echo 'const defaultGOARCH = runtime.GOARCH' >> objabi.go.tmp
-	echo 'const defaultGO_EXTLINK_ENABLED = ``' >> objabi.go.tmp
-	echo 'const defaultGO_LDSO = ``' >> objabi.go.tmp
-	echo 'const version = `'`cat $(srcdir)/VERSION | sed 1q`' '`$(GOC) --version | sed 1q`'`' >> objabi.go.tmp
 	echo 'const stackGuardMultiplierDefault = 1' >> objabi.go.tmp
-	echo 'const goexperiment = ``' >> objabi.go.tmp
 	$(SHELL) $(srcdir)/mvifdiff.sh objabi.go.tmp objabi.go
 	$(STAMP) $@
 
@@ -671,7 +676,7 @@ s-zstdpkglist: Makefile libgo-packages.txt
 	echo 'package goroot' > zstdpkglist.go.tmp
 	echo "" >> zstdpkglist.go.tmp
 	echo 'var stdpkg = map[string]bool{' >> zstdpkglist.go.tmp
-	echo $(libgo_go_objs) 'unsafe.lo' 'runtime/cgo.lo' | sed 's|[a-z0-9_./]*_c\.lo||g' | sed 's|golang\.org/[a-z0-9_./]*\.lo||g' | sed 's|\([a-z0-9_./]*\)\.lo|"\1": true,|g' >> zstdpkglist.go.tmp
+	echo $(libgo_go_objs) 'unsafe.lo' | sed 's|[a-z0-9_./]*_c\.lo||g' | sed 's|golang\.org/[a-z0-9_./]*\.lo||g' | sed 's|\([a-z0-9_./]*\)\.lo|"\1": true,|g' >> zstdpkglist.go.tmp
 	echo '}' >> zstdpkglist.go.tmp
 	$(SHELL) $(srcdir)/mvifdiff.sh zstdpkglist.go.tmp zstdpkglist.go
 	$(STAMP) $@
@@ -1054,6 +1059,9 @@ internal/cpu.lo.dep: $(extra_go_files_internal_cpu)
 extra_go_files_golang_org_x_sys_cpu = gcpugen.go
 golang.org/x/sys/cpu.lo.dep: $(extra_go_files_golang_org_x_sys_cpu)
 
+extra_go_files_internal_buildcfg = buildcfg.go
+cmd/internal/buildcfg.lo.dep: $(extra_go_files_internal_buildcfg)
+
 extra_go_files_internal_goroot = zstdpkglist.go
 internal/goroot.lo.dep: $(extra_go_files_internal_goroot)
 
diff --git a/libgo/VERSION b/libgo/VERSION
index e336ec201bf..904eb73bd5c 100644
--- a/libgo/VERSION
+++ b/libgo/VERSION
@@ -1 +1 @@
-go1.16.5
+go1.17rc2
diff --git a/libgo/check-packages.txt b/libgo/check-packages.txt
index 1e549cae4b0..dd8990f10e2 100644
--- a/libgo/check-packages.txt
+++ b/libgo/check-packages.txt
@@ -43,7 +43,10 @@ crypto/des
 crypto/dsa
 crypto/ecdsa
 crypto/ed25519
+crypto/ed25519/internal/edwards25519
+crypto/ed25519/internal/edwards25519/field
 crypto/elliptic
+crypto/elliptic/internal/fiat
 crypto/hmac
 crypto/internal/subtle
 crypto/md5
@@ -110,6 +113,7 @@ index/suffixarray
 internal/cpu
 internal/execabs
 internal/fmtsort
+internal/itoa
 internal/poll
 internal/profile
 internal/reflectlite
@@ -139,6 +143,7 @@ net/http/httptest
 net/http/httptrace
 net/http/httputil
 net/http/internal
+net/http/internal/ascii
 net/http/pprof
 net/internal/socktest
 net/mail
@@ -157,6 +162,7 @@ reflect
 regexp
 regexp/syntax
 runtime
+runtime/cgo
 runtime/debug
 runtime/internal/atomic
 runtime/internal/math
diff --git a/libgo/configure.ac b/libgo/configure.ac
index ebab9d9de3e..1f4f32dae2b 100644
--- a/libgo/configure.ac
+++ b/libgo/configure.ac
@@ -10,7 +10,7 @@ AC_INIT(package-unused, version-unused,, libgo)
 AC_CONFIG_SRCDIR(Makefile.am)
 AC_CONFIG_HEADER(config.h)
 
-libtool_VERSION=19:0:0
+libtool_VERSION=20:0:0
 AC_SUBST(libtool_VERSION)
 
 AM_ENABLE_MULTILIB(, ..)
diff --git a/libgo/go/runtime/os_gccgo.go b/libgo/go/runtime/os_gccgo.go
index 65d7aef165a..da12c35d26c 100644
--- a/libgo/go/runtime/os_gccgo.go
+++ b/libgo/go/runtime/os_gccgo.go
@@ -97,3 +97,11 @@ func setNonblock(fd int32) {
 		fcntlUintptr(uintptr(fd), _F_SETFL, flags|_O_NONBLOCK)
 	}
 }
+
+// For gccgo this is in the C code.
+func osyield()
+
+//go:nosplit
+func osyield_no_g() {
+	osyield()
+}
diff --git a/libgo/go/runtime/testdata/testprogcgo/traceback_gccgo.go b/libgo/go/runtime/testdata/testprogcgo/traceback_gccgo.go
index 83357fdd5d9..2d07c2db8a4 100644
--- a/libgo/go/runtime/testdata/testprogcgo/traceback_gccgo.go
+++ b/libgo/go/runtime/testdata/testprogcgo/traceback_gccgo.go
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+//go:build gccgo
 // +build gccgo
 
 package main
diff --git a/libgo/gotool-packages.txt b/libgo/gotool-packages.txt
index f28ad6977aa..15c928ff7fb 100644
--- a/libgo/gotool-packages.txt
+++ b/libgo/gotool-packages.txt
@@ -27,7 +27,6 @@ cmd/go/internal/modinfo
 cmd/go/internal/modload
 cmd/go/internal/mvs
 cmd/go/internal/par
-cmd/go/internal/renameio
 cmd/go/internal/robustio
 cmd/go/internal/run
 cmd/go/internal/search
@@ -86,6 +85,7 @@ golang.org/x/tools/go/analysis/passes/nilfunc
 golang.org/x/tools/go/analysis/passes/pkgfact
 golang.org/x/tools/go/analysis/passes/printf
 golang.org/x/tools/go/analysis/passes/shift
+golang.org/x/tools/go/analysis/passes/sigchanyzer
 golang.org/x/tools/go/analysis/passes/stdmethods
 golang.org/x/tools/go/analysis/passes/stringintconv
 golang.org/x/tools/go/analysis/passes/structtag
diff --git a/libgo/libgo-packages.txt b/libgo/libgo-packages.txt
index 707def56de7..4fc8c843f02 100644
--- a/libgo/libgo-packages.txt
+++ b/libgo/libgo-packages.txt
@@ -19,7 +19,9 @@ crypto/dsa
 crypto/ecdsa
 crypto/ed25519
 crypto/ed25519/internal/edwards25519
+crypto/ed25519/internal/edwards25519/field
 crypto/elliptic
+crypto/elliptic/internal/fiat
 crypto/hmac
 crypto/internal/randutil
 crypto/internal/subtle
@@ -69,6 +71,7 @@ go/importer
 go/internal/gccgoimporter
 go/internal/gcimporter
 go/internal/srcimporter
+go/internal/typeparams
 go/parser
 go/printer
 go/scanner
@@ -110,13 +113,16 @@ image/internal/imageutil
 image/jpeg
 image/png
 index/suffixarray
+internal/buildcfg
 internal/bytealg
 internal/cfg
 internal/cpu
 internal/execabs
 internal/fmtsort
+internal/goexperiment
 internal/goroot
 internal/goversion
+internal/itoa
 internal/lazyregexp
 internal/lazytemplate
 internal/nettrace
@@ -157,6 +163,8 @@ net/http/httptest
 net/http/httptrace
 net/http/httputil
 net/http/internal
+net/http/internal/ascii
+net/http/internal/testcert
 net/http/pprof
 net/internal/socktest
 net/mail
@@ -173,9 +181,12 @@ os/user
 path
 path/filepath
 reflect
+reflect/internal/example1
+reflect/internal/example2
 regexp
 regexp/syntax
 runtime
+runtime/cgo
 runtime/debug
 runtime/internal/atomic
 runtime/internal/math
diff --git a/libgo/match.sh b/libgo/match.sh
index cc15a12c674..bf4f141e04a 100755
--- a/libgo/match.sh
+++ b/libgo/match.sh
@@ -119,6 +119,11 @@ for f in $gofiles; do
 	386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | ia64 | m68k | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | nios2 | ppc | ppc64 | ppc64le | riscv | riscv64 | s390 | s390x | sh | shbe | sparc | sparc64 | wasm)
 	    tag1=nonmatchingtag
 	    ;;
+	*)
+	    # File name like x_amd64_random.go, where tag1=random.
+	    # Don't match based on tag2.
+	    tag2=
+	    ;;
     esac
 
     case "$tag2" in
@@ -151,18 +156,18 @@ for f in $gofiles; do
 		    fi
 		    match=false
 		    ;;
-		$goos | $goarch | $cgotag | $cmdlinetag | "gccgo" | go1.[0-9] | go1.[0-9][0-9])
+		$goos | $goarch | $cgotag | $cmdlinetag | "gccgo" | "goexperiment.fieldtrack" | go1.[0-9] | go1.[0-9][0-9])
 		    match=true
 		    ;;
-		"!"$goos | "!"$goarch | "!"$cgotag | "!"$cmdlinetag | "!gccgo" | "!"go1.[0-9] | "!"go1.1[0-6])
+		"!"$goos | "!"$goarch | "!"$cgotag | "!"$cmdlinetag | "!gccgo" | "!goexperiment.fieldtrack" | "!"go1.[0-9] | "!"go1.1[0-7])
 		    ;;
 		*,*)
 		    cmatch=true
 		    for ctag in `echo $tag | sed -e 's/,/ /g'`; do
 			case $ctag in
-			    $goos | $goarch | $cgotag | $cmdlinetag | "gccgo" | go1.[0-9] | go1.[0-9][0-9])
+			    $goos | $goarch | $cgotag | $cmdlinetag | "gccgo" | "goexperiment.fieldtrack" | go1.[0-9] | go1.[0-9][0-9])
 				;;
-			    "!"$goos | "!"$goarch | "!"$cgotag | "!"$cmdlinetag | "!gccgo" | "!"go1.[0-9] | "!"go1.1[0-6])
+			    "!"$goos | "!"$goarch | "!"$cgotag | "!"$cmdlinetag | "!gccgo" | "!goexperiment.fieldtrack" | "!"go1.[0-9] | "!"go1.1[0-7])
 				cmatch=false
 				;;
 			    "!"*)
diff --git a/libgo/runtime/go-now.c b/libgo/runtime/go-now.c
index 1c02e5220e4..e1dcd180860 100644
--- a/libgo/runtime/go-now.c
+++ b/libgo/runtime/go-now.c
@@ -8,7 +8,7 @@
 
 #include "runtime.h"
 
-// Return current time.  This is the implementation of time.walltime1().
+// Return current time.  This is the implementation of runtime.walltime().
 
 struct walltime_ret
 {
@@ -16,7 +16,7 @@ struct walltime_ret
   int32_t nsec;
 };
 
-struct walltime_ret now(void) __asm__ (GOSYM_PREFIX "runtime.walltime1")
+struct walltime_ret now(void) __asm__ (GOSYM_PREFIX "runtime.walltime")
   __attribute__ ((no_split_stack));
 
 struct walltime_ret
diff --git a/libgo/runtime/runtime_c.c b/libgo/runtime/runtime_c.c
index bc920a5d406..f92bdd43bc9 100644
--- a/libgo/runtime/runtime_c.c
+++ b/libgo/runtime/runtime_c.c
@@ -199,10 +199,13 @@ getEnd()
 uintptr getText(void)
   __asm__ (GOSYM_PREFIX "runtime.getText");
 
+extern void main_main(void*)
+  __asm__(GOSYM_PREFIX "main.main");
+
 uintptr
 getText(void)
 {
-  return (uintptr)(const void *)(getText);
+  return (uintptr)(const void *)(main_main);
 }
 
 // Return the end of the text segment, assumed to come after the
@@ -224,6 +227,24 @@ getEtext(void)
   return (uintptr)(p);
 }
 
+// Return the start of the BSS section.
+
+uintptr getBSS(void)
+  __asm__ (GOSYM_PREFIX "runtime.getBSS");
+
+uintptr
+getBSS(void)
+{
+  const void *p;
+
+  p = __edata;
+  if (p == NULL)
+    p = _edata;
+  if (p == NULL)
+    p = __bss_start;
+  return (uintptr)(p);
+}
+
 // CPU-specific initialization.
 // Fetch CPUID info on x86.
 
diff --git a/libgo/runtime/stack.c b/libgo/runtime/stack.c
index c78f0c4595b..0c0c30e46ac 100644
--- a/libgo/runtime/stack.c
+++ b/libgo/runtime/stack.c
@@ -23,7 +23,7 @@ bool runtime_usestackmaps;
 #pragma GCC optimize ("-fno-optimize-sibling-calls")
 
 extern void scanstackblock(uintptr addr, uintptr size, void *gcw)
-  __asm__("runtime.scanstackblock");
+  __asm__(GOSYM_PREFIX "runtime.scanstackblock");
 
 static bool doscanstack1(G*, void*)
   __attribute__ ((noinline));
@@ -125,3 +125,66 @@ static bool doscanstack1(G *gp, void *gcw) {
 #endif
 	return true;
 }
+
+extern bool onCurrentStack(uintptr p)
+  __asm__(GOSYM_PREFIX "runtime.onCurrentStack");
+
+bool onCurrentStack(uintptr p)
+{
+#ifdef USING_SPLIT_STACK
+
+	void* sp;
+	size_t spsize;
+	void* next_segment;
+	void* next_sp;
+	void* initial_sp;
+
+	sp = __splitstack_find(nil, nil, &spsize, &next_segment, &next_sp,
+			       &initial_sp);
+	while (sp != nil) {
+		if (p >= (uintptr)(sp) && p < (uintptr)(sp) + spsize) {
+			return true;
+		}
+		sp = __splitstack_find(next_segment, next_sp, &spsize,
+				       &next_segment, &next_sp, &initial_sp);
+	}
+	return false;
+
+#else
+
+	G* gp;
+	byte* bottom;
+	byte* top;
+	byte* temp;
+	byte* nextsp2;
+	byte* initialsp2;
+
+	gp = runtime_g();
+	bottom = (byte*)(&p);
+	top = (byte*)(void*)(gp->gcinitialsp) + gp->gcstacksize;
+	if ((uintptr)(top) < (uintptr)(bottom)) {
+		temp = top;
+		top = bottom;
+		bottom = temp;
+	}
+	if (p >= (uintptr)(bottom) && p < (uintptr)(top)) {
+		return true;
+	}
+
+	nextsp2 = secondary_stack_pointer();
+	if (nextsp2 != nil) {
+		initialsp2 = (byte*)(void*)(gp->gcinitialsp2);
+		if (uintptr(initialsp2) < uintptr(nextsp2)) {
+			temp = initialsp2;
+			initialsp2 = nextsp2;
+			nextsp2 = temp;
+		}
+		if (p >= (uintptr)(nextsp2) && p < (uintptr)(initialsp2)) {
+			return true;
+		}
+	}
+
+	return false;
+
+#endif
+}
diff --git a/libgo/testsuite/gotest b/libgo/testsuite/gotest
index 9eda2ccc70d..e0dd16610db 100755
--- a/libgo/testsuite/gotest
+++ b/libgo/testsuite/gotest
@@ -311,6 +311,11 @@ x)
 	    386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | ia64 | m68k | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | nios2 | ppc | ppc64 | ppc64le | riscv | riscv64 | s390 | s390x | sh | shbe | sparc | sparc64 | wasm)
 		tag1=nonmatchingtag
 		;;
+	    *)
+		# File name like x_amd64_random.go, where tag1=random.
+		# Don't match based on tag2.
+		tag2=
+		;;
 	    esac
 
 	    case "$tag2" in
@@ -342,18 +347,18 @@ x)
 			fi
 			match=false
 			;;
-		    $goos | $goarch | cgo | gccgo | go1.[0-9] | go1.[0-9][0-9])
+		    $goos | $goarch | cgo | gccgo | goexperiment.fieldtrack | go1.[0-9] | go1.[0-9][0-9])
 			match=true
 			;;
-		    "!"$goos | "!"$goarch | "!cgo" | "!gccgo" | "!"go1.[0-9] | "!"go1.1[0-6])
+		    "!"$goos | "!"$goarch | "!cgo" | "!gccgo" | "!goexperiment.fieldtrack" | "!"go1.[0-9] | "!"go1.1[0-7])
 			;;
 		    *,*)
 			cmatch=true
 			for ctag in `echo $tag | sed -e 's/,/ /g'`; do
 			    case $ctag in
-			    $goos | $goarch | cgo | gccgo | go1.[0-9] | go1.[0-9][0-9])
+			    $goos | $goarch | cgo | gccgo | goexperiment.fieldtrack | go1.[0-9] | go1.[0-9][0-9])
 				;;
-			    "!"$goos | "!"$goarch | "!cgo" | "!gccgo" | "!"go1.[0-9] | "!"go1.1[0-6])
+			    "!"$goos | "!"$goarch | "!cgo" | "!gccgo" | "!goexperiment.fieldtrack" | "!"go1.[0-9] | "!"go1.1[0-7])
 				cmatch=false
 				;;
 			    "!"*)


More information about the Gcc-patches mailing list