@@ -95,7 +95,8 @@ impl<'mir, 'tcx> GlobalState {
95
95
rng. gen_range ( 0 , 16 )
96
96
} ;
97
97
// From next_base_addr + slack, round up to adjust for alignment.
98
- let base_addr = Self :: align_addr ( global_state. next_base_addr + slack, align. bytes ( ) ) ;
98
+ let base_addr = global_state. next_base_addr . checked_add ( slack) . unwrap ( ) ;
99
+ let base_addr = Self :: align_addr ( base_addr, align. bytes ( ) ) ;
99
100
entry. insert ( base_addr) ;
100
101
trace ! (
101
102
"Assigning base address {:#x} to allocation {:?} (slack: {}, align: {})" ,
@@ -104,7 +105,7 @@ impl<'mir, 'tcx> GlobalState {
104
105
105
106
// Remember next base address. If this allocation is zero-sized, leave a gap
106
107
// of at least 1 to avoid two allocations having the same base address.
107
- global_state. next_base_addr = base_addr + max ( size. bytes ( ) , 1 ) ;
108
+ global_state. next_base_addr = base_addr. checked_add ( max ( size. bytes ( ) , 1 ) ) . unwrap ( ) ;
108
109
// Given that `next_base_addr` increases in each allocation, pushing the
109
110
// corresponding tuple keeps `int_to_ptr_map` sorted
110
111
global_state. int_to_ptr_map . push ( ( base_addr, ptr. alloc_id ) ) ;
@@ -124,7 +125,7 @@ impl<'mir, 'tcx> GlobalState {
124
125
fn align_addr ( addr : u64 , align : u64 ) -> u64 {
125
126
match addr % align {
126
127
0 => addr,
127
- rem => addr + align - rem
128
+ rem => addr. checked_add ( align) . unwrap ( ) - rem
128
129
}
129
130
}
130
131
}
0 commit comments