1
0
mirror of https://github.com/golang/go synced 2024-11-23 15:00:03 -07:00
go/test/fixedbugs/issue15091.go
David Chase c3b3e7b4ef cmd/compile: insert instrumentation more carefully in racewalk
Be more careful about inserting instrumentation in racewalk.
If the node being instrumented is an OAS, and it has a non-
empty Ninit, then append instrumentation to the Ninit list
rather than letting it be inserted before the OAS (and the
compilation of its init list).  This deals with the case that
the Ninit list defines a variable used in the RHS of the OAS.

Fixes #15091.

Change-Id: Iac91696d9104d07f0bf1bd3499bbf56b2e1ef073
Reviewed-on: https://go-review.googlesource.com/21771
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
Run-TryBot: David Chase <drchase@google.com>
2016-04-08 21:06:39 +00:00

26 lines
853 B
Go

// errorcheck -0 -race
// Copyright 2016 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 sample
type Html struct {
headerIDs map[string]int
}
// We don't want to see:
// internal error: (*Html).xyzzy autotmp_3 (type *int) recorded as live on entry, p.Pc=0
// or (now, with the error caught earlier)
// Treating auto as if it were arg, func (*Html).xyzzy, node ...
// caused by racewalker inserting instrumentation before an OAS where the Ninit
// of the OAS defines part of its right-hand-side. (I.e., the race instrumentation
// references a variable before it is defined.)
func (options *Html) xyzzy(id string) string {
for count, found := options.headerIDs[id]; found; count, found = options.headerIDs[id] {
_ = count
}
return ""
}