mirror of
https://github.com/golang/go
synced 2024-11-05 18:36:08 +00:00
cmd/compile: make sure alg functions are generated when we call them
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>
This commit is contained in:
parent
5f256dc8e6
commit
c801232525
3 changed files with 28 additions and 4 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
22
test/fixedbugs/issue23546.go
Normal file
22
test/fixedbugs/issue23546.go
Normal file
|
@ -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) {}
|
Loading…
Reference in a new issue