]> Cypherpunks.ru repositories - gostls13.git/blob - test/directive.go
[dev.boringcrypto] all: merge master into dev.boringcrypto
[gostls13.git] / test / directive.go
1 // errorcheck
2
3 // Copyright 2020 The Go Authors. All rights reserved.
4 // Use of this source code is governed by a BSD-style
5 // license that can be found in the LICENSE file.
6
7 // Verify that misplaced directives are diagnosed.
8
9 //go:noinline // ERROR "misplaced compiler directive"
10
11 //go:noinline // ERROR "misplaced compiler directive"
12 package main
13
14 //go:nosplit
15 func f1() {}
16
17 //go:nosplit
18 //go:noinline
19 func f2() {}
20
21 //go:noinline // ERROR "misplaced compiler directive"
22
23 //go:noinline // ERROR "misplaced compiler directive"
24 var x int
25
26 //go:noinline // ERROR "misplaced compiler directive"
27 const c = 1
28
29 //go:noinline // ERROR "misplaced compiler directive"
30 type T int
31
32 // ok
33 //go:notinheap
34 type T1 int
35
36 //go:notinheap // ERROR "misplaced compiler directive"
37 type (
38         //go:notinheap
39         //go:noinline // ERROR "misplaced compiler directive"
40         T2  int //go:notinheap // ERROR "misplaced compiler directive"
41         T2b int
42         //go:notinheap
43         T2c int
44         //go:noinline // ERROR "misplaced compiler directive"
45         T3 int
46 )
47
48 //go:notinheap // ERROR "misplaced compiler directive"
49 type (
50         //go:notinheap
51         T4 int
52 )
53
54 //go:notinheap // ERROR "misplaced compiler directive"
55 type ()
56
57 type T5 int
58
59 func g() {} //go:noinline // ERROR "misplaced compiler directive"
60
61 // ok: attached to f (duplicated yes, but ok)
62 //go:noinline
63
64 //go:noinline
65 func f() {
66         //go:noinline // ERROR "misplaced compiler directive"
67         x := 1
68
69         //go:noinline // ERROR "misplaced compiler directive"
70         {
71                 _ = x //go:noinline // ERROR "misplaced compiler directive"
72         }
73         //go:noinline // ERROR "misplaced compiler directive"
74         var y int //go:noinline // ERROR "misplaced compiler directive"
75         //go:noinline // ERROR "misplaced compiler directive"
76         _ = y
77
78         //go:noinline // ERROR "misplaced compiler directive"
79         const c = 1
80
81         //go:noinline // ERROR "misplaced compiler directive"
82         _ = func() {}
83
84         //go:noinline // ERROR "misplaced compiler directive"
85         // ok:
86         //go:notinheap
87         type T int
88 }
89
90 // someday there might be a directive that can apply to type aliases, but go:notinheap doesn't.
91 //go:notinheap // ERROR "misplaced compiler directive"
92 type T6 = int
93
94 // EOF
95 //go:noinline // ERROR "misplaced compiler directive"