}
impl $name {
- pub fn to_u32_scalar<'tcx>(&self) -> Scalar<Tag> {
+ pub fn to_u32_scalar<'tcx>(&self) -> Scalar<Provenance> {
Scalar::from_u32(self.0.get())
}
}
F: FnOnce(&mut MiriEvalContext<'mir, 'tcx>, MutexId) -> InterpResult<'tcx, Option<MutexId>>,
{
let this = self.eval_context_mut();
- if let Some(old) = existing(this, this.machine.threads.sync.mutexes.next_index())? {
+ let next_index = this.machine.threads.sync.mutexes.next_index();
+ if let Some(old) = existing(this, next_index)? {
Ok(old)
} else {
- Ok(self.mutex_create())
+ let new_index = this.machine.threads.sync.mutexes.push(Default::default());
+ assert_eq!(next_index, new_index);
+ Ok(new_index)
}
}
) -> InterpResult<'tcx, Option<RwLockId>>,
{
let this = self.eval_context_mut();
- if let Some(old) = existing(this, this.machine.threads.sync.rwlocks.next_index())? {
+ let next_index = this.machine.threads.sync.rwlocks.next_index();
+ if let Some(old) = existing(this, next_index)? {
Ok(old)
} else {
- Ok(self.rwlock_create())
+ let new_index = this.machine.threads.sync.rwlocks.push(Default::default());
+ assert_eq!(next_index, new_index);
+ Ok(new_index)
}
}
) -> InterpResult<'tcx, Option<CondvarId>>,
{
let this = self.eval_context_mut();
- if let Some(old) = existing(this, this.machine.threads.sync.condvars.next_index())? {
+ let next_index = this.machine.threads.sync.condvars.next_index();
+ if let Some(old) = existing(this, next_index)? {
Ok(old)
} else {
- Ok(self.condvar_create())
+ let new_index = this.machine.threads.sync.condvars.push(Default::default());
+ assert_eq!(next_index, new_index);
+ Ok(new_index)
}
}