aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLewis Hyatt <lhyatt@gmail.com>2024-12-17 21:26:18 -0500
committerLewis Hyatt <lhyatt@gcc.gnu.org>2024-12-17 21:26:18 -0500
commit88aa69f8126db9a2d5f93b5c6c54cc01d21d1c6e (patch)
tree43497cf80f196695142fdc5ea884e30a41bf6b25
parent0e20a3c65025d4bb2f2df8aac72e46997eaed1d7 (diff)
downloadgcc-88aa69f8126db9a2d5f93b5c6c54cc01d21d1c6e.zip
gcc-88aa69f8126db9a2d5f93b5c6c54cc01d21d1c6e.tar.gz
gcc-88aa69f8126db9a2d5f93b5c6c54cc01d21d1c6e.tar.bz2
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.
-rw-r--r--gcc/cp/module.cc5
1 files changed, 3 insertions, 2 deletions
diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc
index c3800b0..f2a4fb1 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;