From: Lewis Hyatt Date: Wed, 18 Dec 2024 02:26:18 +0000 (-0500) Subject: c++: modules: Fix 32-bit overflow with 64-bit location_t [PR117970] X-Git-Tag: basepoints/gcc-16~3238 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=88aa69f8126db9a2d5f93b5c6c54cc01d21d1c6e;p=thirdparty%2Fgcc.git c++: modules: Fix 32-bit overflow with 64-bit location_t [PR117970] 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. --- diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc index c3800b0f1256..f2a4fb16c078 100644 --- a/gcc/cp/module.cc +++ b/gcc/cp/module.cc @@ -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;