mirror of
https://github.com/golang/go
synced 2024-11-14 08:30:25 -07:00
ae5e791ed2
This avoids problems with inlining in genwrappers, which occurs after functions have been compiled. Compiling a function may cause some unused local vars to be removed from the list. Since a local var may be unused due to optimization, it is possible that a removed local var winds up beingused in the inlined version, in which case hilarity ensues. Fixes #5515. R=golang-dev, khr, dave CC=golang-dev https://golang.org/cl/10210043
35 lines
597 B
Go
35 lines
597 B
Go
// run
|
|
|
|
// Copyright 2013 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 5515: miscompilation doing inlining in generated method wrapper
|
|
|
|
package main
|
|
|
|
type T uint32
|
|
|
|
func main() {
|
|
b := make([]T, 8)
|
|
b[0] = 0xdeadbeef
|
|
rs := Slice(b)
|
|
sort(rs)
|
|
}
|
|
|
|
type Slice []T
|
|
|
|
func (s Slice) Swap(i, j int) {
|
|
tmp := s[i]
|
|
s[i] = s[j]
|
|
s[j] = tmp
|
|
}
|
|
|
|
type Interface interface {
|
|
Swap(i, j int)
|
|
}
|
|
|
|
func sort(data Interface) {
|
|
data.Swap(0, 4)
|
|
}
|