]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: mark pointer to noalg type as noalg
authorzuojunwei.1024 <zuojunwei.1024@bytedance.com>
Tue, 27 Feb 2024 11:14:00 +0000 (19:14 +0800)
committerGopher Robot <gobot@golang.org>
Wed, 28 Feb 2024 05:32:14 +0000 (05:32 +0000)
When the compiler writes PtrToThis field of noalg type, it generates
its pointer type. Mark them as noalg to prevent put them in typelinks.

Fixes #65957

Change-Id: Icbc3b18bc866f9138c7648e42dd500a80326f72b
Reviewed-on: https://go-review.googlesource.com/c/go/+/567335
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Auto-Submit: Keith Randall <khr@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Keith Randall <khr@google.com>
src/cmd/compile/internal/types/type.go
test/fixedbugs/issue65957.dir/a.go [new file with mode: 0644]
test/fixedbugs/issue65957.dir/main.go [new file with mode: 0644]
test/fixedbugs/issue65957.go [new file with mode: 0644]

index 2777b4f007318b2104034aed0954d6228a0ddb23..c2b0ca3a4458c274754f211e7e61ea7b39775983 100644 (file)
@@ -657,6 +657,9 @@ func NewPtr(elem *Type) *Type {
        if elem.HasShape() {
                t.SetHasShape(true)
        }
+       if elem.Noalg() {
+               t.SetNoalg(true)
+       }
        return t
 }
 
diff --git a/test/fixedbugs/issue65957.dir/a.go b/test/fixedbugs/issue65957.dir/a.go
new file mode 100644 (file)
index 0000000..284ec4a
--- /dev/null
@@ -0,0 +1,12 @@
+// Copyright 2024 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 a
+
+var s any
+
+//go:noinline
+func F() {
+       s = new([4]int32)
+}
diff --git a/test/fixedbugs/issue65957.dir/main.go b/test/fixedbugs/issue65957.dir/main.go
new file mode 100644 (file)
index 0000000..89b8a28
--- /dev/null
@@ -0,0 +1,19 @@
+// Copyright 2024 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 main
+
+import (
+       "./a"
+       "reflect"
+)
+
+var s = []rune{0, 1, 2, 3}
+
+func main() {
+       m := map[any]int{}
+       k := reflect.New(reflect.ArrayOf(4, reflect.TypeOf(int32(0)))).Elem().Interface()
+       m[k] = 1
+       a.F()
+}
diff --git a/test/fixedbugs/issue65957.go b/test/fixedbugs/issue65957.go
new file mode 100644 (file)
index 0000000..48e4d34
--- /dev/null
@@ -0,0 +1,7 @@
+// rundir
+
+// Copyright 2024 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 ignored