Commit ae37f5a3 authored by Robert Griesemer's avatar Robert Griesemer

cmd/compile: fix error message for &T{} literal mismatch

See the change and comment in typecheck.go for a detailed explanation.

Fixes #26855.

Change-Id: I7867f948490fc0873b1bd849048cda6acbc36e76
Reviewed-on: https://go-review.googlesource.com/136395Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
parent 9c2e5f29
......@@ -2923,6 +2923,14 @@ func typecheckcomplit(n *Node) *Node {
// Save original node (including n.Right)
norig := n.copy()
// If n.Orig points to itself, norig.Orig must point to itself, too.
// Otherwise, because n.Op is changed below, n.Orig's Op is changed
// as well because it (and the copy norig) still point to the original
// node n. This caused the wrong complit Op to be used when printing
// error messages (issue #26855).
if n.Orig == n {
norig.Orig = norig
}
setlineno(n.Right)
n.Right = typecheck(n.Right, Etype|Ecomplit)
......
// errorcheck
// Copyright 2012 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.
// Verify that we get the correct (T vs &T) literal specification
// in the error message.
package p
type S struct {
f T
}
type P struct {
f *T
}
type T struct{}
var _ = S{
f: &T{}, // ERROR "cannot use &T literal"
}
var _ = P{
f: T{}, // ERROR "cannot use T literal"
}
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