| // 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. |
| |
| package main |
| |
| type patchlist struct { |
| head, tail uint32 |
| } |
| |
| type frag struct { |
| i uint32 |
| out patchlist |
| } |
| |
| //go:noinline |
| //go:registerparams |
| func patch(l patchlist, i uint32) { |
| } |
| |
| //go:noinline |
| //go:registerparams |
| func badbad(f1, f2 frag) frag { |
| // concat of failure is failure |
| if f1.i == 0 || f2.i == 0 { // internal compiler error: 'badbad': incompatible OpArgIntReg [4]: v42 and v26 |
| return frag{} |
| } |
| patch(f1.out, f2.i) |
| return frag{f1.i, f2.out} |
| } |
| |
| func main() { |
| badbad(frag{i: 2}, frag{i: 3}) |
| } |