File tree Expand file tree Collapse file tree 3 files changed +35
-2
lines changed Expand file tree Collapse file tree 3 files changed +35
-2
lines changed Original file line number Diff line number Diff line change @@ -250,10 +250,14 @@ func (c *compilerContext) getFunctionInfo(f *ssa.Function) functionInfo {
250
250
// parsePragmas is used by getFunctionInfo to parse function pragmas such as
251
251
// //export or //go:noinline.
252
252
func (c * compilerContext ) parsePragmas (info * functionInfo , f * ssa.Function ) {
253
- if f .Syntax () == nil {
253
+ syntax := f .Syntax ()
254
+ if f .Origin () != nil {
255
+ syntax = f .Origin ().Syntax ()
256
+ }
257
+ if syntax == nil {
254
258
return
255
259
}
256
- if decl , ok := f . Syntax () .(* ast.FuncDecl ); ok && decl .Doc != nil {
260
+ if decl , ok := syntax .(* ast.FuncDecl ); ok && decl .Doc != nil {
257
261
for _ , comment := range decl .Doc .List {
258
262
text := comment .Text
259
263
if strings .HasPrefix (text , "//export " ) {
Original file line number Diff line number Diff line change @@ -48,6 +48,22 @@ func inlineFunc() {
48
48
func noinlineFunc () {
49
49
}
50
50
51
+ type Int interface {
52
+ int8 | int16
53
+ }
54
+
55
+ // Same for generic functions (but the compiler may miss the pragma due to it
56
+ // being generic).
57
+ //
58
+ //go:noinline
59
+ func noinlineGenericFunc [T Int ]() {
60
+ }
61
+
62
+ func useGeneric () {
63
+ // Make sure the generic function above is instantiated.
64
+ noinlineGenericFunc [int8 ]()
65
+ }
66
+
51
67
// This function should have the specified section.
52
68
//
53
69
//go:section .special_function_section
Original file line number Diff line number Diff line change @@ -48,6 +48,19 @@ entry:
48
48
ret void
49
49
}
50
50
51
+ ; Function Attrs: nounwind
52
+ define hidden void @main.useGeneric (ptr %context ) unnamed_addr #2 {
53
+ entry:
54
+ call void @"main.noinlineGenericFunc[int8]" (ptr undef )
55
+ ret void
56
+ }
57
+
58
+ ; Function Attrs: noinline nounwind
59
+ define linkonce_odr hidden void @"main.noinlineGenericFunc[int8]" (ptr %context ) unnamed_addr #5 {
60
+ entry:
61
+ ret void
62
+ }
63
+
51
64
; Function Attrs: noinline nounwind
52
65
define hidden void @main.functionInSection (ptr %context ) unnamed_addr #5 section ".special_function_section" {
53
66
entry:
You can’t perform that action at this time.
0 commit comments