git: 3c10c55a3095 - 2024Q3 - devel/binutils: fix build with libc++ 19
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 02 Aug 2024 07:59:35 UTC
The branch 2024Q3 has been updated by dim:
URL: https://cgit.FreeBSD.org/ports/commit/?id=3c10c55a3095550e597a404677c49f358cd6ebee
commit 3c10c55a3095550e597a404677c49f358cd6ebee
Author: Dimitry Andric <dim@FreeBSD.org>
AuthorDate: 2024-08-01 18:33:37 +0000
Commit: Dimitry Andric <dim@FreeBSD.org>
CommitDate: 2024-08-02 07:59:04 +0000
devel/binutils: fix build with libc++ 19
As noted in the libc++ 19 release notes [1], std::char_traits<> is now
only provided for char, char8_t, char16_t, char32_t and wchar_t, and any
instantiation for other types will fail.
This causes devel/binutils to fail to compile with clang 19 and libc++
19, resulting in errors similar to:
/usr/include/c++/v1/string:820:42: error: implicit instantiation of undefined template 'std::char_traits<unsigned short>'
820 | static_assert(is_same<_CharT, typename traits_type::char_type>::value,
| ^
./stringpool.h:225:35: note: in instantiation of template class 'std::basic_string<unsigned short>' requested here
225 | { return this->add_with_length(s.data(), s.size(), copy, pkey); }
| ^
stringpool.cc:530:7: note: in instantiation of member function 'gold::Stringpool_template<unsigned short>::add' requested here
530 | class Stringpool_template<uint16_t>;
| ^
/usr/include/c++/v1/__fwd/string.h:23:29: note: template is declared here
23 | struct _LIBCPP_TEMPLATE_VIS char_traits;
| ^
Upstream binutils has fixed this in commit 5e9091dab88 [2], so import it
as a separate patch, until the next version of binutils is released.
[1] https://libcxx.llvm.org/ReleaseNotes/19.html#deprecations-and-removals
[2] https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=5e9091dab88
PR: 280563
Approved by: cy (maintainer)
MFH: 2024Q3
(cherry picked from commit 48aefee896d03d9992ff22a8763c4233849415c0)
---
devel/binutils/files/patch-commit-5e9091dab88 | 108 ++++++++++++++++++++++++++
1 file changed, 108 insertions(+)
diff --git a/devel/binutils/files/patch-commit-5e9091dab88 b/devel/binutils/files/patch-commit-5e9091dab88
new file mode 100644
index 000000000000..49927ebef60c
--- /dev/null
+++ b/devel/binutils/files/patch-commit-5e9091dab88
@@ -0,0 +1,108 @@
+commit 5e9091dab8858b25210a91d22fbbbfdee9c969ad
+Author: Roland McGrath <mcgrathr@google.com>
+Date: 2023-09-05T12:28:31-07:00
+
+ gold: Use char16_t, char32_t instead of uint16_t, uint32_t as character types
+
+ The std::basic_string template type is only specified for
+ instantiations using character types. Newer (LLVM) libc++
+ implementations no longer allow non-character integer types
+ to be used.
+
+ gold/
+ * output.cc: Include <uchar.h>.
+ (Output_section::add_merge_input_section): Use char16_t and
+ char32_t for 2- and 4-byte entry size, respectively.
+ * stringpool.cc: Include <uchar.h>.
+ (Stringpool_template): Explicitly instantiate for char16_t,
+ char32_t instead of uint16_t, uint32_t.
+ * merge.cc (Output_merge_string): Likewise.
+
+diff --git gold/ChangeLog gold/ChangeLog
+index 93a1125cfed..54fb1c16e17 100644
+--- gold/ChangeLog
++++ gold/ChangeLog
+@@ -1,3 +1,17 @@
++2023-09-05 Roland McGrath <mcgrathr@google.com>
++
++ The std::basic_string template type is only specified for
++ instantiations using character types. Newer (LLVM) libc++
++ implementations no longer allow non-character integer types
++ to be used.
++ * output.cc: Include <uchar.h>.
++ (Output_section::add_merge_input_section): Use char16_t and
++ char32_t for 2- and 4-byte entry size, respectively.
++ * stringpool.cc: Include <uchar.h>.
++ (Stringpool_template): Explicitly instantiate for char16_t,
++ char32_t instead of uint16_t, uint32_t.
++ * merge.cc (Output_merge_string): Likewise.
++
+ 2023-07-03 Nick Clifton <nickc@redhat.com>
+
+ * po/gold.pot: Regenerate.
+diff --git gold/merge.cc gold/merge.cc
+index c12efc9905e..ce31a792443 100644
+--- gold/merge.cc
++++ gold/merge.cc
+@@ -665,10 +665,10 @@ template
+ class Output_merge_string<char>;
+
+ template
+-class Output_merge_string<uint16_t>;
++class Output_merge_string<char16_t>;
+
+ template
+-class Output_merge_string<uint32_t>;
++class Output_merge_string<char32_t>;
+
+ #if defined(HAVE_TARGET_32_LITTLE) || defined(HAVE_TARGET_32_BIG)
+ template
+diff --git gold/output.cc gold/output.cc
+index a1978eb5f32..6053e4db33d 100644
+--- gold/output.cc
++++ gold/output.cc
+@@ -29,6 +29,7 @@
+ #include <unistd.h>
+ #include <sys/stat.h>
+ #include <algorithm>
++#include <uchar.h>
+
+ #ifdef HAVE_SYS_MMAN_H
+ #include <sys/mman.h>
+@@ -2706,10 +2707,10 @@ Output_section::add_merge_input_section(Relobj* object, unsigned int shndx,
+ pomb = new Output_merge_string<char>(addralign);
+ break;
+ case 2:
+- pomb = new Output_merge_string<uint16_t>(addralign);
++ pomb = new Output_merge_string<char16_t>(addralign);
+ break;
+ case 4:
+- pomb = new Output_merge_string<uint32_t>(addralign);
++ pomb = new Output_merge_string<char32_t>(addralign);
+ break;
+ default:
+ return false;
+diff --git gold/stringpool.cc gold/stringpool.cc
+index a2cd44d5244..b5ac1dd34ca 100644
+--- gold/stringpool.cc
++++ gold/stringpool.cc
+@@ -25,6 +25,7 @@
+ #include <cstring>
+ #include <algorithm>
+ #include <vector>
++#include <uchar.h>
+
+ #include "output.h"
+ #include "parameters.h"
+@@ -527,9 +528,9 @@ template
+ class Stringpool_template<char>;
+
+ template
+-class Stringpool_template<uint16_t>;
++class Stringpool_template<char16_t>;
+
+ template
+-class Stringpool_template<uint32_t>;
++class Stringpool_template<char32_t>;
+
+ } // End namespace gold.