diff --git a/src/cmd/compile/internal/ir/fmt.go b/src/cmd/compile/internal/ir/fmt.go index 6209702291..92ea160a28 100644 --- a/src/cmd/compile/internal/ir/fmt.go +++ b/src/cmd/compile/internal/ir/fmt.go @@ -216,6 +216,7 @@ var OpPrec = []int{ OTINTER: 8, OTMAP: 8, OTSTRUCT: 8, + OTYPE: 8, OINDEXMAP: 8, OINDEX: 8, OSLICE: 8, @@ -232,6 +233,7 @@ var OpPrec = []int{ ODOT: 8, OXDOT: 8, OCALLPART: 8, + OMETHEXPR: 8, OPLUS: 7, ONOT: 7, OBITNOT: 7, @@ -551,8 +553,8 @@ func exprFmt(n Node, s fmt.State, prec int) { } nprec := OpPrec[n.Op()] - if n.Op() == OTYPE && n.Sym() != nil { - nprec = 8 + if n.Op() == OTYPE && n.Type().IsPtr() { + nprec = OpPrec[ODEREF] } if prec > nprec { diff --git a/test/fixedbugs/issue15055.go b/test/fixedbugs/issue15055.go index e58047e411..33cf63aaad 100644 --- a/test/fixedbugs/issue15055.go +++ b/test/fixedbugs/issue15055.go @@ -8,10 +8,12 @@ package main func main() { type name string - _ = []byte("abc", "def", 12) // ERROR "too many arguments to conversion to \[\]byte: \(\[\]byte\)\(.abc., .def., 12\)" + _ = []byte("abc", "def", 12) // ERROR "too many arguments to conversion to \[\]byte: \[\]byte\(.abc., .def., 12\)" _ = string("a", "b", nil) // ERROR "too many arguments to conversion to string: string\(.a., .b., nil\)" - _ = []byte() // ERROR "missing argument to conversion to \[\]byte: \(\[\]byte\)\(\)" + _ = []byte() // ERROR "missing argument to conversion to \[\]byte: \[\]byte\(\)" _ = string() // ERROR "missing argument to conversion to string: string\(\)" + _ = *int() // ERROR "missing argument to conversion to int: int\(\)" + _ = (*int)() // ERROR "missing argument to conversion to \*int: \(\*int\)\(\)" _ = name("a", 1, 3.3) // ERROR "too many arguments to conversion to name: name\(.a., 1, 3.3\)" - _ = map[string]string(nil, nil) // ERROR "too many arguments to conversion to map\[string\]string: \(map\[string\]string\)\(nil, nil\)" + _ = map[string]string(nil, nil) // ERROR "too many arguments to conversion to map\[string\]string: map\[string\]string\(nil, nil\)" } diff --git a/test/fixedbugs/issue43428.go b/test/fixedbugs/issue43428.go new file mode 100644 index 0000000000..773a3f3516 --- /dev/null +++ b/test/fixedbugs/issue43428.go @@ -0,0 +1,25 @@ +// errorcheck + +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package p + +import "time" + +type T int + +func (T) Mv() {} +func (*T) Mp() {} + +var _ = []int{ + T.Mv, // ERROR "cannot use T\.Mv|incompatible type" + (*T).Mv, // ERROR "cannot use \(\*T\)\.Mv|incompatible type" + (*T).Mp, // ERROR "cannot use \(\*T\)\.Mp|incompatible type" + + time.Time.GobEncode, // ERROR "cannot use time\.Time\.GobEncode|incompatible type" + (*time.Time).GobEncode, // ERROR "cannot use \(\*time\.Time\)\.GobEncode|incompatible type" + (*time.Time).GobDecode, // ERROR "cannot use \(\*time\.Time\)\.GobDecode|incompatible type" + +}