Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package govulncheck for openSUSE:Factory checked in at 2026-09-11 18:05:39 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/govulncheck (Old) and /work/SRC/openSUSE:Factory/.govulncheck.new.1265 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "govulncheck" Fri Sep 11 18:05:39 2026 rev:21 rq:1377407 version:1.8.0 Changes: -------- --- /work/SRC/openSUSE:Factory/govulncheck/govulncheck.changes 2026-08-30 19:08:03.895730340 +0200 +++ /work/SRC/openSUSE:Factory/.govulncheck.new.1265/govulncheck.changes 2026-09-11 18:08:39.762246440 +0200 @@ -1,0 +2,8 @@ +Tue Sep 8 20:52:42 UTC 2026 - Jeff Kowalczyk <[email protected]> + +- Update to version 1.8.0: + * go.mod: update golang.org/x dependencies + * cmd/govulncheck/integration: bump image version + * all: upgrade go directive to at least 1.26.0 [generated] + +------------------------------------------------------------------- Old: ---- govulncheck-1.7.0.tar.gz New: ---- govulncheck-1.8.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ govulncheck.spec ++++++ --- /var/tmp/diff_new_pack.RN4HK2/_old 2026-09-11 18:08:40.580280688 +0200 +++ /var/tmp/diff_new_pack.RN4HK2/_new 2026-09-11 18:08:40.586280939 +0200 @@ -17,7 +17,7 @@ Name: govulncheck -Version: 1.7.0 +Version: 1.8.0 Release: 0 Summary: CLI tool to report known CVE vulnerabilities in Go source code and binaries License: BSD-3-Clause ++++++ _service ++++++ --- /var/tmp/diff_new_pack.RN4HK2/_old 2026-09-11 18:08:40.643283325 +0200 +++ /var/tmp/diff_new_pack.RN4HK2/_new 2026-09-11 18:08:40.648283534 +0200 @@ -3,7 +3,7 @@ <param name="url">https://github.com/golang/vuln.git</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v1.7.0</param> + <param name="revision">v1.8.0</param> <param name="versionformat">@PARENT_TAG@+git@TAG_OFFSET@.%h</param> <param name="changesgenerate">enable</param> <param name="versionrewrite-pattern">v(.*?)(\+git0\.?.*?)?$</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.RN4HK2/_old 2026-09-11 18:08:40.681284916 +0200 +++ /var/tmp/diff_new_pack.RN4HK2/_new 2026-09-11 18:08:40.686285125 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/golang/vuln.git</param> - <param name="changesrevision">617f44b718537dccdea1915395650e0529e3b72e</param></service></servicedata> + <param name="changesrevision">709015412431dd2b5b28a53c06c70bc02d49074c</param></service></servicedata> (No newline at EOF) ++++++ govulncheck-1.7.0.tar.gz -> govulncheck-1.8.0.tar.gz ++++++ /work/SRC/openSUSE:Factory/govulncheck/govulncheck-1.7.0.tar.gz /work/SRC/openSUSE:Factory/.govulncheck.new.1265/govulncheck-1.8.0.tar.gz differ: char 12, line 1 ++++++ vendor.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/mod/modfile/rule.go new/vendor/golang.org/x/mod/modfile/rule.go --- old/vendor/golang.org/x/mod/modfile/rule.go 2026-08-13 20:01:04.000000000 +0200 +++ new/vendor/golang.org/x/mod/modfile/rule.go 2026-09-08 22:52:42.000000000 +0200 @@ -1678,7 +1678,7 @@ return nil } -// RemoveTool removes a tool directive with the given path. +// DropTool removes a tool directive with the given path. // It does nothing if no such tool directive exists. func (f *File) DropTool(path string) error { for _, t := range f.Tool { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/mod/modfile/work.go new/vendor/golang.org/x/mod/modfile/work.go --- old/vendor/golang.org/x/mod/modfile/work.go 2026-08-13 20:01:04.000000000 +0200 +++ new/vendor/golang.org/x/mod/modfile/work.go 2026-09-08 22:52:42.000000000 +0200 @@ -84,7 +84,7 @@ } // Cleanup cleans up the file f after any edit operations. -// To avoid quadratic behavior, modifications like [WorkFile.DropRequire] +// To avoid quadratic behavior, modifications like [WorkFile.DropUse] // clear the entry but do not remove it from the slice. // Cleanup cleans out all the cleared entries. func (f *WorkFile) Cleanup() { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/windows/types_windows.go new/vendor/golang.org/x/sys/windows/types_windows.go --- old/vendor/golang.org/x/sys/windows/types_windows.go 2026-08-13 20:01:04.000000000 +0200 +++ new/vendor/golang.org/x/sys/windows/types_windows.go 2026-09-08 22:52:42.000000000 +0200 @@ -1065,6 +1065,7 @@ SO_BROADCAST = 32 SO_LINGER = 128 SO_RCVBUF = 0x1002 + SO_SNDTIMEO = 0x1005 SO_RCVTIMEO = 0x1006 SO_SNDBUF = 0x1001 SO_UPDATE_ACCEPT_CONTEXT = 0x700b diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/tools/go/ast/astutil/imports.go new/vendor/golang.org/x/tools/go/ast/astutil/imports.go --- old/vendor/golang.org/x/tools/go/ast/astutil/imports.go 2026-08-13 20:01:04.000000000 +0200 +++ new/vendor/golang.org/x/tools/go/ast/astutil/imports.go 2026-09-08 22:52:42.000000000 +0200 @@ -9,7 +9,6 @@ "fmt" "go/ast" "go/token" - "reflect" "slices" "strconv" "strings" @@ -473,15 +472,10 @@ } // updateBasicLitPos updates lit.Pos, -// ensuring that lit.End (if set) is displaced by the same amount. +// ensuring that lit.End is displaced by the same amount. // (See https://go.dev/issue/76395.) func updateBasicLitPos(lit *ast.BasicLit, pos token.Pos) { len := lit.End() - lit.Pos() lit.ValuePos = pos - // TODO(adonovan): after go1.26, simplify to: - // lit.ValueEnd = pos + len - v := reflect.ValueOf(lit).Elem().FieldByName("ValueEnd") - if v.IsValid() && v.Int() != 0 { - v.SetInt(int64(pos + len)) - } + lit.ValueEnd = pos + len } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go new/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go --- old/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go 2026-08-13 20:01:04.000000000 +0200 +++ new/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go 2026-09-08 22:52:42.000000000 +0200 @@ -2,63 +2,44 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Package gcexportdata provides functions for reading and writing -// export data, which is a serialized description of the API of a Go -// package including the names, kinds, types, and locations of all -// exported declarations. -// -// The standard Go compiler (cmd/compile) writes an export data file -// for each package it compiles, which it later reads when compiling -// packages that import the earlier one. The compiler must thus -// contain logic to both write and read export data. -// (See the "Export" section in the cmd/compile/README file.) -// -// The [Read] function in this package can read files produced by the -// compiler, producing [go/types] data structures. As a matter of -// policy, Read supports export data files produced by only the last -// two Go releases plus tip; see https://go.dev/issue/68898. The -// export data files produced by the compiler contain additional -// details related to generics, inlining, and other optimizations that -// cannot be decoded by the [Read] function. -// -// In files written by the compiler, the export data is not at the -// start of the file. Before calling Read, use [NewReader] to locate -// the desired portion of the file. -// -// The [Write] function in this package encodes the exported API of a -// Go package ([types.Package]) as a file. Such files can be later -// decoded by Read, but cannot be consumed by the compiler. -// -// # Future changes -// -// Although Read supports the formats written by both Write and the -// compiler, the two are quite different, and there is an open -// proposal (https://go.dev/issue/69491) to separate these APIs. -// -// Under that proposal, this package would ultimately provide only the -// Read operation for compiler export data, which must be defined in -// this module (golang.org/x/tools), not in the standard library, to -// avoid version skew for developer tools that need to read compiler -// export data both before and after a Go release, such as from Go -// 1.23 to Go 1.24. Because this package lives in the tools module, -// clients can update their version of the module some time before the -// Go 1.24 release and rebuild and redeploy their tools, which will -// then be able to consume both Go 1.23 and Go 1.24 export data files, -// so they will work before and after the Go update. (See discussion -// at https://go.dev/issue/15651.) -// -// The operations to import and export [go/types] data structures -// would be defined in the go/types package as Import and Export. -// [Write] would (eventually) delegate to Export, -// and [Read], when it detects a file produced by Export, -// would delegate to Import. +// Package gcexportdata provides functions for writing and reading +// export data, a serialized representation of a [types.Package]. +// It describes the API of a Go package, including the names, +// kinds, types, and locations of all exported declarations. +// +// Files may be written and read using the [Write] and [Read] +// functions. +// Alternatively, files may be produced by the "go list -export" command. +// This command runs the type checker on each specified Go package and +// writes export data for each package into a file named by the Export +// field of go list's -json output. +// The [Read] function may then be used to read those files. +// +// The export data format evolves with each Go release. As a matter of +// policy, [Read] supports reading files produced by only the last two +// Go releases plus tip; see https://go.dev/issue/68898. +// +// The name of this package reflects its origins at a time when +// cmd/compile was named gc, and [Read] parsed export data +// from .a archives produced by the Go compiler. +// However, starting with go1.28, the format of the files +// produced by "go list -export" will diverge from the format +// used by the standard Go compiler. +// Consequently, this package will eventually stop being +// capable of reading those files. +// In the meantime, when using [Read] on a .a file written by the +// compiler, be aware that export data is not at the start of the file. +// Before calling Read, one must use [NewReader] to locate the export +// data section of the file. +// For more information on the compiler's export data, see the +// "Export" section in the GOROOT/src/cmd/compile/README file. // // # Deprecations // -// The [NewImporter] and [Find] functions are deprecated and should -// not be used in new code. The [WriteBundle] and [ReadBundle] -// functions are experimental, and there is an open proposal to -// deprecate them (https://go.dev/issue/69573). +// The [NewImporter], [Find], and [NewReader] functions are deprecated +// and should not be used in new code. +// The [WriteBundle] and [ReadBundle] functions are experimental, and +// there is an open proposal to deprecate them (https://go.dev/issue/69573). package gcexportdata import ( @@ -104,6 +85,9 @@ // NewReader returns a reader for the export data section of an object // (.o) or archive (.a) file read from r. The new reader may provide // additional trailing data beyond the end of the export data. +// +// Deprecated: This package will stop supporting the reading of export +// data from compiler-produced archive files in Go 1.29. func NewReader(r io.Reader) (io.Reader, error) { buf := bufio.NewReader(r) size, err := gcimporter.FindExportData(buf) @@ -176,16 +160,7 @@ case 'i': // indexed, produced by cmd/compile till go1.19, // and also by [Write]. - // - // If proposal #69491 is accepted, go/types - // serialization will be implemented by - // types.Export, to which Write would eventually - // delegate (explicitly dropping any pretence at - // inter-version Write-Read compatibility). - // This [Read] function would delegate to types.Import - // when it detects that the file was produced by Export. - _, pkg, err := gcimporter.IImportData(fset, imports, data[1:], path) - return pkg, err + return gcimporter.IImportData(fset, imports, data[1:], path) case 'u': // unified, produced by cmd/compile since go1.20 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/tools/go/ssa/builder.go new/vendor/golang.org/x/tools/go/ssa/builder.go --- old/vendor/golang.org/x/tools/go/ssa/builder.go 2026-08-13 20:01:04.000000000 +0200 +++ new/vendor/golang.org/x/tools/go/ssa/builder.go 2026-09-08 22:52:42.000000000 +0200 @@ -89,27 +89,25 @@ "golang.org/x/tools/internal/versions" ) -type opaqueType struct{ name string } - -func (t *opaqueType) String() string { return t.name } -func (t *opaqueType) Underlying() types.Type { return t } - var ( varOk = newVar("ok", tBool) varIndex = newVar("index", tInt) // Type constants. - tBool = types.Typ[types.Bool] - tByte = types.Typ[types.Byte] - tRune = types.Universe.Lookup("rune").Type() // prints as "rune" (Typ[Rune] is same as Int32) - tInt = types.Typ[types.Int] - tInvalid = types.Typ[types.Invalid] - tString = types.Typ[types.String] - tUntypedNil = types.Typ[types.UntypedNil] - - tRangeIter = &opaqueType{"iter"} // the type of all "range" iterators - tDeferStack = types.NewPointer(&opaqueType{"deferStack"}) // the type of a "deferStack" from ssa:deferstack() - tEface = types.NewInterfaceType(nil, nil).Complete() + tBool = types.Typ[types.Bool] + tByte = types.Typ[types.Byte] + tRune = types.Universe.Lookup("rune").Type() // prints as "rune" (Typ[Rune] is same as Int32) + tInt = types.Typ[types.Int] + tInvalid = types.Typ[types.Invalid] + tString = types.Typ[types.String] + tUntypedNil = types.Typ[types.UntypedNil] + tUnsafePointer = types.Typ[types.UnsafePointer] + tRangeIter = ssaNamedType("rangeIter", tUnsafePointer) // the type of all "range" iterators + tDeferStack = ssaNamedType("deferStack", tUnsafePointer) // the type of a "deferStack" from ssa:deferstack() + tEface = types.NewInterfaceType(nil, nil).Complete() + + // Fake package for fake ssa types. + ssaFakeTypesPackage = types.NewPackage("$ssa", "ssa") // SSA Value constants. vZero = intConst(0) @@ -129,6 +127,11 @@ } ) +func ssaNamedType(name string, underlying types.Type) *types.Named { + obj := types.NewTypeName(token.NoPos, ssaFakeTypesPackage, name, nil) + return types.NewNamed(obj, underlying, nil) +} + // builder holds state associated with the package currently being built. // Its methods contain all the logic for AST-to-SSA conversion. // @@ -641,11 +644,13 @@ info: fn.info, goversion: fn.goversion, build: (*builder).buildFromSyntax, - topLevelOrigin: nil, // use anonIdx to lookup an anon instance's origin. - typeparams: fn.typeparams, // share the parent's type parameters. - typeargs: fn.typeargs, // share the parent's type arguments. - subst: fn.subst, // share the parent's type substitutions. - uniq: fn.uniq, // start from parent's unique values + topLevelOrigin: nil, // use anonIdx to lookup an anon instance's origin. + recvtypeparams: fn.recvtypeparams, // share the parent's receiver type parameters. + recvtypeargs: fn.recvtypeargs, // share the parent's receiver type arguments. + typeparams: fn.typeparams, // share the parent's type parameters. + typeargs: fn.typeargs, // share the parent's type arguments. + subst: fn.subst, // share the parent's type substitutions. + uniq: fn.uniq, // start from parent's unique values } fn.AnonFuncs = append(fn.AnonFuncs, anon) // Build anon immediately, as it may cause fn's locals to escape. @@ -1135,8 +1140,8 @@ b.setCallFunc(fn, e, c) // Then append the other actual parameters. - sig, _ := typeparams.CoreType(fn.typeOf(e.Fun)).(*types.Signature) - if sig == nil { + sig, ok := typeparams.CoreType(fn.typeOf(e.Fun)).(*types.Signature) + if !ok { panic(fmt.Sprintf("no signature for call of %s", e.Fun)) } c.Args = b.emitCallArgs(fn, sig, e, c.Args) @@ -2535,6 +2540,8 @@ goversion: fn.goversion, build: (*builder).buildYieldFunc, topLevelOrigin: nil, + recvtypeparams: fn.recvtypeparams, + recvtypeargs: fn.recvtypeargs, typeparams: fn.typeparams, typeargs: fn.typeargs, subst: fn.subst, @@ -3014,9 +3021,9 @@ fn.lblocks[label] = &lblock{ label: label, resolved: true, - _goto: ycont, _continue: ycont, - // `break label` statement targets fn.parent.targets._break + // `goto label` searches the parent lblock, and + // `break label` targets fn.parent.targets._break. } } fn.targets = &targets{ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/tools/go/ssa/methods.go new/vendor/golang.org/x/tools/go/ssa/methods.go --- old/vendor/golang.org/x/tools/go/ssa/methods.go 2026-08-13 20:01:04.000000000 +0200 +++ new/vendor/golang.org/x/tools/go/ssa/methods.go 2026-09-08 22:52:42.000000000 +0200 @@ -32,7 +32,10 @@ return nil // interface method or type parameter } - if prog.isParameterized(T, sel.Type()) { + // Selection.Type allocates a new Signature on each call, and + // isParameterized memoizes by type identity, so an uncanonicalized + // argument would add one permanently retained entry per call (#81308). + if prog.isParameterized(T, prog.canon.Type(sel.Type())) { return nil // method on generic type or generic method } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/tools/go/ssa/sanity.go new/vendor/golang.org/x/tools/go/ssa/sanity.go --- old/vendor/golang.org/x/tools/go/ssa/sanity.go 2026-08-13 20:01:04.000000000 +0200 +++ new/vendor/golang.org/x/tools/go/ssa/sanity.go 2026-09-08 22:52:42.000000000 +0200 @@ -233,8 +233,6 @@ t := v.Type() if t == nil { s.errorf("no type: %s = %s", v.Name(), v) - } else if t == tRangeIter || t == tDeferStack { - // not a proper type; ignore. } else if b, ok := t.Underlying().(*types.Basic); ok && b.Info()&types.IsUntyped != 0 { s.errorf("instruction has 'untyped' result: %s = %s : %s", v.Name(), v, t) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/tools/go/ssa/subst.go new/vendor/golang.org/x/tools/go/ssa/subst.go --- old/vendor/golang.org/x/tools/go/ssa/subst.go 2026-08-13 20:01:04.000000000 +0200 +++ new/vendor/golang.org/x/tools/go/ssa/subst.go 2026-09-08 22:52:42.000000000 +0200 @@ -158,9 +158,6 @@ case *types.Named: return subst.named(t) - case *opaqueType: - return t // opaque types are never substituted - default: panic("unreachable") } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/tools/internal/gcimporter/iexport.go new/vendor/golang.org/x/tools/internal/gcimporter/iexport.go --- old/vendor/golang.org/x/tools/internal/gcimporter/iexport.go 2026-08-13 20:01:04.000000000 +0200 +++ new/vendor/golang.org/x/tools/internal/gcimporter/iexport.go 2026-09-08 22:52:42.000000000 +0200 @@ -712,7 +712,7 @@ w.typ(obj.Type(), obj.Pkg()) case *types.Func: - sig, _ := obj.Type().(*types.Signature) + sig := obj.Type().(*types.Signature) if sig.Recv() != nil { // We shouldn't see methods in the package scope, // but the type checker may repair "func () F() {}" @@ -745,7 +745,7 @@ case *types.Const: w.tag(constTag) w.pos(obj.Pos()) - w.value(obj.Type(), obj.Val()) + w.value(obj.Type(), obj.Val(), obj.Pkg()) case *types.TypeName: t := obj.Type() @@ -822,7 +822,7 @@ m := named.Method(i) w.pos(m.Pos()) w.string(m.Name()) - sig, _ := m.Type().(*types.Signature) + sig := m.Type().(*types.Signature) if w.p.version >= iexportVersionGenericMethods && w.bool(sig.TypeParams().Len() > 0) { w.tparamList(obj.Name()+"."+m.Name(), sig.TypeParams(), obj.Pkg()) } @@ -970,9 +970,11 @@ // typ emits the specified type. // // Objects within the type (struct fields and interface methods) are -// qualified by pkg. It may be nil if the type cannot contain objects, -// such as the type of a constant. +// qualified by pkg. func (w *exportWriter) typ(t types.Type, pkg *types.Package) { + if pkg == nil { + pkg = w.p.localpkg + } w.data.uint64(w.p.typOff(t, pkg)) } @@ -1148,7 +1150,7 @@ } w.pos(m.Pos()) w.string(m.Name()) - sig, _ := m.Type().(*types.Signature) + sig := m.Type().(*types.Signature) w.signature(sig) } @@ -1295,8 +1297,12 @@ w.typ(obj.Type(), obj.Pkg()) } -func (w *exportWriter) value(typ types.Type, v constant.Value) { - w.typ(typ, nil) +// only called for constants +func (w *exportWriter) value(typ types.Type, v constant.Value, pkg *types.Package) { + if pkg == nil { + pkg = w.p.localpkg + } + w.typ(typ, pkg) if w.p.version >= iexportVersionGo1_18 { w.int64(int64(v.Kind())) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/tools/internal/gcimporter/iimport.go new/vendor/golang.org/x/tools/internal/gcimporter/iimport.go --- old/vendor/golang.org/x/tools/internal/gcimporter/iimport.go 2026-08-13 20:01:04.000000000 +0200 +++ new/vendor/golang.org/x/tools/internal/gcimporter/iimport.go 2026-09-08 22:52:42.000000000 +0200 @@ -30,14 +30,6 @@ path string } -func (r *intReader) int64() int64 { - i, err := binary.ReadVarint(r.Reader) - if err != nil { - errorf("import %q: read varint error: %v", r.path, err) - } - return i -} - func (r *intReader) uint64() uint64 { i, err := binary.ReadUvarint(r.Reader) if err != nil { @@ -101,12 +93,12 @@ // and returns 0 and a reference to the package. // If the export data version is not recognized or the format is otherwise // compromised, an error is returned. -func IImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (int, *types.Package, error) { +func IImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (*types.Package, error) { pkgs, err := iimportCommon(fset, GetPackagesFromMap(imports), data, false, path, false, nil) if err != nil { - return 0, nil, err + return nil, err } - return 0, pkgs[0], nil + return pkgs[0], nil } // IImportBundle imports a set of packages from the serialized package bundle. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/tools/internal/gcimporter/ureader.go new/vendor/golang.org/x/tools/internal/gcimporter/ureader.go --- old/vendor/golang.org/x/tools/internal/gcimporter/ureader.go 2026-08-13 20:01:04.000000000 +0200 +++ new/vendor/golang.org/x/tools/internal/gcimporter/ureader.go 2026-09-08 22:52:42.000000000 +0200 @@ -629,11 +629,26 @@ }) } - for i, n := 0, r.Len(); i < n; i++ { - named.AddMethod(r.method()) - } - if r.Version().Has(pkgbits.GenericMethods) { + // V4 (go1.27.0) emitted all non-generic methods + // before all generic ones, discarding source + // order: a bug (go.dev/issue/81188). + // V5 (go1.27.x) fixes it by emitting an explicit + // index along with each method. + type indexedMethod struct { + index int // (or -1 in V4) + fn *types.Func + } + + var methods []indexedMethod + + // ordinary methods + for range r.Len() { + idx, m := r.method() + methods = append(methods, indexedMethod{idx, m}) + } + + // generic methods for range r.Len() { // Careful: objIdx is used to read in package-scoped declarations, which // methods are not. Instead, decode it here. This makes it easier to @@ -648,11 +663,31 @@ pkg, name := r.selector() rtparams := r.typeParamNames(true) recv := r.param() + methodIdx := -1 + if r.Version().Has(pkgbits.PreserveMethodOrder) { + methodIdx = r.Len() + } tparams := r.typeParamNames(false) sig := r.signature(recv, rtparams, tparams) pr.retireReader(r) - named.AddMethod(types.NewFunc(pos, pkg, name, sig)) + methods = append(methods, indexedMethod{methodIdx, types.NewFunc(pos, pkg, name, sig)}) + } + + if r.Version().Has(pkgbits.PreserveMethodOrder) { + sort.Slice(methods, func(i, j int) bool { + return methods[i].index < methods[j].index + }) + } + + for _, m := range methods { + named.AddMethod(m.fn) + } + + } else { + for range r.Len() { + _, m := r.method() + named.AddMethod(m) } } @@ -766,8 +801,12 @@ return tparams } -func (r *reader) method() *types.Func { +func (r *reader) method() (int, *types.Func) { r.Sync(pkgbits.SyncMethod) + idx := -1 + if r.Version().Has(pkgbits.PreserveMethodOrder) { + idx = r.Len() + } pos := r.pos() pkg, name := r.selector() @@ -775,7 +814,7 @@ sig := r.signature(r.param(), rparams, nil) _ = r.pos() // TODO(mdempsky): Remove; this is a hacker for linker.go. - return types.NewFunc(pos, pkg, name, sig) + return idx, types.NewFunc(pos, pkg, name, sig) } func (r *reader) qualifiedIdent() (*types.Package, string) { return r.ident(pkgbits.SyncSym) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/tools/internal/pkgbits/version.go new/vendor/golang.org/x/tools/internal/pkgbits/version.go --- old/vendor/golang.org/x/tools/internal/pkgbits/version.go 2026-08-13 20:01:04.000000000 +0200 +++ new/vendor/golang.org/x/tools/internal/pkgbits/version.go 2026-09-08 22:52:42.000000000 +0200 @@ -37,6 +37,10 @@ // V4: encodes generic methods as standalone function objects V4 + // V5: encodes the index of methods to preserve relative order + // of nongeneric and generic methods (go.dev/issue/81188). + V5 + numVersions = iota ) @@ -76,6 +80,10 @@ // Generic methods may appear as standalone function objects. GenericMethods + // Method index is encoded to preserve relative order of + // nongeneric and generic methods. + PreserveMethodOrder + numFields = iota ) @@ -85,6 +93,7 @@ AliasTypeParamNames: V2, CompactCompLiterals: V3, GenericMethods: V4, + PreserveMethodOrder: V5, } // removed is the version a field was removed in or 0 for fields diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/tools/internal/stdlib/deps.go new/vendor/golang.org/x/tools/internal/stdlib/deps.go --- old/vendor/golang.org/x/tools/internal/stdlib/deps.go 2026-08-13 20:01:04.000000000 +0200 +++ new/vendor/golang.org/x/tools/internal/stdlib/deps.go 2026-09-08 22:52:42.000000000 +0200 @@ -44,7 +44,7 @@ {"crypto/internal/boring/bcache", "\xcf\x02\x14"}, {"crypto/internal/boring/sig", ""}, {"crypto/internal/constanttime", ""}, - {"crypto/internal/cryptotest", "\x03\r\v\n%\x11\x1a\r\x12\x12!\x04\x06\n\x19\x01\x11\x11\x1d\x01\a\x03\x02\b\x02\x01\x05\f"}, + {"crypto/internal/cryptotest", "\x03\r\v\n%\x11\x1a\r\x12\x12!\x04\x06\n\x19\x01\x11\x11\x1d\x01\a\x03\x02\b\x02\x01\x04\x01\f"}, {"crypto/internal/cryptotest/wycheproof", "\x0e\x12T\x01\f\x01r@\x05\x03\x15\x10"}, {"crypto/internal/cryptotest/x509limbo", "u\n\x03\xba\x01\x03\x1e"}, {"crypto/internal/entropy", "M"}, @@ -122,7 +122,7 @@ {"embed/internal/embedtest", ""}, {"encoding", ""}, {"encoding/ascii85", "\x86\x02E"}, - {"encoding/asn1", "\x03|\x03h(\x01)\r\x02\x01\x11\x03\x01"}, + {"encoding/asn1", "\x03|\x03h(\x01)\x05\b\x02\x01\x11\x03\x01"}, {"encoding/base32", "\x86\x02C\x02"}, {"encoding/base64", "\xaa\x01\\C\x02"}, {"encoding/binary", "\x7f\x87\x01\f*\r\x05"}, @@ -319,7 +319,7 @@ {"net/rpc/jsonrpc", "u\n\x03\x84\x01\x16\x13\x1f"}, {"net/smtp", "\x196\r\x14\x0f\x03\x84\x01\x16\x16\x1a"}, {"net/textproto", "\x02\x01|\x03\x84\x01\f\n/\x01\x02\x15"}, - {"net/url", "\x7f\x03Ff\v\x10\x02\x01\x17"}, + {"net/url", "\x03|\x03Ff\v\x10\x02\x01\x17"}, {"os", "\x7f*\x01\x19\x04\x11\x14\x01\x03\x01\x05\x10\x01:\b\x05\x01\x01\r\x06"}, {"os/exec", "\x03\nrI(\x01\x15\x01-\x06\a\n\x01\x03\x01\r"}, {"os/exec/internal/fdtest", "\xd0\x02"}, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/tools/internal/typesinternal/types.go new/vendor/golang.org/x/tools/internal/typesinternal/types.go --- old/vendor/golang.org/x/tools/internal/typesinternal/types.go 2026-08-13 20:01:04.000000000 +0200 +++ new/vendor/golang.org/x/tools/internal/typesinternal/types.go 2026-09-08 22:52:42.000000000 +0200 @@ -271,6 +271,8 @@ } } +// TupleOf returns a tuple type with the specified list of (unnamed) +// var types. Neither the zero nor one cases are special. func TupleOf(elems ...types.Type) *types.Tuple { params := make([]*types.Var, len(elems)) for i, elem := range elems { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/modules.txt new/vendor/modules.txt --- old/vendor/modules.txt 2026-08-13 20:01:04.000000000 +0200 +++ new/vendor/modules.txt 2026-09-08 22:52:42.000000000 +0200 @@ -12,20 +12,20 @@ # github.com/google/renameio v0.1.0 ## explicit github.com/google/renameio -# golang.org/x/mod v0.39.0 -## explicit; go 1.25.0 +# golang.org/x/mod v0.41.0 +## explicit; go 1.26.0 golang.org/x/mod/internal/lazyregexp golang.org/x/mod/modfile golang.org/x/mod/module golang.org/x/mod/semver -# golang.org/x/sync v0.22.0 -## explicit; go 1.25.0 +# golang.org/x/sync v0.23.0 +## explicit; go 1.26.0 golang.org/x/sync/errgroup -# golang.org/x/sys v0.47.0 -## explicit; go 1.25.0 +# golang.org/x/sys v0.48.0 +## explicit; go 1.26.0 golang.org/x/sys/windows -# golang.org/x/telemetry v0.0.0-20260811182544-a038080d80e5 -## explicit; go 1.25.0 +# golang.org/x/telemetry v0.0.0-20260908163034-4bcc4b2ee518 +## explicit; go 1.26.0 golang.org/x/telemetry golang.org/x/telemetry/counter golang.org/x/telemetry/internal/config @@ -35,8 +35,8 @@ golang.org/x/telemetry/internal/mmap golang.org/x/telemetry/internal/telemetry golang.org/x/telemetry/internal/upload -# golang.org/x/tools v0.49.0 -## explicit; go 1.25.0 +# golang.org/x/tools v0.50.0 +## explicit; go 1.26.0 golang.org/x/tools/go/ast/astutil golang.org/x/tools/go/ast/edge golang.org/x/tools/go/ast/inspector
