1
0
mirror of https://github.com/golang/go synced 2024-11-08 12:36:13 -07:00
go/test/abi/regabipragma.dir/main.go
David Chase 861707a8c8 [dev.regabi] cmd/compile: added limited //go:registerparams pragma for new ABI dev
This only works for functions; if you try it with a method, it will
fail.  It does work for both local package and imports.  For now,
it tells you when it thinks it sees either a declaration or a call of
such a function (this will normally be silent since no existing
code uses this pragma).

Note: it appears to be really darn hard to figure out if this
pragma was set for a method, and the method's call site.  Better
ir.Node wranglers than I might be able to make headway, but it
seemed unnecessary for this experiment.

Change-Id: I601c2ddd124457bf6d62f714d7ac871705743c0a
Reviewed-on: https://go-review.googlesource.com/c/go/+/279521
Trust: David Chase <drchase@google.com>
Run-TryBot: David Chase <drchase@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Jeremy Faller <jeremy@golang.org>
2021-01-13 15:50:04 +00:00

37 lines
834 B
Go

// 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
import (
"fmt"
"regabipragma.dir/tmp"
)
type S string
//go:noinline
func (s S) ff(t string) string {
return string(s) + " " + t
}
//go:noinline
//go:registerparams
func f(s,t string) string { // ERROR "Declared function f has register params"
return s + " " + t
}
func check(s string) {
if s != "Hello world!" {
fmt.Printf("FAIL, wanted 'Hello world!' but got '%s'\n", s)
}
}
func main() {
check(f("Hello", "world!")) // ERROR "Called function ...f has register params"
check(tmp.F("Hello", "world!")) // ERROR "Called function regabipragma.dir/tmp.F has register params"
check(S("Hello").ff("world!"))
check(tmp.S("Hello").FF("world!"))
}