1// errorcheck -0 -m -l
2
3// Copyright 2019 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
7package p
8
9func f(...*int) {}
10
11func g() {
12	defer f()
13	defer f(new(int))           // ERROR "... argument does not escape$" "new\(int\) does not escape$"
14	defer f(new(int), new(int)) // ERROR "... argument does not escape$" "new\(int\) does not escape$"
15
16	defer f(nil...)
17	defer f([]*int{}...)                   // ERROR "\[\]\*int{} does not escape$"
18	defer f([]*int{new(int)}...)           // ERROR "\[\]\*int{...} does not escape$" "new\(int\) does not escape$"
19	defer f([]*int{new(int), new(int)}...) // ERROR "\[\]\*int{...} does not escape$" "new\(int\) does not escape$"
20
21	go f()
22	go f(new(int))           // ERROR "... argument does not escape$" "new\(int\) does not escape$"
23	go f(new(int), new(int)) // ERROR "... argument does not escape$" "new\(int\) does not escape$"
24
25	go f(nil...)
26	go f([]*int{}...)                   // ERROR "\[\]\*int{} does not escape$"
27	go f([]*int{new(int)}...)           // ERROR "\[\]\*int{...} does not escape$" "new\(int\) does not escape$"
28	go f([]*int{new(int), new(int)}...) // ERROR "\[\]\*int{...} does not escape$" "new\(int\) does not escape$"
29
30	for {
31		defer f()
32		defer f(new(int))           // ERROR "... argument does not escape$" "new\(int\) does not escape$"
33		defer f(new(int), new(int)) // ERROR "... argument does not escape$" "new\(int\) does not escape$"
34
35		defer f(nil...)
36		defer f([]*int{}...)                   // ERROR "\[\]\*int{} does not escape$"
37		defer f([]*int{new(int)}...)           // ERROR "\[\]\*int{...} does not escape$" "new\(int\) does not escape$"
38		defer f([]*int{new(int), new(int)}...) // ERROR "\[\]\*int{...} does not escape$" "new\(int\) does not escape$"
39
40		go f()
41		go f(new(int))           // ERROR "... argument does not escape$" "new\(int\) does not escape$"
42		go f(new(int), new(int)) // ERROR "... argument does not escape$" "new\(int\) does not escape$"
43
44		go f(nil...)
45		go f([]*int{}...)                   // ERROR "\[\]\*int{} does not escape$"
46		go f([]*int{new(int)}...)           // ERROR "\[\]\*int{...} does not escape$" "new\(int\) does not escape$"
47		go f([]*int{new(int), new(int)}...) // ERROR "\[\]\*int{...} does not escape$" "new\(int\) does not escape$"
48	}
49}
50