1 // Copyright 2013 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 package errors
6
7 // Testing precise operand formatting in error messages
8 // (matching messages are regular expressions, hence the \'s).
9 func f(x int, m map[string]int) {
10 // no values
11 _ = f /* ERROR f\(0, m\) \(no value\) used as value */ (0, m)
12
13 // built-ins
14 _ = println // ERROR println \(built-in\) must be called
15
16 // types
17 _ = complex128 // ERROR complex128 \(type\) is not an expression
18
19 // constants
20 const c1 = 991
21 const c2 float32 = 0.5
22 const c3 = "foo"
23 0 // ERROR 0 \(untyped int constant\) is not used
24 0.5 // ERROR 0.5 \(untyped float constant\) is not used
25 "foo" // ERROR "foo" \(untyped string constant\) is not used
26 c1 // ERROR c1 \(untyped int constant 991\) is not used
27 c2 // ERROR c2 \(constant 0.5 of type float32\) is not used
28 c1 /* ERROR c1 \+ c2 \(constant 991.5 of type float32\) is not used */ + c2
29 c3 // ERROR c3 \(untyped string constant "foo"\) is not used
30
31 // variables
32 x // ERROR x \(variable of type int\) is not used
33
34 // values
35 nil // ERROR nil is not used
36 ( /* ERROR \(\*int\)\(nil\) \(value of type \*int\) is not used */ *int)(nil)
37 x /* ERROR x != x \(untyped bool value\) is not used */ != x
38 x /* ERROR x \+ x \(value of type int\) is not used */ + x
39
40 // value, ok's
41 const s = "foo"
42 m /* ERROR m\[s\] \(map index expression of type int\) is not used */ [s]
43 }
44
45 // Valid ERROR comments can have a variety of forms.
46 func _() {
47 0 /* ERROR "0 .* is not used" */
48 0 /* ERROR 0 .* is not used */
49 0 // ERROR "0 .* is not used"
50 0 // ERROR 0 .* is not used
51 }
52
53 // Don't report spurious errors as a consequence of earlier errors.
54 // Add more tests as needed.
55 func _() {
56 if err := foo /* ERROR undeclared */ (); err != nil /* no error here */ {}
57 }
58
59 // Use unqualified names for package-local objects.
60 type T struct{}
61 var _ int = T /* ERROR value of type T */ {} // use T in error message rather then errors.T
62
63 // Don't report errors containing "invalid type" (issue #24182).
64 func _(x *missing /* ERROR undeclared name: missing */ ) {
65 x.m() // there shouldn't be an error here referring to *invalid type
66 }
67
View as plain text