/
githubmirror
/
go
Обзор
Документация
Войти
/
githubmirror
/
go
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
test/fixedbugs/issue21687.go
68 строк
940 B
Matthew Dempsky
cmd/compile: fix evaluation order for OASOP
05 сен 2017, 21:10
05 сен 2017, 21:10
34db5f0
Код
Авторство
О чём код?
// run // Copyright 2017 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. // Issue 21687: cmd/compile evaluates x twice in "x op= y", which was // detectable if evaluating y affects x. package main func ptrs() (int, int) { one := 1 two := 2 x := &one *x += func() int { x = &two return 0 }() return one, two } func slices() (int, int) { one := []int{1} two := []int{2} x := one x[0] += func() int { x = two return 0 }() return one[0], two[0] } func maps() (int, int) { one := map[int]int{0: 1} two := map[int]int{0: 2} x := one x[0] += func() int { x = two return 0 }() return one[0], two[0] } var tests = [...]func() (int, int){ ptrs, slices, maps, } func main() { bad := 0 for i, f := range tests { if a, b := f(); a+b != 3 { println(i, a, b) bad++ } } if bad != 0 { panic(bad) } }