1// run
2
3// Copyright 2021 The Go Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
7// Bug: in (*bb).d, the value to be returned was not allocated to
8// a register that satisfies its register mask.
9
10package main
11
12type bb struct {
13	r float64
14	x []float64
15}
16
17//go:noinline
18func B(r float64, x []float64) I {
19	return bb{r, x}
20}
21
22func (b bb) d() (int, int) {
23	if b.r == 0 {
24		return 0, len(b.x)
25	}
26	return len(b.x), len(b.x)
27}
28
29type I interface { d() (int, int) }
30
31func D(r I) (int, int) { return r.d() }
32
33//go:noinline
34func F() (int, int) {
35	r := float64(1)
36	x := []float64{0, 1, 2}
37	b := B(r, x)
38	return D(b)
39}
40
41func main() {
42	x, y := F()
43	if x != 3 || y != 3 {
44		panic("FAIL")
45	}
46}
47