1// run 2 3//go:build !wasm 4 5// Copyright 2021 The Go Authors. All rights reserved. 6// Use of this source code is governed by a BSD-style 7// license that can be found in the LICENSE file. 8 9package main 10 11import ( 12 "fmt" 13) 14 15var sink *string 16 17type toobig struct { 18 // 6 words will not SSA but will fit in registers 19 a, b, c string 20} 21 22//go:registerparams 23//go:noinline 24func H(x toobig) string { 25 return x.a + " " + x.b + " " + x.c 26} 27 28//go:registerparams 29//go:noinline 30func I(a, b, c string) toobig { 31 return toobig{a, b, c} 32} 33 34func main() { 35 s := H(toobig{"Hello", "there,", "World"}) 36 gotVsWant(s, "Hello there, World") 37 fmt.Println(s) 38 t := H(I("Ahoy", "there,", "Matey")) 39 gotVsWant(t, "Ahoy there, Matey") 40 fmt.Println(t) 41} 42 43func gotVsWant(got, want string) { 44 if got != want { 45 fmt.Printf("FAIL, got %s, wanted %s\n", got, want) 46 } 47} 48