From: Keith Randall Date: Wed, 14 Apr 2021 23:18:58 +0000 (-0700) Subject: cmd/compile: propagate pragmas from generic function to stenciled implementation X-Git-Tag: go1.17beta1~636 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=083a26c7d2faa8194782856c6f4efce47703df01;p=gostls13.git 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 Run-TryBot: Keith Randall TryBot-Result: Go Bot Reviewed-by: Dan Scales --- diff --git a/src/cmd/compile/internal/noder/stencil.go b/src/cmd/compile/internal/noder/stencil.go index 2745016545..53ac617d12 100644 --- a/src/cmd/compile/internal/noder/stencil.go +++ b/src/cmd/compile/internal/noder/stencil.go @@ -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 diff --git a/test/typeparam/pragma.go b/test/typeparam/pragma.go new file mode 100644 index 0000000000..6743e24ff3 --- /dev/null +++ b/test/typeparam/pragma.go @@ -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)) +}