gold: Use char16_t, char32_t instead of uint16_t, uint32_t as character types
authorRoland McGrath <mcgrathr@google.com>
Tue, 5 Sep 2023 19:28:31 +0000 (12:28 -0700)
committerRoland McGrath <mcgrathr@google.com>
Thu, 7 Sep 2023 00:20:20 +0000 (17:20 -0700)
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.

gold/ChangeLog
gold/merge.cc
gold/output.cc
gold/stringpool.cc

index 93a1125cfedf2229d89fb915fad8a9fee4706185..54fb1c16e1795814eb7689c4d4a9647108a68fc1 100644 (file)
@@ -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.
index c12efc9905e0803df7beab5100deb036a402f500..ce31a7924435d784f79dbcaba71b556021fd8d6f 100644 (file)
@@ -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
index a1978eb5f32974981ff8eb163241133508cdef42..6053e4db33dd9bb52b414742b03fe9242a5802ef 100644 (file)
@@ -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;
index a2cd44d524457dfbf72c088bb47487f26183c391..b5ac1dd34cacea190df4a840b74c5c045d667c82 100644 (file)
@@ -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.