]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: do not export float or complex constants with -asmhdr
authorRobert Griesemer <gri@golang.org>
Mon, 11 Feb 2019 22:27:43 +0000 (14:27 -0800)
committerRobert Griesemer <gri@golang.org>
Mon, 11 Feb 2019 23:25:55 +0000 (23:25 +0000)
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 <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/cmd/compile/internal/gc/export.go

index 791fc063b7fce523dae828768f90166417f5f399..31e6ab5b6dfd3cef0ea6eb1d978a27d12f2e2c54 100644 (file)
@@ -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: