mirror of
https://github.com/golang/go
synced 2024-11-26 14:26:51 -07:00
cmd/compile: propagate pragmas from generic function to stenciled implementation
Change-Id: I28a1910890659aaa449ffd2a847cd4ced5a8600d Reviewed-on: https://go-review.googlesource.com/c/go/+/310211 Trust: Keith Randall <khr@golang.org> Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Dan Scales <danscales@google.com>
This commit is contained in:
parent
bf634c76b2
commit
083a26c7d2
@ -270,6 +270,7 @@ func (g *irgen) genericSubst(newsym *types.Sym, nameNode *ir.Name, targs []ir.No
|
||||
gf := nameNode.Func
|
||||
// Pos of the instantiated function is same as the generic function
|
||||
newf := ir.NewFunc(gf.Pos())
|
||||
newf.Pragma = gf.Pragma // copy over pragmas from generic function to stenciled implementation.
|
||||
newf.Nname = ir.NewNameAt(gf.Pos(), newsym)
|
||||
newf.Nname.Func = newf
|
||||
newf.Nname.Defn = newf
|
||||
|
19
test/typeparam/pragma.go
Normal file
19
test/typeparam/pragma.go
Normal file
@ -0,0 +1,19 @@
|
||||
// errorcheck -0 -m -G=3
|
||||
|
||||
// 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.
|
||||
|
||||
// Make sure the go:noinline pragma makes it from a
|
||||
// generic function to any of its stenciled instances.
|
||||
|
||||
package main
|
||||
|
||||
//go:noinline
|
||||
func f[T any](x T) T {
|
||||
return x
|
||||
}
|
||||
|
||||
func main() { // ERROR "can inline main"
|
||||
println(f(5))
|
||||
}
|
Loading…
Reference in New Issue
Block a user