From 33ac854481c49632a4b924b184f83e068014b486 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Mon, 11 Feb 2019 14:27:43 -0800 Subject: [PATCH] cmd/compile: do not export float or complex constants with -asmhdr The -asmhdr flag is used to generate header files for assembly code such that that code has access to compile-time constants. During the build these constants end up in the (ephemeral) file go_asm.h. For historical reasons, floating-point and complex constants are printed with a 'p' exponent but with decimal mantissa; also, because of the compiler-internal precision of 512 bits, the mantissae are quite large (and conversions are comparatively slow). With the changes to the new Go 2 number literals, the respective upcoming changes to text/scanner (which in turn is used by the assembler) will make text/scanner newly accept hexadecimal floats; but also decimal floats using the incorrect 'p' exponent and report an error in that case. As a consequence, the assembler will report an error when trying to parse the before-mentioned decimal floating-point values which are using 'p' exponents. Since these constants are never needed in the assembly code, do not emit them in the first place. Change-Id: I06c7c96b04e8d062441120107992472f87a651b2 Reviewed-on: https://go-review.googlesource.com/c/161904 Run-TryBot: Robert Griesemer TryBot-Result: Gobot Gobot Reviewed-by: Ian Lance Taylor --- src/cmd/compile/internal/gc/export.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/cmd/compile/internal/gc/export.go b/src/cmd/compile/internal/gc/export.go index 791fc063b7..31e6ab5b6d 100644 --- a/src/cmd/compile/internal/gc/export.go +++ b/src/cmd/compile/internal/gc/export.go @@ -209,6 +209,10 @@ func dumpasmhdr() { } switch n.Op { case OLITERAL: + t := n.Val().Ctype() + if t == CTFLT || t == CTCPLX { + break + } fmt.Fprintf(b, "#define const_%s %#v\n", n.Sym.Name, n.Val()) case OTYPE: -- 2.50.0