]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: fix ICE in reporting of invalid recursive types
authorMatthew Dempsky <mdempsky@google.com>
Mon, 19 Oct 2020 21:14:40 +0000 (14:14 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Mon, 19 Oct 2020 21:30:43 +0000 (21:30 +0000)
asNode(t.Nod).Name.Param will be nil for builtin types (i.e., the
universal predeclared types and unsafe.Pointer). These types can't be
part of a cycle anyway, so we can just skip them.

Fixes #42075.

Change-Id: Ic7a44de65c6bfd16936545dee25e36de8850acf3
Reviewed-on: https://go-review.googlesource.com/c/go/+/263717
Trust: Matthew Dempsky <mdempsky@google.com>
Trust: Daniel Martí <mvdan@mvdan.cc>
Reviewed-by: Daniel Martí <mvdan@mvdan.cc>
src/cmd/compile/internal/gc/align.go
test/fixedbugs/issue42075.go [new file with mode: 0644]

index 5af403afa362210ffcd921358b980a24e6580569..4bc454df224fab3b3f8d2a692d5a2ba6accdec39 100644 (file)
@@ -199,7 +199,7 @@ func findTypeLoop(t *types.Type, path *[]*types.Type) bool {
                }
 
                *path = append(*path, t)
-               if findTypeLoop(asNode(t.Nod).Name.Param.Ntype.Type, path) {
+               if p := asNode(t.Nod).Name.Param; p != nil && findTypeLoop(p.Ntype.Type, path) {
                        return true
                }
                *path = (*path)[:len(*path)-1]
diff --git a/test/fixedbugs/issue42075.go b/test/fixedbugs/issue42075.go
new file mode 100644 (file)
index 0000000..af85fb2
--- /dev/null
@@ -0,0 +1,16 @@
+// errorcheck
+
+// Copyright 2020 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.
+
+package p
+
+import "unsafe"
+
+type T struct { // ERROR "recursive type"
+       x int
+       p unsafe.Pointer
+
+       f T
+}