Initial commit: Go 1.23 release state
This commit is contained in:
70
test/fixedbugs/issue34723.go
Normal file
70
test/fixedbugs/issue34723.go
Normal file
@@ -0,0 +1,70 @@
|
||||
// errorcheck -0 -d=wb
|
||||
|
||||
// Copyright 2019 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.
|
||||
|
||||
// Make sure we don't introduce write barriers where we
|
||||
// don't need them. These cases are writing pointers to
|
||||
// globals to zeroed memory.
|
||||
|
||||
package main
|
||||
|
||||
func f1() []string {
|
||||
return []string{"a"}
|
||||
}
|
||||
|
||||
func f2() []string {
|
||||
return []string{"a", "b"}
|
||||
}
|
||||
|
||||
type T struct {
|
||||
a [6]*int
|
||||
}
|
||||
|
||||
func f3() *T {
|
||||
t := new(T)
|
||||
t.a[0] = &g
|
||||
t.a[1] = &g
|
||||
t.a[2] = &g
|
||||
t.a[3] = &g
|
||||
t.a[4] = &g
|
||||
t.a[5] = &g
|
||||
return t
|
||||
}
|
||||
|
||||
func f4() *T {
|
||||
t := new(T)
|
||||
t.a[5] = &g
|
||||
t.a[4] = &g
|
||||
t.a[3] = &g
|
||||
t.a[2] = &g
|
||||
t.a[1] = &g
|
||||
t.a[0] = &g
|
||||
return t
|
||||
}
|
||||
|
||||
func f5() *T {
|
||||
t := new(T)
|
||||
t.a[4] = &g
|
||||
t.a[2] = &g
|
||||
t.a[0] = &g
|
||||
t.a[3] = &g
|
||||
t.a[1] = &g
|
||||
t.a[5] = &g
|
||||
return t
|
||||
}
|
||||
|
||||
type U struct {
|
||||
a [65]*int
|
||||
}
|
||||
|
||||
func f6() *U {
|
||||
u := new(U)
|
||||
u.a[63] = &g
|
||||
// This offset is too large: we only track the first 64 pointers for zeroness.
|
||||
u.a[64] = &g // ERROR "write barrier"
|
||||
return u
|
||||
}
|
||||
|
||||
var g int
|
||||
Reference in New Issue
Block a user