\")\n \n monitor.line_number = 42\ndiff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py\nindex 82efff56eda756..f6f95580f1a177 100755\n--- a/Tools/clinic/clinic.py\n+++ b/Tools/clinic/clinic.py\n@@ -13,7 +13,6 @@\n import collections\n import contextlib\n import copy\n-import cpp\n import dataclasses as dc\n import enum\n import functools\n@@ -53,6 +52,7 @@\n \n # Local imports.\n import libclinic\n+import libclinic.cpp\n from libclinic import ClinicError\n \n \n@@ -648,7 +648,7 @@ class CLanguage(Language):\n \n def __init__(self, filename: str) -> None:\n super().__init__(filename)\n- self.cpp = cpp.Monitor(filename)\n+ self.cpp = libclinic.cpp.Monitor(filename)\n \n def parse_line(self, line: str) -> None:\n self.cpp.writeline(line)\ndiff --git a/Tools/clinic/cpp.py b/Tools/clinic/libclinic/cpp.py\nsimilarity index 99%\nrename from Tools/clinic/cpp.py\nrename to Tools/clinic/libclinic/cpp.py\nindex 659099056cd46c..e115d65a88e1b6 100644\n--- a/Tools/clinic/cpp.py\n+++ b/Tools/clinic/libclinic/cpp.py\n@@ -3,7 +3,10 @@\n import sys\n from typing import NoReturn\n \n-from libclinic.errors import ParseError\n+from .errors import ParseError\n+\n+\n+__all__ = [\"Monitor\"]\n \n \n TokenAndCondition = tuple[str, str]\n", "files": ["Lib/test/test_clinic.py", "Tools/clinic/clinic.py", "Tools/clinic/libclinic/cpp.py"]}, "36a2463e7c01151b05fff9a1f1c6fb08d764c82e": {"diff": "diff --git a/lib/time/update.bash b/lib/time/update.bash\nindex 605afa76d3bcf..e72850079f4a9 100755\n--- a/lib/time/update.bash\n+++ b/lib/time/update.bash\n@@ -24,8 +24,8 @@\n # in the CL match the update.bash in the CL.\n \n # Versions to use.\n-CODE=2023c\n-DATA=2023c\n+CODE=2023d\n+DATA=2023d\n \n set -e\n \ndiff --git a/lib/time/zoneinfo.zip b/lib/time/zoneinfo.zip\nindex 417ee2b194a75..7cf689f83078a 100644\nBinary files a/lib/time/zoneinfo.zip and b/lib/time/zoneinfo.zip differ\n", "files": ["lib/time/update.bash", "lib/time/zoneinfo.zip"]}, "f6509cf5cdbb5787061b784973782933c47f1782": {"diff": "diff --git a/src/cmd/compile/internal/ssa/sccp.go b/src/cmd/compile/internal/ssa/sccp.go\nindex 86c6117d872b5..77a6f509618af 100644\n--- a/src/cmd/compile/internal/ssa/sccp.go\n+++ b/src/cmd/compile/internal/ssa/sccp.go\n@@ -535,6 +535,13 @@ func rewireSuccessor(block *Block, constVal *Value) bool {\n \tcase BlockJumpTable:\n \t\t// Remove everything but the known taken branch.\n \t\tidx := int(constVal.AuxInt)\n+\t\tif idx < 0 || idx >= len(block.Succs) {\n+\t\t\t// This can only happen in unreachable code,\n+\t\t\t// as an invariant of jump tables is that their\n+\t\t\t// input index is in range.\n+\t\t\t// See issue 64826.\n+\t\t\treturn false\n+\t\t}\n \t\tblock.swapSuccessorsByIdx(0, idx)\n \t\tfor len(block.Succs) > 1 {\n \t\t\tblock.removeEdge(1)\ndiff --git a/test/fixedbugs/issue64826.go b/test/fixedbugs/issue64826.go\nnew file mode 100644\nindex 0000000000000..864c474a644e8\n--- /dev/null\n+++ b/test/fixedbugs/issue64826.go\n@@ -0,0 +1,38 @@\n+// build\n+\n+// Copyright 2023 The Go Authors. All rights reserved.\n+// Use of this source code is governed by a BSD-style\n+// license that can be found in the LICENSE file.\n+\n+package main\n+\n+func main() {\n+\tf(g(false))\n+}\n+func g(b bool) string {\n+\tif b {\n+\t\treturn \"z\"\n+\t}\n+\treturn \"q\"\n+}\n+func f(x string) int {\n+\tswitch len(x) {\n+\tcase 4:\n+\t\treturn 4\n+\tcase 5:\n+\t\treturn 5\n+\tcase 6:\n+\t\treturn 6\n+\tcase 7:\n+\t\treturn 7\n+\tcase 8:\n+\t\treturn 8\n+\tcase 9:\n+\t\treturn 9\n+\tcase 10:\n+\t\treturn 10\n+\tcase 11:\n+\t\treturn 11\n+\t}\n+\treturn 0\n+}\n", "files": ["src/cmd/compile/internal/ssa/sccp.go", "test/fixedbugs/issue64826.go"]}, "9dd1cde9ac0f1e935ed44d33f6b4668be538c1ed": {"diff": "diff --git a/doc/go1.22.html b/doc/go1.22.html\nindex 437e86e6b6da4..3bc0c092ed29c 100644\n--- a/doc/go1.22.html\n+++ b/doc/go1.22.html\n@@ -94,7 +94,9 @@ Go command
\n \n \n \n- \n+ go
mod
init
no longer attempts to import\n+ module requirements from configuration files for other vendoring tools\n+ (such as Gopkg.lock
).\n
\n \n \ndiff --git a/src/cmd/go/alldocs.go b/src/cmd/go/alldocs.go\nindex a40d0556ff142..e61e865c84a8f 100644\n--- a/src/cmd/go/alldocs.go\n+++ b/src/cmd/go/alldocs.go\n@@ -1324,9 +1324,6 @@\n // using import comments in .go files, vendoring tool configuration files (like\n // Gopkg.lock), and the current directory (if in GOPATH).\n //\n-// If a configuration file for a vendoring tool is present, init will attempt to\n-// import module requirements from it.\n-//\n // See https://golang.org/ref/mod#go-mod-init for more about 'go mod init'.\n //\n // # Add missing and remove unused modules\ndiff --git a/src/cmd/go/internal/modcmd/init.go b/src/cmd/go/internal/modcmd/init.go\nindex e4be73fab0bc9..facdaa9911c36 100644\n--- a/src/cmd/go/internal/modcmd/init.go\n+++ b/src/cmd/go/internal/modcmd/init.go\n@@ -25,9 +25,6 @@ module path argument is omitted, init will attempt to infer the module path\n using import comments in .go files, vendoring tool configuration files (like\n Gopkg.lock), and the current directory (if in GOPATH).\n \n-If a configuration file for a vendoring tool is present, init will attempt to\n-import module requirements from it.\n-\n See https://golang.org/ref/mod#go-mod-init for more about 'go mod init'.\n `,\n \tRun: runInit,\n"}, "52dbffeac86863e1e0c9455b5b216ec50c828946": {"diff": "diff --git a/src/cmd/go/internal/base/goflags.go b/src/cmd/go/internal/base/goflags.go\nindex 3d5a76d54b758..eced2c5d58226 100644\n--- a/src/cmd/go/internal/base/goflags.go\n+++ b/src/cmd/go/internal/base/goflags.go\n@@ -88,7 +88,7 @@ type boolFlag interface {\n }\n \n // SetFromGOFLAGS sets the flags in the given flag set using settings in $GOFLAGS.\n-func SetFromGOFLAGS(flags *flag.FlagSet, ignoreErrors bool) {\n+func SetFromGOFLAGS(flags *flag.FlagSet) {\n \tInitGOFLAGS()\n \n \t// This loop is similar to flag.Parse except that it ignores\n@@ -121,22 +121,22 @@ func SetFromGOFLAGS(flags *flag.FlagSet, ignoreErrors bool) {\n \n \t\tif fb, ok := f.Value.(boolFlag); ok && fb.IsBoolFlag() {\n \t\t\tif hasValue {\n-\t\t\t\tif err := flags.Set(f.Name, value); err != nil && !ignoreErrors {\n+\t\t\t\tif err := flags.Set(f.Name, value); err != nil {\n \t\t\t\t\tfmt.Fprintf(flags.Output(), \"go: invalid boolean value %q for flag %s (from %s): %v\\n\", value, name, where, err)\n \t\t\t\t\tflags.Usage()\n \t\t\t\t}\n \t\t\t} else {\n-\t\t\t\tif err := flags.Set(f.Name, \"true\"); err != nil && !ignoreErrors {\n+\t\t\t\tif err := flags.Set(f.Name, \"true\"); err != nil {\n \t\t\t\t\tfmt.Fprintf(flags.Output(), \"go: invalid boolean flag %s (from %s): %v\\n\", name, where, err)\n \t\t\t\t\tflags.Usage()\n \t\t\t\t}\n \t\t\t}\n \t\t} else {\n-\t\t\tif !hasValue && !ignoreErrors {\n+\t\t\tif !hasValue {\n \t\t\t\tfmt.Fprintf(flags.Output(), \"go: flag needs an argument: %s (from %s)\\n\", name, where)\n \t\t\t\tflags.Usage()\n \t\t\t}\n-\t\t\tif err := flags.Set(f.Name, value); err != nil && !ignoreErrors {\n+\t\t\tif err := flags.Set(f.Name, value); err != nil {\n \t\t\t\tfmt.Fprintf(flags.Output(), \"go: invalid value %q for flag %s (from %s): %v\\n\", value, name, where, err)\n \t\t\t\tflags.Usage()\n \t\t\t}\ndiff --git a/src/cmd/go/internal/modfetch/fetch.go b/src/cmd/go/internal/modfetch/fetch.go\nindex b3c77dfbc2178..eeab6da62a2da 100644\n--- a/src/cmd/go/internal/modfetch/fetch.go\n+++ b/src/cmd/go/internal/modfetch/fetch.go\n@@ -525,7 +525,7 @@ func readGoSum(dst map[module.Version][]string, file string, data []byte) {\n \t\t\t\t// ignore malformed line so that go mod tidy can fix go.sum\n \t\t\t\tcontinue\n \t\t\t} else {\n-\t\t\t\tbase.Fatalf(\"go: malformed go.sum:\\n%s:%d: wrong number of fields %v\\n\", file, lineno, len(f))\n+\t\t\t\tbase.Fatalf(\"malformed go.sum:\\n%s:%d: wrong number of fields %v\\n\", file, lineno, len(f))\n \t\t\t}\n \t\t}\n \t\tif f[2] == emptyGoModHash {\n@@ -574,32 +574,32 @@ func checkMod(ctx context.Context, mod module.Version) {\n \t// Do the file I/O before acquiring the go.sum lock.\n \tziphash, err := CachePath(ctx, mod, \"ziphash\")\n \tif err != nil {\n-\t\tbase.Fatalf(\"go: verifying %v\", module.VersionError(mod, err))\n+\t\tbase.Fatalf(\"verifying %v\", module.VersionError(mod, err))\n \t}\n \tdata, err := lockedfile.Read(ziphash)\n \tif err != nil {\n-\t\tbase.Fatalf(\"go: verifying %v\", module.VersionError(mod, err))\n+\t\tbase.Fatalf(\"verifying %v\", module.VersionError(mod, err))\n \t}\n \tdata = bytes.TrimSpace(data)\n \tif !isValidSum(data) {\n \t\t// Recreate ziphash file from zip file and use that to check the mod sum.\n \t\tzip, err := CachePath(ctx, mod, \"zip\")\n \t\tif err != nil {\n-\t\t\tbase.Fatalf(\"go: verifying %v\", module.VersionError(mod, err))\n+\t\t\tbase.Fatalf(\"verifying %v\", module.VersionError(mod, err))\n \t\t}\n \t\terr = hashZip(mod, zip, ziphash)\n \t\tif err != nil {\n-\t\t\tbase.Fatalf(\"go: verifying %v\", module.VersionError(mod, err))\n+\t\t\tbase.Fatalf(\"verifying %v\", module.VersionError(mod, err))\n \t\t}\n \t\treturn\n \t}\n \th := string(data)\n \tif !strings.HasPrefix(h, \"h1:\") {\n-\t\tbase.Fatalf(\"go: verifying %v\", module.VersionError(mod, fmt.Errorf(\"unexpected ziphash: %q\", h)))\n+\t\tbase.Fatalf(\"verifying %v\", module.VersionError(mod, fmt.Errorf(\"unexpected ziphash: %q\", h)))\n \t}\n \n \tif err := checkModSum(mod, h); err != nil {\n-\t\tbase.Fatal(err)\n+\t\tbase.Fatalf(\"%s\", err)\n \t}\n }\n \n@@ -684,7 +684,7 @@ func haveModSumLocked(mod module.Version, h string) bool {\n \t\t\treturn true\n \t\t}\n \t\tif strings.HasPrefix(vh, \"h1:\") {\n-\t\t\tbase.Fatalf(\"go: verifying %s@%s: checksum mismatch\\n\\tdownloaded: %v\\n\\t%s: %v\"+goSumMismatch, mod.Path, mod.Version, h, sumFileName, vh)\n+\t\t\tbase.Fatalf(\"verifying %s@%s: checksum mismatch\\n\\tdownloaded: %v\\n\\t%s: %v\"+goSumMismatch, mod.Path, mod.Version, h, sumFileName, vh)\n \t\t}\n \t}\n \t// Also check workspace sums.\n@@ -696,7 +696,7 @@ func haveModSumLocked(mod module.Version, h string) bool {\n \t\t\tif h == vh {\n \t\t\t\tfoundMatch = true\n \t\t\t} else if strings.HasPrefix(vh, \"h1:\") {\n-\t\t\t\tbase.Fatalf(\"go: verifying %s@%s: checksum mismatch\\n\\tdownloaded: %v\\n\\t%s: %v\"+goSumMismatch, mod.Path, mod.Version, h, goSumFile, vh)\n+\t\t\t\tbase.Fatalf(\"verifying %s@%s: checksum mismatch\\n\\tdownloaded: %v\\n\\t%s: %v\"+goSumMismatch, mod.Path, mod.Version, h, goSumFile, vh)\n \t\t\t}\n \t\t}\n \t}\n@@ -895,7 +895,7 @@ func TrimGoSum(keep map[module.Version]bool) {\n \tdefer goSum.mu.Unlock()\n \tinited, err := initGoSum()\n \tif err != nil {\n-\t\tbase.Fatal(err)\n+\t\tbase.Fatalf(\"%s\", err)\n \t}\n \tif !inited {\n \t\treturn\ndiff --git a/src/cmd/go/internal/test/testflag.go b/src/cmd/go/internal/test/testflag.go\nindex 22c3ab1302162..425378889d9af 100644\n--- a/src/cmd/go/internal/test/testflag.go\n+++ b/src/cmd/go/internal/test/testflag.go\n@@ -222,7 +222,7 @@ func (f *shuffleFlag) Set(value string) error {\n //\tgo test fmt -custom-flag-for-fmt-test\n //\tgo test -x math\n func testFlags(args []string) (packageNames, passToTest []string) {\n-\tbase.SetFromGOFLAGS(&CmdTest.Flag, false)\n+\tbase.SetFromGOFLAGS(&CmdTest.Flag)\n \taddFromGOFLAGS := map[string]bool{}\n \tCmdTest.Flag.Visit(func(f *flag.Flag) {\n \t\tif short := strings.TrimPrefix(f.Name, \"test.\"); passFlagToTest[short] {\ndiff --git a/src/cmd/go/internal/toolchain/exec.go b/src/cmd/go/internal/toolchain/exec.go\nindex acfb9e943ca77..820fe93e87c37 100644\n--- a/src/cmd/go/internal/toolchain/exec.go\n+++ b/src/cmd/go/internal/toolchain/exec.go\n@@ -44,12 +44,12 @@ func execGoToolchain(gotoolchain, dir, exe string) {\n \t\t\t\tif e.ProcessState.Exited() {\n \t\t\t\t\tos.Exit(e.ProcessState.ExitCode())\n \t\t\t\t}\n-\t\t\t\tbase.Fatalf(\"go: exec %s: %s\", gotoolchain, e.ProcessState)\n+\t\t\t\tbase.Fatalf(\"exec %s: %s\", gotoolchain, e.ProcessState)\n \t\t\t}\n-\t\t\tbase.Fatalf(\"go: exec %s: %s\", exe, err)\n+\t\t\tbase.Fatalf(\"exec %s: %s\", exe, err)\n \t\t}\n \t\tos.Exit(0)\n \t}\n \terr := syscall.Exec(exe, os.Args, os.Environ())\n-\tbase.Fatalf(\"go: exec %s: %v\", gotoolchain, err)\n+\tbase.Fatalf(\"exec %s: %v\", gotoolchain, err)\n }\ndiff --git a/src/cmd/go/internal/toolchain/select.go b/src/cmd/go/internal/toolchain/select.go\nindex 84fa7f685c97b..9fd1549a61bbc 100644\n--- a/src/cmd/go/internal/toolchain/select.go\n+++ b/src/cmd/go/internal/toolchain/select.go\n@@ -8,10 +8,10 @@ package toolchain\n import (\n \t\"context\"\n \t\"errors\"\n-\t\"flag\"\n \t\"fmt\"\n \t\"go/build\"\n \t\"io/fs\"\n+\t\"log\"\n \t\"os\"\n \t\"path/filepath\"\n \t\"runtime\"\n@@ -20,12 +20,10 @@ import (\n \n \t\"cmd/go/internal/base\"\n \t\"cmd/go/internal/cfg\"\n-\t\"cmd/go/internal/cmdflag\"\n \t\"cmd/go/internal/gover\"\n \t\"cmd/go/internal/modfetch\"\n \t\"cmd/go/internal/modload\"\n \t\"cmd/go/internal/run\"\n-\t\"cmd/go/internal/work\"\n \n \t\"golang.org/x/mod/module\"\n )\n@@ -87,6 +85,9 @@ func FilterEnv(env []string) []string {\n // It must be called early in startup.\n // See https://go.dev/doc/toolchain#select.\n func Select() {\n+\tlog.SetPrefix(\"go: \")\n+\tdefer log.SetPrefix(\"\")\n+\n \tif !modload.WillBeEnabled() {\n \t\treturn\n \t}\n@@ -132,15 +133,15 @@ func Select() {\n \t\t\tv := gover.FromToolchain(min)\n \t\t\tif v == \"\" {\n \t\t\t\tif plus {\n-\t\t\t\t\tbase.Fatalf(\"go: invalid GOTOOLCHAIN %q: invalid minimum toolchain %q\", gotoolchain, min)\n+\t\t\t\t\tbase.Fatalf(\"invalid GOTOOLCHAIN %q: invalid minimum toolchain %q\", gotoolchain, min)\n \t\t\t\t}\n-\t\t\t\tbase.Fatalf(\"go: invalid GOTOOLCHAIN %q\", gotoolchain)\n+\t\t\t\tbase.Fatalf(\"invalid GOTOOLCHAIN %q\", gotoolchain)\n \t\t\t}\n \t\t\tminToolchain = min\n \t\t\tminVers = v\n \t\t}\n \t\tif plus && suffix != \"auto\" && suffix != \"path\" {\n-\t\t\tbase.Fatalf(\"go: invalid GOTOOLCHAIN %q: only version suffixes are +auto and +path\", gotoolchain)\n+\t\t\tbase.Fatalf(\"invalid GOTOOLCHAIN %q: only version suffixes are +auto and +path\", gotoolchain)\n \t\t}\n \t\tmode = suffix\n \t}\n@@ -171,7 +172,7 @@ func Select() {\n \t\t\t\t// has a suffix like \"go1.21.1-foo\" and toolchain is \"go1.21.1\".)\n \t\t\t\ttoolVers := gover.FromToolchain(toolchain)\n \t\t\t\tif toolVers == \"\" || (!strings.HasPrefix(toolchain, \"go\") && !strings.Contains(toolchain, \"-go\")) {\n-\t\t\t\t\tbase.Fatalf(\"go: invalid toolchain %q in %s\", toolchain, base.ShortPath(file))\n+\t\t\t\t\tbase.Fatalf(\"invalid toolchain %q in %s\", toolchain, base.ShortPath(file))\n \t\t\t\t}\n \t\t\t\tif gover.Compare(toolVers, minVers) > 0 {\n \t\t\t\t\tgotoolchain = toolchain\n@@ -193,7 +194,7 @@ func Select() {\n \t// so that we have initialized gover.Startup for use in error messages.\n \tif target := os.Getenv(targetEnv); target != \"\" && TestVersionSwitch != \"loop\" {\n \t\tif gover.LocalToolchain() != target {\n-\t\t\tbase.Fatalf(\"go: toolchain %v invoked to provide %v\", gover.LocalToolchain(), target)\n+\t\t\tbase.Fatalf(\"toolchain %v invoked to provide %v\", gover.LocalToolchain(), target)\n \t\t}\n \t\tos.Unsetenv(targetEnv)\n \n@@ -224,7 +225,7 @@ func Select() {\n \t// We want to disallow mistakes / bad ideas like GOTOOLCHAIN=bash,\n \t// since we will find that in the path lookup.\n \tif !strings.HasPrefix(gotoolchain, \"go1\") && !strings.Contains(gotoolchain, \"-go1\") {\n-\t\tbase.Fatalf(\"go: invalid GOTOOLCHAIN %q\", gotoolchain)\n+\t\tbase.Fatalf(\"invalid GOTOOLCHAIN %q\", gotoolchain)\n \t}\n \n \tExec(gotoolchain)\n@@ -243,6 +244,8 @@ var TestVersionSwitch string\n // as a source of Go toolchains. Otherwise Exec tries the PATH but then downloads\n // a toolchain if necessary.\n func Exec(gotoolchain string) {\n+\tlog.SetPrefix(\"go: \")\n+\n \twriteBits = sysWriteBits()\n \n \tcount, _ := strconv.Atoi(os.Getenv(countEnv))\n@@ -250,7 +253,7 @@ func Exec(gotoolchain string) {\n \t\tfmt.Fprintf(os.Stderr, \"go: switching from go%v to %v [depth %d]\\n\", gover.Local(), gotoolchain, count)\n \t}\n \tif count >= maxSwitch {\n-\t\tbase.Fatalf(\"go: too many toolchain switches\")\n+\t\tbase.Fatalf(\"too many toolchain switches\")\n \t}\n \tos.Setenv(countEnv, fmt.Sprint(count+1))\n \n@@ -273,7 +276,7 @@ func Exec(gotoolchain string) {\n \tcase \"loop\", \"mismatch\":\n \t\texe, err := os.Executable()\n \t\tif err != nil {\n-\t\t\tbase.Fatal(err)\n+\t\t\tbase.Fatalf(\"%v\", err)\n \t\t}\n \t\texecGoToolchain(gotoolchain, os.Getenv(\"GOROOT\"), exe)\n \t}\n@@ -288,7 +291,7 @@ func Exec(gotoolchain string) {\n \t// GOTOOLCHAIN=auto looks in PATH and then falls back to download.\n \t// GOTOOLCHAIN=path only looks in PATH.\n \tif pathOnly {\n-\t\tbase.Fatalf(\"go: cannot find %q in PATH\", gotoolchain)\n+\t\tbase.Fatalf(\"cannot find %q in PATH\", gotoolchain)\n \t}\n \n \t// Set up modules without an explicit go.mod, to download distribution.\n@@ -307,9 +310,9 @@ func Exec(gotoolchain string) {\n \tdir, err := modfetch.Download(context.Background(), m)\n \tif err != nil {\n \t\tif errors.Is(err, fs.ErrNotExist) {\n-\t\t\tbase.Fatalf(\"go: download %s for %s/%s: toolchain not available\", gotoolchain, runtime.GOOS, runtime.GOARCH)\n+\t\t\tbase.Fatalf(\"download %s for %s/%s: toolchain not available\", gotoolchain, runtime.GOOS, runtime.GOARCH)\n \t\t}\n-\t\tbase.Fatalf(\"go: download %s: %v\", gotoolchain, err)\n+\t\tbase.Fatalf(\"download %s: %v\", gotoolchain, err)\n \t}\n \n \t// On first use after download, set the execute bits on the commands\n@@ -318,7 +321,7 @@ func Exec(gotoolchain string) {\n \tif runtime.GOOS != \"windows\" {\n \t\tinfo, err := os.Stat(filepath.Join(dir, \"bin/go\"))\n \t\tif err != nil {\n-\t\t\tbase.Fatalf(\"go: download %s: %v\", gotoolchain, err)\n+\t\t\tbase.Fatalf(\"download %s: %v\", gotoolchain, err)\n \t\t}\n \t\tif info.Mode()&0111 == 0 {\n \t\t\t// allowExec sets the exec permission bits on all files found in dir.\n@@ -339,7 +342,7 @@ func Exec(gotoolchain string) {\n \t\t\t\t\treturn nil\n \t\t\t\t})\n \t\t\t\tif err != nil {\n-\t\t\t\t\tbase.Fatalf(\"go: download %s: %v\", gotoolchain, err)\n+\t\t\t\t\tbase.Fatalf(\"download %s: %v\", gotoolchain, err)\n \t\t\t\t}\n \t\t\t}\n \n@@ -381,7 +384,7 @@ func Exec(gotoolchain string) {\n \t\t\terr = raceSafeCopy(srcUGoMod, srcGoMod)\n \t\t}\n \t\tif err != nil {\n-\t\t\tbase.Fatalf(\"go: download %s: %v\", gotoolchain, err)\n+\t\t\tbase.Fatalf(\"download %s: %v\", gotoolchain, err)\n \t\t}\n \t}\n \n@@ -472,7 +475,7 @@ func modGoToolchain() (file, goVers, toolchain string) {\n \n \tdata, err := os.ReadFile(file)\n \tif err != nil {\n-\t\tbase.Fatal(err)\n+\t\tbase.Fatalf(\"%v\", err)\n \t}\n \treturn file, gover.GoModLookup(data, \"go\"), gover.GoModLookup(data, \"toolchain\")\n }\n@@ -489,7 +492,6 @@ func goInstallVersion() bool {\n \n \t// Check for pkg@version.\n \tvar arg string\n-\tvar cmdFlags *flag.FlagSet\n \tswitch os.Args[1] {\n \tdefault:\n \t\treturn false\n@@ -498,7 +500,6 @@ func goInstallVersion() bool {\n \t\t// across a toolchain switch. To make that work, assume the pkg@version\n \t\t// is the last argument and skip the flag parsing.\n \t\targ = os.Args[len(os.Args)-1]\n-\t\tcmdFlags = &work.CmdInstall.Flag\n \tcase \"run\":\n \t\t// For run, the pkg@version can be anywhere on the command line,\n \t\t// because it is preceded by run flags and followed by arguments to the\n@@ -506,7 +507,6 @@ func goInstallVersion() bool {\n \t\t// flags a little bit, to know whether each flag takes an optional argument.\n \t\t// We can still allow unknown flags as long as they have an explicit =value.\n \t\targs := os.Args[2:]\n-\t\tcmdFlags = &run.CmdRun.Flag\n \t\tfor i := 0; i < len(args); i++ {\n \t\t\ta := args[i]\n \t\t\tif !strings.HasPrefix(a, \"-\") {\n@@ -554,20 +554,6 @@ func goInstallVersion() bool {\n \t\treturn false\n \t}\n \n-\t// Make a best effort to parse flags so that module flags like -modcacherw\n-\t// will take effect (see https://go.dev/issue/64282).\n-\targs := os.Args[2:]\n-\tfor len(args) > 0 {\n-\t\tvar err error\n-\t\t_, args, err = cmdflag.ParseOne(cmdFlags, args)\n-\t\tif errors.Is(err, cmdflag.ErrFlagTerminator) {\n-\t\t\tbreak\n-\t\t}\n-\t\t// Ignore all other errors: they may be new flags \u2014 or updated syntax for\n-\t\t// existing flags \u2014 intended for a newer Go toolchain.\n-\t}\n-\tbase.SetFromGOFLAGS(cmdFlags, true)\n-\n \t// It would be correct to simply return true here, bypassing use\n \t// of the current go.mod or go.work, and let \"go run\" or \"go install\"\n \t// do the rest, including a toolchain switch.\ndiff --git a/src/cmd/go/internal/vet/vetflag.go b/src/cmd/go/internal/vet/vetflag.go\nindex 601ae9aa64ba1..eb7af6508d00b 100644\n--- a/src/cmd/go/internal/vet/vetflag.go\n+++ b/src/cmd/go/internal/vet/vetflag.go\n@@ -116,7 +116,7 @@ func vetFlags(args []string) (passToVet, packageNames []string) {\n \n \t// Record the set of vet tool flags set by GOFLAGS. We want to pass them to\n \t// the vet tool, but only if they aren't overridden by an explicit argument.\n-\tbase.SetFromGOFLAGS(&CmdVet.Flag, false)\n+\tbase.SetFromGOFLAGS(&CmdVet.Flag)\n \taddFromGOFLAGS := map[string]bool{}\n \tCmdVet.Flag.Visit(func(f *flag.Flag) {\n \t\tif isVetFlag[f.Name] {\ndiff --git a/src/cmd/go/main.go b/src/cmd/go/main.go\nindex b309cb867ab26..d380aae489436 100644\n--- a/src/cmd/go/main.go\n+++ b/src/cmd/go/main.go\n@@ -234,7 +234,7 @@ func invoke(cmd *base.Command, args []string) {\n \tif cmd.CustomFlags {\n \t\targs = args[1:]\n \t} else {\n-\t\tbase.SetFromGOFLAGS(&cmd.Flag, false)\n+\t\tbase.SetFromGOFLAGS(&cmd.Flag)\n \t\tcmd.Flag.Parse(args[1:])\n \t\targs = cmd.Flag.Args()\n \t}\ndiff --git a/src/cmd/go/testdata/script/install_modcacherw_issue64282.txt b/src/cmd/go/testdata/script/install_modcacherw_issue64282.txt\ndeleted file mode 100644\nindex ea644f789ea2f..0000000000000\n--- a/src/cmd/go/testdata/script/install_modcacherw_issue64282.txt\n+++ /dev/null\n@@ -1,32 +0,0 @@\n-# Regression test for https://go.dev/issue/64282:\n-# 'go install' and 'go run' with pkg@version arguments should make\n-# a best effort to parse flags before they download modules to\n-# identify which toolchain version to use, because those flags\n-# may affect the downloaded contents.\n-\n-# However, the best-effort flag parsing should not interfere with\n-# actual flag parsing if we don't switch toolchains. In particular,\n-# unrecognized flags should still be diagnosed after the module for\n-# the requested package has been downloaded and checked for toolchain\n-# upgrades.\n-\n-! go install -cake=delicious -modcacherw example.com/printversion@v0.1.0\n-stderr '^flag provided but not defined: -cake$'\n-\n-[!short] go install -modcacherw example.com/printversion@v0.1.0\n-\t# Because the -modcacherw flag was set, we should be able to modify the contents\n-\t# of a directory within the module cache.\n-cp $WORK/extraneous.txt $GOPATH/pkg/mod/example.com/printversion@v0.1.0/extraneous_file.go\n-\n-\n-# We should also apply flags from GOFLAGS at this step.\n-\n-go clean -modcache\n-env GOFLAGS=-modcacherw\n-! go install -cake=delicious example.com/printversion@v0.1.0\n-stderr '^flag provided but not defined: -cake$'\n-cp $WORK/extraneous.txt $GOPATH/pkg/mod/example.com/printversion@v0.1.0/extraneous_file.go\n-\n-\n--- $WORK/extraneous.txt --\n-This is not a Go source file.\ndiff --git a/src/cmd/go/testdata/script/malformed_gosum_issue62345.txt b/src/cmd/go/testdata/script/malformed_gosum_issue62345.txt\nindex 35fad2919326f..23c41beae90ae 100644\n--- a/src/cmd/go/testdata/script/malformed_gosum_issue62345.txt\n+++ b/src/cmd/go/testdata/script/malformed_gosum_issue62345.txt\n@@ -1,5 +1,5 @@\n ! go mod download\n-stderr '^go: malformed go.sum:\\n.*go.sum:3: wrong number of fields 5\\n$'\n+stderr '^malformed go.sum:\\n.*go.sum:3: wrong number of fields 5\\n$'\n \n go mod tidy\n cmp go.sum go.sum.after-tidy\ndiff --git a/src/cmd/go/testdata/script/work_sum_mismatch.txt b/src/cmd/go/testdata/script/work_sum_mismatch.txt\nindex d4997aa37246e..ca5d71dc5e73c 100644\n--- a/src/cmd/go/testdata/script/work_sum_mismatch.txt\n+++ b/src/cmd/go/testdata/script/work_sum_mismatch.txt\n@@ -4,7 +4,7 @@\n cmpenv stderr want-error\n \n -- want-error --\n-go: verifying rsc.io/sampler@v1.3.0/go.mod: checksum mismatch\n+verifying rsc.io/sampler@v1.3.0/go.mod: checksum mismatch\n \tdownloaded: h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=\n \t$WORK${/}gopath${/}src${/}a${/}go.sum: h1:U1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=\n \n@@ -58,4 +58,4 @@ import (\n \n func main() {\n \tfmt.Println(quote.Hello())\n-}\n+}\n\\ No newline at end of file\n", "files": ["src/cmd/go/internal/base/goflags.go", "src/cmd/go/internal/modfetch/fetch.go", "src/cmd/go/internal/test/testflag.go", "src/cmd/go/internal/toolchain/exec.go", "src/cmd/go/internal/toolchain/select.go", "src/cmd/go/internal/vet/vetflag.go", "src/cmd/go/main.go", "src/cmd/go/testdata/script/install_modcacherw_issue64282.txt", "src/cmd/go/testdata/script/malformed_gosum_issue62345.txt", "src/cmd/go/testdata/script/work_sum_mismatch.txt"]}, "af73483f4e8b6f5c68c9aa63257bdd929a9c194a": {"diff": "diff --git a/lib/idr.c b/lib/idr.c\nindex 13f2758c237735..da36054c3ca020 100644\n--- a/lib/idr.c\n+++ b/lib/idr.c\n@@ -508,7 +508,7 @@ void ida_free(struct ida *ida, unsigned int id)\n \t\t\tgoto delete;\n \t\txas_store(&xas, xa_mk_value(v));\n \t} else {\n-\t\tif (!test_bit(bit, bitmap->bitmap))\n+\t\tif (!bitmap || !test_bit(bit, bitmap->bitmap))\n \t\t\tgoto err;\n \t\t__clear_bit(bit, bitmap->bitmap);\n \t\txas_set_mark(&xas, XA_FREE_MARK);\ndiff --git a/lib/test_ida.c b/lib/test_ida.c\nindex b0688062596150..55105baa19da9a 100644\n--- a/lib/test_ida.c\n+++ b/lib/test_ida.c\n@@ -150,6 +150,45 @@ static void ida_check_conv(struct ida *ida)\n \tIDA_BUG_ON(ida, !ida_is_empty(ida));\n }\n \n+/*\n+ * Check various situations where we attempt to free an ID we don't own.\n+ */\n+static void ida_check_bad_free(struct ida *ida)\n+{\n+\tunsigned long i;\n+\n+\tprintk(\"vvv Ignore \\\"not allocated\\\" warnings\\n\");\n+\t/* IDA is empty; all of these will fail */\n+\tida_free(ida, 0);\n+\tfor (i = 0; i < 31; i++)\n+\t\tida_free(ida, 1 << i);\n+\n+\t/* IDA contains a single value entry */\n+\tIDA_BUG_ON(ida, ida_alloc_min(ida, 3, GFP_KERNEL) != 3);\n+\tida_free(ida, 0);\n+\tfor (i = 0; i < 31; i++)\n+\t\tida_free(ida, 1 << i);\n+\n+\t/* IDA contains a single bitmap */\n+\tIDA_BUG_ON(ida, ida_alloc_min(ida, 1023, GFP_KERNEL) != 1023);\n+\tida_free(ida, 0);\n+\tfor (i = 0; i < 31; i++)\n+\t\tida_free(ida, 1 << i);\n+\n+\t/* IDA contains a tree */\n+\tIDA_BUG_ON(ida, ida_alloc_min(ida, (1 << 20) - 1, GFP_KERNEL) != (1 << 20) - 1);\n+\tida_free(ida, 0);\n+\tfor (i = 0; i < 31; i++)\n+\t\tida_free(ida, 1 << i);\n+\tprintk(\"^^^ \\\"not allocated\\\" warnings over\\n\");\n+\n+\tida_free(ida, 3);\n+\tida_free(ida, 1023);\n+\tida_free(ida, (1 << 20) - 1);\n+\n+\tIDA_BUG_ON(ida, !ida_is_empty(ida));\n+}\n+\n static DEFINE_IDA(ida);\n \n static int ida_checks(void)\n@@ -162,6 +201,7 @@ static int ida_checks(void)\n \tida_check_leaf(&ida, 1024 * 64);\n \tida_check_max(&ida);\n \tida_check_conv(&ida);\n+\tida_check_bad_free(&ida);\n \n \tprintk(\"IDA: %u of %u tests passed\\n\", tests_passed, tests_run);\n \treturn (tests_run != tests_passed) ? 0 : -EINVAL;\n"}, "87295b4068762f9cbdfcae5fed5ff54aadd3cb62": {"diff": "diff --git a/Lib/test/test_clinic.py b/Lib/test/test_clinic.py\nindex 21f56fe0195e69..3d6816d73d45bc 100644\n--- a/Lib/test/test_clinic.py\n+++ b/Lib/test/test_clinic.py\n@@ -22,7 +22,7 @@\n \n \n def _make_clinic(*, filename='clinic_tests'):\n- clang = clinic.CLanguage(None)\n+ clang = clinic.CLanguage(filename)\n c = clinic.Clinic(clang, filename=filename, limited_capi=False)\n c.block_parser = clinic.BlockParser('', clang)\n return c\n@@ -3920,7 +3920,7 @@ def test_Function_and_Parameter_reprs(self):\n self.assertEqual(repr(parameter), \"\")\n \n def test_Monitor_repr(self):\n- monitor = clinic.cpp.Monitor()\n+ monitor = clinic.cpp.Monitor(\"test.c\")\n self.assertRegex(repr(monitor), r\"\")\n \n monitor.line_number = 42\ndiff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py\nindex f004bec3cce8f6..82efff56eda756 100755\n--- a/Tools/clinic/clinic.py\n+++ b/Tools/clinic/clinic.py\n@@ -53,6 +53,7 @@\n \n # Local imports.\n import libclinic\n+from libclinic import ClinicError\n \n \n # TODO:\n@@ -94,27 +95,6 @@ def __repr__(self) -> str:\n TemplateDict = dict[str, str]\n \n \n-@dc.dataclass\n-class ClinicError(Exception):\n- message: str\n- _: dc.KW_ONLY\n- lineno: int | None = None\n- filename: str | None = None\n-\n- def __post_init__(self) -> None:\n- super().__init__(self.message)\n-\n- def report(self, *, warn_only: bool = False) -> str:\n- msg = \"Warning\" if warn_only else \"Error\"\n- if self.filename is not None:\n- msg += f\" in file {self.filename!r}\"\n- if self.lineno is not None:\n- msg += f\" on line {self.lineno}\"\n- msg += \":\\n\"\n- msg += f\"{self.message}\\n\"\n- return msg\n-\n-\n @overload\n def warn_or_fail(\n *args: object,\n@@ -669,7 +649,6 @@ class CLanguage(Language):\n def __init__(self, filename: str) -> None:\n super().__init__(filename)\n self.cpp = cpp.Monitor(filename)\n- self.cpp.fail = fail # type: ignore[method-assign]\n \n def parse_line(self, line: str) -> None:\n self.cpp.writeline(line)\ndiff --git a/Tools/clinic/cpp.py b/Tools/clinic/cpp.py\nindex 16eee6fc399491..659099056cd46c 100644\n--- a/Tools/clinic/cpp.py\n+++ b/Tools/clinic/cpp.py\n@@ -3,6 +3,8 @@\n import sys\n from typing import NoReturn\n \n+from libclinic.errors import ParseError\n+\n \n TokenAndCondition = tuple[str, str]\n TokenStack = list[TokenAndCondition]\n@@ -32,7 +34,7 @@ class Monitor:\n \n Anyway this implementation seems to work well enough for the CPython sources.\n \"\"\"\n- filename: str | None = None\n+ filename: str\n _: dc.KW_ONLY\n verbose: bool = False\n \n@@ -59,14 +61,8 @@ def condition(self) -> str:\n \"\"\"\n return \" && \".join(condition for token, condition in self.stack)\n \n- def fail(self, *a: object) -> NoReturn:\n- if self.filename:\n- filename = \" \" + self.filename\n- else:\n- filename = ''\n- print(\"Error at\" + filename, \"line\", self.line_number, \":\")\n- print(\" \", ' '.join(str(x) for x in a))\n- sys.exit(-1)\n+ def fail(self, msg: str) -> NoReturn:\n+ raise ParseError(msg, filename=self.filename, lineno=self.line_number)\n \n def writeline(self, line: str) -> None:\n self.line_number += 1\n@@ -74,7 +70,7 @@ def writeline(self, line: str) -> None:\n \n def pop_stack() -> TokenAndCondition:\n if not self.stack:\n- self.fail(\"#\" + token + \" without matching #if / #ifdef / #ifndef!\")\n+ self.fail(f\"#{token} without matching #if / #ifdef / #ifndef!\")\n return self.stack.pop()\n \n if self.continuation:\n@@ -145,7 +141,7 @@ def pop_stack() -> TokenAndCondition:\n \n if token in {'if', 'ifdef', 'ifndef', 'elif'}:\n if not condition:\n- self.fail(\"Invalid format for #\" + token + \" line: no argument!\")\n+ self.fail(f\"Invalid format for #{token} line: no argument!\")\n if token in {'if', 'elif'}:\n if not is_a_simple_defined(condition):\n condition = \"(\" + condition + \")\"\n@@ -155,7 +151,8 @@ def pop_stack() -> TokenAndCondition:\n else:\n fields = condition.split()\n if len(fields) != 1:\n- self.fail(\"Invalid format for #\" + token + \" line: should be exactly one argument!\")\n+ self.fail(f\"Invalid format for #{token} line: \"\n+ \"should be exactly one argument!\")\n symbol = fields[0]\n condition = 'defined(' + symbol + ')'\n if token == 'ifndef':\ndiff --git a/Tools/clinic/libclinic/__init__.py b/Tools/clinic/libclinic/__init__.py\nindex 0c3c6840901a42..d4e7a0c5cf7b76 100644\n--- a/Tools/clinic/libclinic/__init__.py\n+++ b/Tools/clinic/libclinic/__init__.py\n@@ -1,5 +1,8 @@\n from typing import Final\n \n+from .errors import (\n+ ClinicError,\n+)\n from .formatting import (\n SIG_END_MARKER,\n c_repr,\n@@ -15,6 +18,9 @@\n \n \n __all__ = [\n+ # Error handling\n+ \"ClinicError\",\n+\n # Formatting helpers\n \"SIG_END_MARKER\",\n \"c_repr\",\ndiff --git a/Tools/clinic/libclinic/errors.py b/Tools/clinic/libclinic/errors.py\nnew file mode 100644\nindex 00000000000000..afb21b02386fe7\n--- /dev/null\n+++ b/Tools/clinic/libclinic/errors.py\n@@ -0,0 +1,26 @@\n+import dataclasses as dc\n+\n+\n+@dc.dataclass\n+class ClinicError(Exception):\n+ message: str\n+ _: dc.KW_ONLY\n+ lineno: int | None = None\n+ filename: str | None = None\n+\n+ def __post_init__(self) -> None:\n+ super().__init__(self.message)\n+\n+ def report(self, *, warn_only: bool = False) -> str:\n+ msg = \"Warning\" if warn_only else \"Error\"\n+ if self.filename is not None:\n+ msg += f\" in file {self.filename!r}\"\n+ if self.lineno is not None:\n+ msg += f\" on line {self.lineno}\"\n+ msg += \":\\n\"\n+ msg += f\"{self.message}\\n\"\n+ return msg\n+\n+\n+class ParseError(ClinicError):\n+ pass\n"}, "6fe0d3758b35afcc342832e376d8d985a5a29070": {"diff": "diff --git a/src/cmd/compile/internal/base/debug.go b/src/cmd/compile/internal/base/debug.go\nindex a85f0139fc3b4..aadd950a0a0ad 100644\n--- a/src/cmd/compile/internal/base/debug.go\n+++ b/src/cmd/compile/internal/base/debug.go\n@@ -36,7 +36,6 @@ type DebugFlags struct {\n \tGossahash string `help:\"hash value for use in debugging the compiler\"`\n \tInlFuncsWithClosures int `help:\"allow functions with closures to be inlined\" concurrent:\"ok\"`\n \tInlStaticInit int `help:\"allow static initialization of inlined calls\" concurrent:\"ok\"`\n-\tInterfaceCycles int `help:\"allow anonymous interface cycles\"`\n \tLibfuzzer int `help:\"enable coverage instrumentation for libfuzzer\"`\n \tLoopVar int `help:\"shared (0, default), 1 (private loop variables), 2, private + log\"`\n \tLoopVarHash string `help:\"for debugging changes in loop behavior. Overrides experiment and loopvar flag.\"`\ndiff --git a/src/cmd/compile/internal/noder/irgen.go b/src/cmd/compile/internal/noder/irgen.go\nindex 46511d1f9736e..d909f3467bf08 100644\n--- a/src/cmd/compile/internal/noder/irgen.go\n+++ b/src/cmd/compile/internal/noder/irgen.go\n@@ -92,23 +92,22 @@ func checkFiles(m posMap, noders []*noder) (*types2.Package, *types2.Info) {\n \t}\n \n \t// Check for anonymous interface cycles (#56103).\n-\tif base.Debug.InterfaceCycles == 0 {\n-\t\tvar f cycleFinder\n-\t\tfor _, file := range files {\n-\t\t\tsyntax.Inspect(file, func(n syntax.Node) bool {\n-\t\t\t\tif n, ok := n.(*syntax.InterfaceType); ok {\n-\t\t\t\t\tif f.hasCycle(n.GetTypeInfo().Type.(*types2.Interface)) {\n-\t\t\t\t\t\tbase.ErrorfAt(m.makeXPos(n.Pos()), errors.InvalidTypeCycle, \"invalid recursive type: anonymous interface refers to itself (see https://go.dev/issue/56103)\")\n-\n-\t\t\t\t\t\tfor typ := range f.cyclic {\n-\t\t\t\t\t\t\tf.cyclic[typ] = false // suppress duplicate errors\n-\t\t\t\t\t\t}\n+\t// TODO(gri) move this code into the type checkers (types2 and go/types)\n+\tvar f cycleFinder\n+\tfor _, file := range files {\n+\t\tsyntax.Inspect(file, func(n syntax.Node) bool {\n+\t\t\tif n, ok := n.(*syntax.InterfaceType); ok {\n+\t\t\t\tif f.hasCycle(n.GetTypeInfo().Type.(*types2.Interface)) {\n+\t\t\t\t\tbase.ErrorfAt(m.makeXPos(n.Pos()), errors.InvalidTypeCycle, \"invalid recursive type: anonymous interface refers to itself (see https://go.dev/issue/56103)\")\n+\n+\t\t\t\t\tfor typ := range f.cyclic {\n+\t\t\t\t\t\tf.cyclic[typ] = false // suppress duplicate errors\n \t\t\t\t\t}\n-\t\t\t\t\treturn false\n \t\t\t\t}\n-\t\t\t\treturn true\n-\t\t\t})\n-\t\t}\n+\t\t\t\treturn false\n+\t\t\t}\n+\t\t\treturn true\n+\t\t})\n \t}\n \tbase.ExitIfErrors()\n \ndiff --git a/src/cmd/compile/internal/types2/stdlib_test.go b/src/cmd/compile/internal/types2/stdlib_test.go\nindex 7c14e3476e7ba..405af78572bba 100644\n--- a/src/cmd/compile/internal/types2/stdlib_test.go\n+++ b/src/cmd/compile/internal/types2/stdlib_test.go\n@@ -311,6 +311,7 @@ func TestStdFixed(t *testing.T) {\n \n \ttestTestDir(t, filepath.Join(testenv.GOROOT(t), \"test\", \"fixedbugs\"),\n \t\t\"bug248.go\", \"bug302.go\", \"bug369.go\", // complex test instructions - ignore\n+\t\t\"bug398.go\", // types2 doesn't check for anonymous interface cycles (go.dev/issue/56103)\n \t\t\"issue6889.go\", // gc-specific test\n \t\t\"issue11362.go\", // canonical import path check\n \t\t\"issue16369.go\", // types2 handles this correctly - not an issue\ndiff --git a/src/go/types/stdlib_test.go b/src/go/types/stdlib_test.go\nindex f90f9388c2809..a89cd858db5be 100644\n--- a/src/go/types/stdlib_test.go\n+++ b/src/go/types/stdlib_test.go\n@@ -312,6 +312,7 @@ func TestStdFixed(t *testing.T) {\n \n \ttestTestDir(t, filepath.Join(testenv.GOROOT(t), \"test\", \"fixedbugs\"),\n \t\t\"bug248.go\", \"bug302.go\", \"bug369.go\", // complex test instructions - ignore\n+\t\t\"bug398.go\", // go/types doesn't check for anonymous interface cycles (go.dev/issue/56103)\n \t\t\"issue6889.go\", // gc-specific test\n \t\t\"issue11362.go\", // canonical import path check\n \t\t\"issue16369.go\", // go/types handles this correctly - not an issue\ndiff --git a/test/fixedbugs/bug398.go b/test/fixedbugs/bug398.go\nindex db3e43c7f965e..2b00f6074d4c3 100644\n--- a/test/fixedbugs/bug398.go\n+++ b/test/fixedbugs/bug398.go\n@@ -1,4 +1,4 @@\n-// compile -d=interfacecycles\n+// errorcheck\n \n // Copyright 2012 The Go Authors. All rights reserved.\n // Use of this source code is governed by a BSD-style\n@@ -11,11 +11,11 @@ package p\n \n // exported interfaces\n \n-type I1 interface {\n+type I1 interface { // ERROR \"invalid recursive type: anonymous interface refers to itself\"\n F() interface{I1}\n }\n \n-type I2 interface {\n+type I2 interface { // ERROR \"invalid recursive type: anonymous interface refers to itself\"\n F() interface{I2}\n }\n \n@@ -28,11 +28,11 @@ func F() bool {\n \n // non-exported interfaces\n \n-type i1 interface {\n+type i1 interface { // ERROR \"invalid recursive type: anonymous interface refers to itself\"\n F() interface{i1}\n }\n \n-type i2 interface {\n+type i2 interface { // ERROR \"invalid recursive type: anonymous interface refers to itself\"\n F() interface{i2}\n }\n \ndiff --git a/test/fixedbugs/issue16369.go b/test/fixedbugs/issue16369.go\nindex 3a7bb7eaed6fb..86d0ce645d211 100644\n--- a/test/fixedbugs/issue16369.go\n+++ b/test/fixedbugs/issue16369.go\n@@ -1,4 +1,4 @@\n-// compile -d=interfacecycles\n+// errorcheck\n \n // Copyright 2016 The Go Authors. All rights reserved.\n // Use of this source code is governed by a BSD-style\n@@ -6,7 +6,7 @@\n \n package p\n \n-type T interface {\n+type T interface { // ERROR \"invalid recursive type: anonymous interface refers to itself\"\n \tM(interface {\n \t\tT\n \t})\n"}}