Download raw body.
gcc/11 libestdc++: drop sprintf ld warnings
ld.bfd spots it with a "hello, world!" program, ld.lld doesn't. The
sprintf_ld() change is adapted from code already in lang/gcc/15.
Since that function is internal, it's not a problem.
With this, eg++ (-fuse-ld=bfd) doesn't warn about the sprintf use.
This matters for some overly picky ports that fail to find a working
C++ compiler when ld(1) spits any warning. Diff for gcc/15 to follow.
ok?
Index: Makefile
===================================================================
RCS file: /home/cvs/ports/lang/gcc/11/Makefile,v
diff -u -p -r1.52 Makefile
--- Makefile 13 Sep 2025 14:45:15 -0000 1.52
+++ Makefile 14 Sep 2025 15:41:14 -0000
@@ -17,7 +17,7 @@ USE_NOEXECONLY = Yes
V = 11.2.0
FULL_VERSION = $V
FULL_PKGVERSION = $V
-REVISION = 18
+REVISION = 19
ADASTRAP-amd64 = adastrap-amd64-$V-5.tar.xz
ADASTRAP-i386 = adastrap-i386-$V-4.tar.xz
Index: patches/patch-libstdc++-v3_src_c++17_floating_to_chars_cc
===================================================================
RCS file: patches/patch-libstdc++-v3_src_c++17_floating_to_chars_cc
diff -N patches/patch-libstdc++-v3_src_c++17_floating_to_chars_cc
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-libstdc++-v3_src_c++17_floating_to_chars_cc 13 Sep 2025 18:02:43 -0000
@@ -0,0 +1,44 @@
+Avoid using sprintf, aside from its unsafety it triggers ld(1)
+warnings leading to broken feature detection when linking test
+programs with libestdc++.
+
+Index: libstdc++-v3/src/c++17/floating_to_chars.cc
+--- libstdc++-v3/src/c++17/floating_to_chars.cc.orig
++++ libstdc++-v3/src/c++17/floating_to_chars.cc
+@@ -879,7 +879,8 @@ namespace
+ #pragma GCC diagnostic ignored "-Wabi"
+ template<typename T, typename... Extra>
+ inline int
+- sprintf_ld(char* buffer, const char* format_string, T value, Extra... args)
++ sprintf_ld(char* buffer, size_t length __attribute__((unused)),
++ const char* format_string, T value, Extra... args)
+ {
+ int len;
+
+@@ -894,7 +895,7 @@ namespace
+ len = __sprintfieee128(buffer, format_string, args..., value);
+ else
+ #endif
+- len = sprintf(buffer, format_string, args..., value);
++ len = snprintf(buffer, length, format_string, args..., value);
+
+ #if _GLIBCXX_USE_C99_FENV_TR1 && defined(FE_TONEAREST)
+ if (saved_rounding_mode != FE_TONEAREST)
+@@ -1040,7 +1041,7 @@ template<typename T>
+ // digit, and carefully compute and write the last digit
+ // ourselves.
+ char buffer[expected_output_length+1];
+- const int output_length = sprintf_ld(buffer, "%.0Lf", value);
++ const int output_length = sprintf_ld(buffer, sizeof(buffer), "%.0Lf", value);
+ __glibcxx_assert(output_length == expected_output_length);
+ memcpy(first, buffer, output_length);
+ return {first + output_length, errc{}};
+@@ -1227,7 +1228,7 @@ template<typename T>
+ // Do the sprintf into the local buffer.
+ char buffer[output_length_upper_bound+1];
+ int output_length
+- = sprintf_ld(buffer, output_specifier, value, effective_precision);
++ = sprintf_ld(buffer, sizeof(buffer), output_specifier, value, effective_precision);
+ __glibcxx_assert(output_length <= output_length_upper_bound);
+
+ if (effective_precision > 0)
--
jca
gcc/11 libestdc++: drop sprintf ld warnings