]> Cypherpunks.ru repositories - gostls13.git/commitdiff
cmd/compile: fix ICE with parenthesized builtin calls
authorCuong Manh Le <cuong.manhle.vn@gmail.com>
Sat, 7 Oct 2023 15:54:50 +0000 (22:54 +0700)
committerGopher Robot <gobot@golang.org>
Sun, 8 Oct 2023 23:15:25 +0000 (23:15 +0000)
CL 419456 starts using lookupObj to find types2.Object associated with
builtin functions. However, the new code does not un-parenthesized the
callee expression, causing an ICE because of nil obj returned.

Un-parenthesizing the callee expression fixes the problem.

Fixes #63436

Change-Id: Iebb4fbc08575e7d0b1dbd026c98e8f949ca16460
Reviewed-on: https://go-review.googlesource.com/c/go/+/533476
Auto-Submit: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Reviewed-by: Keith Randall <khr@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/noder/writer.go
test/fixedbugs/issue63436.go [new file with mode: 0644]

index 6d7bd4c782183e42fbccb7d8903ad8fd47cc8670..08da36eccbb595a8fbd1fefad4d0617d1befe4bb 100644 (file)
@@ -1909,7 +1909,7 @@ func (w *writer) expr(expr syntax.Expr) {
 
                var rtype types2.Type
                if tv.IsBuiltin() {
-                       switch obj, _ := lookupObj(w.p, expr.Fun); obj.Name() {
+                       switch obj, _ := lookupObj(w.p, syntax.Unparen(expr.Fun)); obj.Name() {
                        case "make":
                                assert(len(expr.ArgList) >= 1)
                                assert(!expr.HasDots)
diff --git a/test/fixedbugs/issue63436.go b/test/fixedbugs/issue63436.go
new file mode 100644 (file)
index 0000000..bbd34a5
--- /dev/null
@@ -0,0 +1,9 @@
+// compile
+
+// Copyright 2023 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
+
+var _ = (new)(int)