blob: 54497420b237ccaa67461746f9f69494828361e1 [file] [edit]
// Regression test for an unsound optimization to initialize S{...} in
// place, even though that violates the required ordering between the
// evaluation of the "..." operands and the assignments to the fields
// of S.
package main
type S struct {
X, Y int
}
var s S
func main() {
// The function calls must occur before the assignment. That
// means g() should observe the s.X=42 effect of the call f()
// but not s.X=1 effect of the composite literal field assignment;
// that should happens after g().
s = S{f(), g()}
if s.X != 1 || s.Y != 2 {
panic("s should be {1, 2}")
}
}
func f() int {
s.X = 42
return 1
}
func g() int {
if s.X != 42 {
panic("g should see s.X == 42 from side effect of f")
}
return 2
}