mirror of
https://github.com/golang/go
synced 2024-09-04 23:44:16 +00:00
cmd/compile: checkwidth T when constructing *T
Without this, T can sneak through to the backend with its width unknown. Fixes #20174 Change-Id: I9b21e0e2641f75e360cc5e45dcb4eefe8255b675 Reviewed-on: https://go-review.googlesource.com/42175 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
320aabbada
commit
dfeecda91d
|
@ -498,6 +498,7 @@ OpSwitch:
|
|||
ok |= Etype
|
||||
n.Op = OTYPE
|
||||
n.Type = types.NewPtr(l.Type)
|
||||
checkwidth(l.Type) // ensure this gets dowidth'd for the backend
|
||||
n.Left = nil
|
||||
break OpSwitch
|
||||
}
|
||||
|
|
18
test/fixedbugs/issue20174.go
Normal file
18
test/fixedbugs/issue20174.go
Normal file
|
@ -0,0 +1,18 @@
|
|||
// compile -c=2
|
||||
|
||||
// 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.
|
||||
|
||||
// Issue 20174: failure to typecheck contents of *T in the frontend.
|
||||
|
||||
package p
|
||||
|
||||
func f() {
|
||||
_ = (*interface{})(nil) // interface{} here used to not have its width calculated going into backend
|
||||
select {
|
||||
case _ = <-make(chan interface {
|
||||
M()
|
||||
}, 1):
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue