Go patch committed: Work around warning to fix bootstrap

Message ID CAOyqgcVCZ-vNp=xTz27rY_BuVbuK2hAPG+KuyX8rXHCrXyaZvg@mail.gmail.com
State Committed
Commit ed712cfe2e826cd846705defb1f6ae391baecb3d
Headers
Series Go patch committed: Work around warning to fix bootstrap |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gcc_build--master-aarch64 fail Patch failed to apply
linaro-tcwg-bot/tcwg_gcc_build--master-arm fail Patch failed to apply

Commit Message

Ian Lance Taylor Nov. 29, 2024, 9:02 p.m. UTC
  This patch to the Go frontend increases the size of a temporary buffer
to avoid a new warning.  The warning was breaking bootstrapping with
Go.

GCC has a new -Wformat-truncation warning that triggers on some Go
frontend code:

../../gcc/go/gofrontend/go-encode-id.cc: In function 'std::string
go_encode_id(const std::string&)':
../../gcc/go/gofrontend/go-encode-id.cc:176:48: error: '%02x'
directive output may be truncated writing between 2 and 8 bytes into a
region of size 6 [-Werror=format-truncation=]
  176 |                   snprintf(buf, sizeof buf, "_x%02x", c);
      |                                                ^~~~
../../gcc/go/gofrontend/go-encode-id.cc:176:45: note: directive
argument in the range [128, 4294967295]
  176 |                   snprintf(buf, sizeof buf, "_x%02x", c);
      |                                             ^~~~~~~~
../../gcc/go/gofrontend/go-encode-id.cc:176:27: note: 'snprintf'
output between 5 and 11 bytes into a destination of size 8
  176 |                   snprintf(buf, sizeof buf, "_x%02x", c);
      |                   ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The code is safe, because the value of c is known to be >= 0 && <=
0xff.  But it's difficult for the compiler to know that.  This patch
bumps the buffer size to avoid the warning.

This fixes https://gcc.gnu.org/PR117833.

Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu.  Committed
to mainline.

Ian
1021933a9ff6e15e982c858766c90cc8e58a103a
  

Patch

diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE
index 59badf80f40..3bd755ce515 100644
--- a/gcc/go/gofrontend/MERGE
+++ b/gcc/go/gofrontend/MERGE
@@ -1,4 +1,4 @@ 
-f9ea9801058aa98a421784da12b76cda0b4c6cf2
+dfe585bf82380630697e96c249de825c5f655afe
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
diff --git a/gcc/go/gofrontend/go-encode-id.cc b/gcc/go/gofrontend/go-encode-id.cc
index 7ab65f513b3..5c82aa74533 100644
--- a/gcc/go/gofrontend/go-encode-id.cc
+++ b/gcc/go/gofrontend/go-encode-id.cc
@@ -172,7 +172,7 @@  go_encode_id(const std::string &id)
 		}
 	      else
 		{
-		  char buf[8];
+		  char buf[16];
 		  snprintf(buf, sizeof buf, "_x%02x", c);
 		  ret.append(buf);
 		}