Commit 3218b1aa authored by Alberto Donizetti's avatar Alberto Donizetti Committed by Robert Griesemer

cmd/compile: only print one error for bad-type literal in assignment

Fixes #8438

Change-Id: Ib43cdcdc962a8d9e14faf984bc859a92ba1eb517
Reviewed-on: https://go-review.googlesource.com/40531Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
parent 405a280d
......@@ -982,7 +982,9 @@ func assignconvfn(n *Node, t *types.Type, context func() string) *Node {
var why string
op := assignop(n.Type, t, &why)
if op == 0 {
yyerror("cannot use %L as type %v in %s%s", n, t, context(), why)
if !old.Diag() {
yyerror("cannot use %L as type %v in %s%s", n, t, context(), why)
}
op = OCONV
}
......
// errorcheck
// Copyright 2017 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.
// Check that we don't print duplicate errors for string ->
// array-literal conversion
package main
func main() {
_ = []byte{"foo"} // ERROR "cannot convert"
_ = []int{"foo"} // ERROR "cannot convert"
_ = []rune{"foo"} // ERROR "cannot convert"
_ = []string{"foo"} // OK
}
......@@ -53,7 +53,7 @@ func main() {
i2 = I2(i) // ERROR "invalid|missing N method"
e = E(t) // ok
t = T(e) // ERROR "need explicit|need type assertion|incompatible" "as type [*]T"
t = T(e) // ERROR "need explicit|need type assertion|incompatible"
}
type M interface {
......@@ -81,7 +81,6 @@ var m2 M = jj // ERROR "incompatible|wrong type for M method"
var m3 = M(ii) // ERROR "invalid|missing"
var m4 = M(jj) // ERROR "invalid|wrong type for M method"
type B1 interface {
_() // ERROR "methods must have a unique non-blank name"
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment