]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: make sure alg functions are generated when we call them
authorCherry Zhang <cherryyz@google.com>
Fri, 6 Jul 2018 00:31:33 +0000 (20:31 -0400)
committerCherry Zhang <cherryyz@google.com>
Tue, 10 Jul 2018 01:20:45 +0000 (01:20 +0000)
When DWARF is disabled, some alg functions were not generated.
Make sure they are generated when we about to generate calls to
them.

Fixes #23546.

Change-Id: Iecfa0eea830e42ee92e55268167cefb1540980b2
Reviewed-on: https://go-review.googlesource.com/122403
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
src/cmd/compile/internal/gc/reflect.go
test/fixedbugs/issue23545.go
test/fixedbugs/issue23546.go [new file with mode: 0644]

index cbd65c2934a0666ccc87c19ee11bf8a5013c7f50..b9124b63178a0e080c2fe8f5c21d2b2aa0dea999 100644 (file)
@@ -958,6 +958,12 @@ func typesymprefix(prefix string, t *types.Type) *types.Sym {
        p := prefix + "." + t.ShortString()
        s := typeLookup(p)
 
+       // This function is for looking up type-related generated functions
+       // (e.g. eq and hash). Make sure they are indeed generated.
+       signatsetmu.Lock()
+       addsignat(t)
+       signatsetmu.Unlock()
+
        //print("algsym: %s -> %+S\n", p, s);
 
        return s
index 24485c11c5528aafdf4524baff14bdb45949f54e..d97f64af5a0ed4810376deabf5a9605492bc6dbf 100644 (file)
@@ -4,12 +4,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build gccgo
-
 // Issue 23545: gccgo didn't lower array comparison to
 // proper equality function in some case.
-// TODO: build only on gccgo for now, as it hits issue
-// #23546.
 
 package main
 
diff --git a/test/fixedbugs/issue23546.go b/test/fixedbugs/issue23546.go
new file mode 100644 (file)
index 0000000..818f0cd
--- /dev/null
@@ -0,0 +1,22 @@
+// run
+
+// Copyright 2018 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 23546: type..eq function not generated when
+// DWARF is disabled.
+
+package main
+
+func main() {
+       use(f() == f())
+}
+
+func f() [2]interface{} {
+       var out [2]interface{}
+       return out
+}
+
+//go:noinline
+func use(bool) {}