]> Cypherpunks repositories - gostls13.git/commitdiff
go/types: fix bad variable shadowing in offsetsof
authorJosh Bleecher Snyder <josharian@gmail.com>
Mon, 29 Aug 2016 23:19:23 +0000 (16:19 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Tue, 30 Aug 2016 00:17:42 +0000 (00:17 +0000)
Introduced in CL 26995.

Fixes #16902

Change-Id: I8e749f598167e1f8b82cd5e735a7eb5291362e5e
Reviewed-on: https://go-review.googlesource.com/28070
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
src/go/types/sizes.go
src/go/types/sizes_test.go

index 56dfbaccbbd7d57b1481c8cfbaba0d165e4578fb..6efd0b1394377e3d22c19dc57a0d1e4deb6e6134 100644 (file)
@@ -167,7 +167,7 @@ func (conf *Config) offsetsof(T *Struct) []int64 {
        if T.NumFields() > 0 {
                // compute offsets on demand
                if s := conf.Sizes; s != nil {
-                       offsets := s.Offsetsof(T.fields)
+                       offsets = s.Offsetsof(T.fields)
                        // sanity checks
                        if len(offsets) != T.NumFields() {
                                panic("Config.Sizes.Offsetsof returned the wrong number of offsets")
index 64a1d991a30322b4f312e36d292547819d16a4dc..539b4e37c17e3ad4d9a98f05e66ecf606c3a2f22 100644 (file)
@@ -8,6 +8,7 @@ package types_test
 
 import (
        "go/ast"
+       "go/importer"
        "go/parser"
        "go/token"
        "go/types"
@@ -81,3 +82,31 @@ var s struct {
                t.Errorf("OffsetsOf(%v) = %v want %v", ts, offsets, []int{0, 4})
        }
 }
+
+func TestIssue16902(t *testing.T) {
+       const src = `
+package a
+
+import "unsafe"
+
+const _ = unsafe.Offsetof(struct{ x int64 }{}.x)
+`
+       fset := token.NewFileSet()
+       f, err := parser.ParseFile(fset, "x.go", src, 0)
+       if err != nil {
+               t.Fatal(err)
+       }
+       info := types.Info{Types: make(map[ast.Expr]types.TypeAndValue)}
+       conf := types.Config{
+               Importer: importer.Default(),
+               Sizes:    &types.StdSizes{WordSize: 8, MaxAlign: 8},
+       }
+       _, err = conf.Check("x", fset, []*ast.File{f}, &info)
+       if err != nil {
+               t.Fatal(err)
+       }
+       for _, tv := range info.Types {
+               _ = conf.Sizes.Sizeof(tv.Type)
+               _ = conf.Sizes.Alignof(tv.Type)
+       }
+}