]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: checkwidth T when constructing *T
authorJosh Bleecher Snyder <josharian@gmail.com>
Sat, 29 Apr 2017 21:27:55 +0000 (14:27 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Sun, 30 Apr 2017 00:45:42 +0000 (00:45 +0000)
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>
src/cmd/compile/internal/gc/typecheck.go
test/fixedbugs/issue20174.go [new file with mode: 0644]

index 69d07d583fdafb370ae8ccf37474f7a66f3eeb8c..e66ce5dc985f88b68b28eba1c29346c16ced0b70 100644 (file)
@@ -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
                }
diff --git a/test/fixedbugs/issue20174.go b/test/fixedbugs/issue20174.go
new file mode 100644 (file)
index 0000000..a9c1fd8
--- /dev/null
@@ -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):
+       }
+}