From: Cherry Zhang Date: Fri, 6 Jul 2018 00:31:33 +0000 (-0400) Subject: cmd/compile: make sure alg functions are generated when we call them X-Git-Tag: go1.11beta2~167 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=c801232525575a6b473cdfd446de30905a6d15e3;p=gostls13.git 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 TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick Reviewed-by: Keith Randall Reviewed-by: Josh Bleecher Snyder --- diff --git a/src/cmd/compile/internal/gc/reflect.go b/src/cmd/compile/internal/gc/reflect.go index cbd65c2934..b9124b6317 100644 --- a/src/cmd/compile/internal/gc/reflect.go +++ b/src/cmd/compile/internal/gc/reflect.go @@ -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 diff --git a/test/fixedbugs/issue23545.go b/test/fixedbugs/issue23545.go index 24485c11c5..d97f64af5a 100644 --- a/test/fixedbugs/issue23545.go +++ b/test/fixedbugs/issue23545.go @@ -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 index 0000000000..818f0cd6bf --- /dev/null +++ b/test/fixedbugs/issue23546.go @@ -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) {}