]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/vendor: update to golang.org/x/tools@3ef68632
authorDaniel Martí <mvdan@mvdan.cc>
Sun, 6 Jan 2019 17:19:35 +0000 (18:19 +0100)
committerDaniel Martí <mvdan@mvdan.cc>
Sun, 6 Jan 2019 19:10:26 +0000 (19:10 +0000)
Mainly to pull in the bug fix in the structtag pass, where filenames
could sometimes be wrong. The bug wasn't present in 1.11, so it was a
regression and needs fixing before 1.12 is out.

Fixes #29130.

Change-Id: Ie9d9bff84873f34d748ebd8f056b6bc2ac822a55
Reviewed-on: https://go-review.googlesource.com/c/156378
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Alan Donovan <adonovan@google.com>
src/cmd/vendor/golang.org/x/tools/go/analysis/doc.go
src/cmd/vendor/golang.org/x/tools/go/analysis/passes/asmdecl/asmdecl.go
src/cmd/vendor/golang.org/x/tools/go/analysis/passes/bools/bools.go
src/cmd/vendor/golang.org/x/tools/go/analysis/passes/structtag/structtag.go
src/cmd/vendor/golang.org/x/tools/go/analysis/unitchecker/unitchecker.go

index 5dee615181b89aa25e3d6f2f39f28d9b822fde41..f925849ab508972b026d7c4f11e3ac660dc45136 100644 (file)
@@ -3,10 +3,6 @@
 The analysis package defines the interface between a modular static
 analysis and an analysis driver program.
 
-
-THIS INTERFACE IS EXPERIMENTAL AND SUBJECT TO CHANGE.
-We aim to finalize it by November 2018.
-
 Background
 
 A static analysis is a function that inspects a package of Go code and
index 0f8abb5748127aba970fb1624ab743a53f6291be..dce1ef7bd5e6d0626cf441353db71329fc7712d8 100644 (file)
@@ -490,7 +490,7 @@ func appendComponentsRecursive(arch *asmArch, t types.Type, cc []component, suff
                offsets := arch.sizes.Offsetsof(fields)
                elemoff := int(offsets[1])
                for i := 0; i < int(tu.Len()); i++ {
-                       cc = appendComponentsRecursive(arch, elem, cc, suffix+"_"+strconv.Itoa(i), i*elemoff)
+                       cc = appendComponentsRecursive(arch, elem, cc, suffix+"_"+strconv.Itoa(i), off+i*elemoff)
                }
        }
 
@@ -514,7 +514,7 @@ func asmParseDecl(pass *analysis.Pass, decl *ast.FuncDecl) map[string]*asmFunc {
                for _, fld := range list {
                        t := pass.TypesInfo.Types[fld.Type].Type
 
-                       // Work around github.com/golang/go/issues/28277.
+                       // Work around https://golang.org/issue/28277.
                        if t == nil {
                                if ell, ok := fld.Type.(*ast.Ellipsis); ok {
                                        t = types.NewSlice(pass.TypesInfo.Types[ell.Elt].Type)
index 0e6f2695f3dc72151c415811acc6f95ab42c6195..833c9d7aae1c4eed309107871846ac43db5a7325 100644 (file)
@@ -45,7 +45,7 @@ func run(pass *analysis.Pass) (interface{}, error) {
 
                // TODO(adonovan): this reports n(n-1)/2 errors for an
                // expression e||...||e of depth n. Fix.
-               // See https://github.com/golang/go/issues/28086.
+               // See https://golang.org/issue/28086.
                comm := op.commutativeSets(pass.TypesInfo, e)
                for _, exprs := range comm {
                        op.checkRedundant(pass, exprs)
index 78133fe6f30a997470bda5172f1c54f3cbcb4644..2b67c376bab8b9703d1b62d9a75f1601c8ec6d34 100644 (file)
@@ -136,10 +136,23 @@ func checkTagDuplicates(pass *analysis.Pass, tag, key string, nearest, field *ty
                *seen = map[[2]string]token.Pos{}
        }
        if pos, ok := (*seen)[[2]string{key, val}]; ok {
-               posn := pass.Fset.Position(pos)
-               posn.Filename = filepath.Base(posn.Filename)
-               posn.Column = 0
-               pass.Reportf(nearest.Pos(), "struct field %s repeats %s tag %q also at %s", field.Name(), key, val, posn)
+               alsoPos := pass.Fset.Position(pos)
+               alsoPos.Column = 0
+
+               // Make the "also at" position relative to the current position,
+               // to ensure that all warnings are unambiguous and correct. For
+               // example, via anonymous struct fields, it's possible for the
+               // two fields to be in different packages and directories.
+               thisPos := pass.Fset.Position(field.Pos())
+               rel, err := filepath.Rel(filepath.Dir(thisPos.Filename), alsoPos.Filename)
+               if err != nil {
+                       // Possibly because the paths are relative; leave the
+                       // filename alone.
+               } else {
+                       alsoPos.Filename = rel
+               }
+
+               pass.Reportf(nearest.Pos(), "struct field %s repeats %s tag %q also at %s", field.Name(), key, val, alsoPos)
        } else {
                (*seen)[[2]string{key, val}] = field.Pos()
        }
index 018191a5e7a25cf38b2c479ecdfc4ea496739cbf..76dabc28b9043ba14d6c12538712ee286fdf85c4 100644 (file)
@@ -182,7 +182,7 @@ func readConfig(filename string) (*Config, error) {
 }
 
 var importerForCompiler = func(_ *token.FileSet, compiler string, lookup importer.Lookup) types.Importer {
-       // broken legacy implementation (github.com/golang/go/issues/28995)
+       // broken legacy implementation (https://golang.org/issue/28995)
        return importer.For(compiler, lookup)
 }