|  | // run | 
|  |  | 
|  | // Copyright 2021 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. | 
|  |  | 
|  | // Bug: in (*bb).d, the value to be returned was not allocated to | 
|  | // a register that satisfies its register mask. | 
|  |  | 
|  | package main | 
|  |  | 
|  | type bb struct { | 
|  | r float64 | 
|  | x []float64 | 
|  | } | 
|  |  | 
|  | //go:noinline | 
|  | func B(r float64, x []float64) I { | 
|  | return bb{r, x} | 
|  | } | 
|  |  | 
|  | func (b bb) d() (int, int) { | 
|  | if b.r == 0 { | 
|  | return 0, len(b.x) | 
|  | } | 
|  | return len(b.x), len(b.x) | 
|  | } | 
|  |  | 
|  | type I interface { d() (int, int) } | 
|  |  | 
|  | func D(r I) (int, int) { return r.d() } | 
|  |  | 
|  | //go:noinline | 
|  | func F() (int, int) { | 
|  | r := float64(1) | 
|  | x := []float64{0, 1, 2} | 
|  | b := B(r, x) | 
|  | return D(b) | 
|  | } | 
|  |  | 
|  | func main() { | 
|  | x, y := F() | 
|  | if x != 3 || y != 3 { | 
|  | panic("FAIL") | 
|  | } | 
|  | } |