mirror of
https://github.com/golang/go
synced 2024-11-08 18:46:16 -07:00
861707a8c8
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>
37 lines
834 B
Go
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!"))
|
|
}
|