]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c++: modules: Fix 32-bit overflow with 64-bit location_t [PR117970]
authorLewis Hyatt <lhyatt@gmail.com>
Wed, 18 Dec 2024 02:26:18 +0000 (21:26 -0500)
committerLewis Hyatt <lhyatt@gcc.gnu.org>
Wed, 18 Dec 2024 02:26:18 +0000 (21:26 -0500)
With the move to 64-bit location_t in r15-6016, I missed a spot in module.cc
where a location_t was still being stored in a 32-bit int. Fixed.

The xtreme-header* tests in modules.exp were still passing fine on lots of
architectures that were tested (x86-64, i686, aarch64, sparc, riscv64), but
the PR shows that they were failing in some particular risc-v multilib
configurations. They pass now.

gcc/cp/ChangeLog:

PR c++/117970
* module.cc (module_state::read_ordinary_maps): Change argument to
line_map_uint_t instead of unsigned int.

gcc/cp/module.cc

index c3800b0f1256c6ea1380c3639be426011cbe1ea5..f2a4fb16c078f147607b5362d667ebee939aaf92 100644 (file)
@@ -3823,7 +3823,7 @@ class GTY((chain_next ("%h.parent"), for_user)) module_state {
 
   void write_ordinary_maps (elf_out *to, range_t &,
                            bool, unsigned *crc_ptr);
-  bool read_ordinary_maps (unsigned, unsigned);
+  bool read_ordinary_maps (line_map_uint_t, unsigned);
   void write_macro_maps (elf_out *to, range_t &, unsigned *crc_ptr);
   bool read_macro_maps (line_map_uint_t);
 
@@ -17093,7 +17093,8 @@ module_state::write_macro_maps (elf_out *to, range_t &info, unsigned *crc_p)
 }
 
 bool
-module_state::read_ordinary_maps (unsigned num_ord_locs, unsigned range_bits)
+module_state::read_ordinary_maps (line_map_uint_t num_ord_locs,
+                                 unsigned range_bits)
 {
   bytes_in sec;