(
&mut self,
instance1: &Instance<'tcx>,
pointer: ConstraintNode<'tcx>,
instance2: &Instance<'tcx>,
pointee: ConstraintNode<'tcx>,
)
| 823 | } |
| 824 | |
| 825 | pub fn inter_points_to( |
| 826 | &mut self, |
| 827 | instance1: &Instance<'tcx>, |
| 828 | pointer: ConstraintNode<'tcx>, |
| 829 | instance2: &Instance<'tcx>, |
| 830 | pointee: ConstraintNode<'tcx>, |
| 831 | ) -> ApproximateAliasKind { |
| 832 | let body1 = self.tcx.instance_mir(instance1.def); |
| 833 | let points_to_map = self.get_or_insert_pts(instance1.def_id(), body1).clone(); |
| 834 | let mut final_alias_kind = ApproximateAliasKind::Unknown; |
| 835 | let set = match points_to_map.get(&pointer) { |
| 836 | Some(set) => set, |
| 837 | None => return ApproximateAliasKind::Unlikely, |
| 838 | }; |
| 839 | for local_pointee in set { |
| 840 | let alias_kind = self |
| 841 | .interproc_alias(instance1, local_pointee, instance2, &pointee) |
| 842 | .unwrap_or(ApproximateAliasKind::Unknown); |
| 843 | if alias_kind > final_alias_kind { |
| 844 | final_alias_kind = alias_kind; |
| 845 | } |
| 846 | } |
| 847 | final_alias_kind |
| 848 | } |
| 849 | |
| 850 | /// Get the points-to info from cache `pts`. |
| 851 | /// If not exists, then perform points-to analysis |
no test coverage detected