Source file 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  // ok
    10  //go:build !ignore
    11  
    12  //go:noinline // ERROR "misplaced compiler directive"
    13  
    14  //go:noinline // ERROR "misplaced compiler directive"
    15  package main
    16  
    17  //go:build bad // ERROR "misplaced compiler directive"
    18  
    19  //go:nosplit
    20  func f1() {}
    21  
    22  //go:nosplit
    23  //go:noinline
    24  func f2() {}
    25  
    26  //go:noinline // ERROR "misplaced compiler directive"
    27  
    28  //go:noinline // ERROR "misplaced compiler directive"
    29  var x int
    30  
    31  //go:noinline // ERROR "misplaced compiler directive"
    32  const c = 1
    33  
    34  //go:noinline // ERROR "misplaced compiler directive"
    35  type T int
    36  
    37  // ok
    38  //go:notinheap
    39  type T1 int
    40  
    41  //go:notinheap // ERROR "misplaced compiler directive"
    42  type (
    43  	//go:notinheap
    44  	//go:noinline // ERROR "misplaced compiler directive"
    45  	T2  int //go:notinheap // ERROR "misplaced compiler directive"
    46  	T2b int
    47  	//go:notinheap
    48  	T2c int
    49  	//go:noinline // ERROR "misplaced compiler directive"
    50  	T3 int
    51  )
    52  
    53  //go:notinheap // ERROR "misplaced compiler directive"
    54  type (
    55  	//go:notinheap
    56  	T4 int
    57  )
    58  
    59  //go:notinheap // ERROR "misplaced compiler directive"
    60  type ()
    61  
    62  type T5 int
    63  
    64  func g() {} //go:noinline // ERROR "misplaced compiler directive"
    65  
    66  // ok: attached to f (duplicated yes, but ok)
    67  //go:noinline
    68  
    69  //go:noinline
    70  func f() {
    71  	//go:noinline // ERROR "misplaced compiler directive"
    72  	x := 1
    73  
    74  	//go:noinline // ERROR "misplaced compiler directive"
    75  	{
    76  		_ = x //go:noinline // ERROR "misplaced compiler directive"
    77  	}
    78  	//go:noinline // ERROR "misplaced compiler directive"
    79  	var y int //go:noinline // ERROR "misplaced compiler directive"
    80  	//go:noinline // ERROR "misplaced compiler directive"
    81  	_ = y
    82  
    83  	//go:noinline // ERROR "misplaced compiler directive"
    84  	const c = 1
    85  
    86  	//go:noinline // ERROR "misplaced compiler directive"
    87  	_ = func() {}
    88  
    89  	//go:noinline // ERROR "misplaced compiler directive"
    90  	// ok:
    91  	//go:notinheap
    92  	type T int
    93  }
    94  
    95  // someday there might be a directive that can apply to type aliases, but go:notinheap doesn't.
    96  //go:notinheap // ERROR "misplaced compiler directive"
    97  type T6 = int
    98  
    99  // EOF
   100  //go:noinline // ERROR "misplaced compiler directive"
   101  
   102  //go:build bad // ERROR "misplaced compiler directive"
   103  

View as plain text