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:
Cherry Zhang 2018-07-05 20:31:33 -04:00
parent 5f256dc8e6
commit c801232525
3 changed files with 28 additions and 4 deletions

View 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

View 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

View 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) {}