From: Keith Randall Date: Wed, 21 Apr 2021 17:54:13 +0000 (-0700) Subject: test: add a field tracking test X-Git-Tag: go1.17beta1~522 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=255056395e;p=gostls13.git test: add a field tracking test Now that we can set experiments at build time instead of make.bash time, we can actually write a test for field tracking! Update #20014 This CL contains a test for the functionality fixed in CL 312069. Change-Id: I7569a7057bbc7c88ae25ae7bf974b0c8a4e35be8 Reviewed-on: https://go-review.googlesource.com/c/go/+/312217 Trust: Keith Randall Run-TryBot: Keith Randall TryBot-Result: Go Bot Reviewed-by: Matthew Dempsky --- diff --git a/test/fixedbugs/issue20014.dir/a/a.go b/test/fixedbugs/issue20014.dir/a/a.go new file mode 100644 index 0000000000..1e66326276 --- /dev/null +++ b/test/fixedbugs/issue20014.dir/a/a.go @@ -0,0 +1,21 @@ +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package a + +type T struct { + X int `go:"track"` + Y int `go:"track"` + Z int // untracked +} + +func (t *T) GetX() int { + return t.X +} +func (t *T) GetY() int { + return t.Y +} +func (t *T) GetZ() int { + return t.Z +} diff --git a/test/fixedbugs/issue20014.dir/main.go b/test/fixedbugs/issue20014.dir/main.go new file mode 100644 index 0000000000..ac9957de40 --- /dev/null +++ b/test/fixedbugs/issue20014.dir/main.go @@ -0,0 +1,54 @@ +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "strings" + + "issue20014.dir/a" +) + +func main() { + samePackage() + crossPackage() + // Print fields registered with field tracking. + for _, line := range strings.Split(fieldTrackInfo, "\n") { + if line == "" { + continue + } + println(strings.Split(line, "\t")[0]) + } +} + +type T struct { + X int `go:"track"` + Y int `go:"track"` + Z int // untracked +} + +func (t *T) GetX() int { + return t.X +} +func (t *T) GetY() int { + return t.Y +} +func (t *T) GetZ() int { + return t.Z +} + +func samePackage() { + var t T + println(t.GetX()) + println(t.GetZ()) +} + +func crossPackage() { + var t a.T + println(t.GetX()) + println(t.GetZ()) +} + +// This global variable is set by the linker using the -k option. +var fieldTrackInfo string diff --git a/test/fixedbugs/issue20014.go b/test/fixedbugs/issue20014.go new file mode 100644 index 0000000000..e186aa1d07 --- /dev/null +++ b/test/fixedbugs/issue20014.go @@ -0,0 +1,7 @@ +// runindir -goexperiment fieldtrack -ldflags -k=main.fieldTrackInfo + +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ignored diff --git a/test/fixedbugs/issue20014.out b/test/fixedbugs/issue20014.out new file mode 100644 index 0000000000..252e78da5e --- /dev/null +++ b/test/fixedbugs/issue20014.out @@ -0,0 +1,6 @@ +0 +0 +0 +0 +main.T.X +issue20014.dir/a.T.X