From 8b9b365493220a7bfd87fd3c27301e43baa35a0d Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Sun, 9 Jan 2022 20:20:43 -0800 Subject: [PATCH] cmd/compile: use exact constant in go_asm.h Fixes #50523 Change-Id: Idab1b44d106250e9301d90ee6571f0ea51242dd9 Reviewed-on: https://go-review.googlesource.com/c/go/+/377074 Trust: Ian Lance Taylor Run-TryBot: Ian Lance Taylor Reviewed-by: Liz Fong-Jones Reviewed-by: Emmanuel Odeke Trust: Emmanuel Odeke TryBot-Result: Gopher Robot Reviewed-by: Robert Griesemer Reviewed-by: Robert Findley --- src/cmd/compile/internal/gc/export.go | 2 +- test/asmhdr.dir/main.go | 12 +++++++++--- test/asmhdr.dir/main.s | 3 +++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/cmd/compile/internal/gc/export.go b/src/cmd/compile/internal/gc/export.go index eed438705a..c9acfc1710 100644 --- a/src/cmd/compile/internal/gc/export.go +++ b/src/cmd/compile/internal/gc/export.go @@ -31,7 +31,7 @@ func dumpasmhdr() { if t == constant.Float || t == constant.Complex { break } - fmt.Fprintf(b, "#define const_%s %v\n", n.Sym().Name, n.Val()) + fmt.Fprintf(b, "#define const_%s %v\n", n.Sym().Name, n.Val().ExactString()) case ir.OTYPE: t := n.Type() diff --git a/test/asmhdr.dir/main.go b/test/asmhdr.dir/main.go index 808b5de7bb..4e1813d2ed 100644 --- a/test/asmhdr.dir/main.go +++ b/test/asmhdr.dir/main.go @@ -16,12 +16,15 @@ const ( bigInt = 0xffffffffffffffff stringVal = "test" + + longStringVal = "this_is_a_string_constant_longer_than_seventy_characters_which_used_to_fail_see_issue_50253" ) var ( - smallIntAsm int64 - bigIntAsm uint64 - stringAsm [len(stringVal)]byte + smallIntAsm int64 + bigIntAsm uint64 + stringAsm [len(stringVal)]byte + longStringAsm [len(longStringVal)]byte ) type typ struct { @@ -46,6 +49,9 @@ func main() { if stringVal != string(stringAsm[:]) { println("stringVal", stringVal, "!=", string(stringAsm[:])) } + if longStringVal != string(longStringAsm[:]) { + println("longStringVal", longStringVal, "!=", string(longStringAsm[:])) + } // We also include boolean consts in go_asm.h, but they're // defined to be "true" or "false", and it's not clear how to diff --git a/test/asmhdr.dir/main.s b/test/asmhdr.dir/main.s index 7e2d8e7abd..bc2aa99b0b 100644 --- a/test/asmhdr.dir/main.s +++ b/test/asmhdr.dir/main.s @@ -14,6 +14,9 @@ GLOBL ·bigIntAsm(SB),RODATA,$8 DATA ·stringAsm(SB)/4, $const_stringVal GLOBL ·stringAsm(SB),RODATA,$4 +DATA ·longStringAsm(SB)/91, $const_longStringVal +GLOBL ·longStringAsm(SB),RODATA,$91 + DATA ·typSize(SB)/8, $typ__size GLOBL ·typSize(SB),RODATA,$8