@@ -786,20 +786,7 @@ where
786
786
debug ! ( "gen {:?}" , local) ;
787
787
self . _trans . gen ( local) ;
788
788
}
789
- _ => {
790
- if let Some ( node_idx) = self . borrow_deps . locals_to_node_indexes . get ( & local) {
791
- let node = self . borrow_deps . dep_graph . node ( * node_idx) ;
792
-
793
- // these are `Local`s that contain references/pointers or are raw pointers
794
- // that were assigned to raw pointers, which were cast to usize. Hence we
795
- // need to treat them as uses of the references/pointers that they
796
- // refer/correspond to.
797
- if let NodeKind :: LocalWithRefs ( _) = node. data {
798
- debug ! ( "gen {:?}" , local) ;
799
- self . _trans . gen ( local) ;
800
- }
801
- }
802
- }
789
+ _ => { }
803
790
}
804
791
805
792
self . super_place ( place, context, location) ;
@@ -825,7 +812,26 @@ where
825
812
self . _trans . kill ( destination. local ) ;
826
813
827
814
for arg in args {
828
- self . visit_operand ( arg, location)
815
+ match arg {
816
+ Operand :: Copy ( place) | Operand :: Move ( place) => {
817
+ if let Some ( node_idx) =
818
+ self . borrow_deps . locals_to_node_indexes . get ( & place. local )
819
+ {
820
+ let node = self . borrow_deps . dep_graph . node ( * node_idx) ;
821
+
822
+ // these are `Local`s that contain references/pointers or are raw pointers
823
+ // that were assigned to raw pointers, which were cast to usize. Since the
824
+ // function call is free to use these in any form, we need to gen them here.
825
+ if let NodeKind :: LocalWithRefs ( _) = node. data {
826
+ debug ! ( "gen {:?}" , place. local) ;
827
+ self . _trans . gen ( place. local ) ;
828
+ }
829
+ } else {
830
+ self . super_operand ( arg, location)
831
+ }
832
+ }
833
+ _ => { }
834
+ }
829
835
}
830
836
}
831
837
_ => self . super_terminator ( terminator, location) ,
@@ -837,6 +843,26 @@ where
837
843
debug ! ( "killing {:?}" , resume_arg. local) ;
838
844
self . _trans . kill ( resume_arg. local ) ;
839
845
846
+ match value {
847
+ Operand :: Copy ( place) | Operand :: Move ( place) => {
848
+ if let Some ( node_idx) =
849
+ self . borrow_deps . locals_to_node_indexes . get ( & place. local )
850
+ {
851
+ let node = self . borrow_deps . dep_graph . node ( * node_idx) ;
852
+
853
+ // these are `Local`s that contain references/pointers or are raw pointers
854
+ // that were assigned to raw pointers, which were cast to usize. Since the
855
+ // function call is free to use these in any form, we need to gen them here.
856
+ if let NodeKind :: LocalWithRefs ( _) = node. data {
857
+ debug ! ( "gen {:?}" , place. local) ;
858
+ self . _trans . gen ( place. local ) ;
859
+ }
860
+ } else {
861
+ self . super_operand ( value, location)
862
+ }
863
+ }
864
+ _ => { }
865
+ }
840
866
self . visit_operand ( value, location)
841
867
}
842
868
_ => self . super_terminator ( terminator, location) ,
0 commit comments