aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorDan Scales <danscales@google.com>2021-09-19 17:17:31 -0700
committerDan Scales <danscales@google.com>2021-09-20 17:44:56 +0000
commitb6dddaccd7e8c9c6768943918d03f455385294b9 (patch)
tree19972f9126f606ffc25c1619ca8f9900c8025ea0 /test
parent9e60c371473ff15eb4b13981721b29f62e1d862c (diff)
downloadgo-b6dddaccd7e8c9c6768943918d03f455385294b9.tar.gz
go-b6dddaccd7e8c9c6768943918d03f455385294b9.zip
cmd/compile: fix transform.AssignOp to deal with tricky case
When going to dictionary formats derived from the function instantiations, I had broken out noder.Assignop() to deal specially with shape types, but didn't quite get the tricky case right. We still need to allow conversion between shape types, but if the destination is an interface, we need to use CONVIFACE rather than CONVNOP. Fixes #48453. Change-Id: I8c4b39c2e628172ac34f493f1dd682cbac1e55ae Reviewed-on: https://go-review.googlesource.com/c/go/+/350949 Trust: Dan Scales <danscales@google.com> Run-TryBot: Dan Scales <danscales@google.com> Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'test')
-rw-r--r--test/typeparam/issue48453.go21
1 files changed, 21 insertions, 0 deletions
diff --git a/test/typeparam/issue48453.go b/test/typeparam/issue48453.go
new file mode 100644
index 0000000000..0f751d38ed
--- /dev/null
+++ b/test/typeparam/issue48453.go
@@ -0,0 +1,21 @@
+// run -gcflags=-G=3
+
+// Copyright 2021 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
+
+//go:noinline
+func CopyMap[M interface{ ~map[K]V }, K comparable, V any](m M) M {
+ out := make(M, len(m))
+ for k, v := range m {
+ out[k] = v
+ }
+ return out
+}
+
+func main() {
+ var m map[*string]int
+ CopyMap(m)
+}