Commit dfeecda9 authored by Josh Bleecher Snyder's avatar Josh Bleecher Snyder

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: default avatarBrad Fitzpatrick <bradfitz@golang.org>
parent 320aabba
...@@ -498,6 +498,7 @@ OpSwitch: ...@@ -498,6 +498,7 @@ OpSwitch:
ok |= Etype ok |= Etype
n.Op = OTYPE n.Op = OTYPE
n.Type = types.NewPtr(l.Type) n.Type = types.NewPtr(l.Type)
checkwidth(l.Type) // ensure this gets dowidth'd for the backend
n.Left = nil n.Left = nil
break OpSwitch break OpSwitch
} }
......
// 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):
}
}
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