use std::{
collections::{HashMap, HashSet},
hash::Hash,
};
use crate::analysis::senryx::symbolic_analysis::{AnaOperand, SymbolicDef};
use crate::analysis::senryx::visitor::PlaceTy;
use rustc_middle::ty::Ty;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum AlignState<'tcx> {
Aligned(Ty<'tcx>),
Unaligned(Ty<'tcx>),
Unknown,
}
impl<'tcx> AlignState<'tcx> {
pub fn merge(&self, other: &Self) -> Self {
if self == other {
return other.clone();
}
match (self, other) {
(AlignState::Aligned(t1), AlignState::Aligned(t2)) => {
if t1 == t2 {
AlignState::Aligned(*t1)
} else {
AlignState::Unknown
}
}
(AlignState::Unaligned(t1), AlignState::Unaligned(t2)) => AlignState::Unknown,
_ => AlignState::Unknown,
}
}
}