about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJannis Christopher Köhl <mail@koehl.dev>2022-10-05 20:19:11 +0200
committerJannis Christopher Köhl <mail@koehl.dev>2022-11-07 10:35:19 +0100
commiteab77320e6cad8a42b05989c17bdc8a9609d83ac (patch)
tree8ff82ccc09b1d3ec6cc615db1d87f3c18f1c076b
parentf99950f6aeb78bd271af3f99cbad03613f7b93f7 (diff)
downloadrust-eab77320e6cad8a42b05989c17bdc8a9609d83ac.tar.gz
rust-eab77320e6cad8a42b05989c17bdc8a9609d83ac.zip
Handle NonDivergingIntrinsic and CopyNonOverlapping
-rw-r--r--compiler/rustc_mir_dataflow/src/value_analysis.rs15
1 files changed, 12 insertions, 3 deletions
diff --git a/compiler/rustc_mir_dataflow/src/value_analysis.rs b/compiler/rustc_mir_dataflow/src/value_analysis.rs
index 66e2a445fbc..02b92ed7a62 100644
--- a/compiler/rustc_mir_dataflow/src/value_analysis.rs
+++ b/compiler/rustc_mir_dataflow/src/value_analysis.rs
@@ -116,10 +116,19 @@ pub trait ValueAnalysis<'tcx> {
 
     fn super_intrinsic(
         &self,
-        _intrinsic: &NonDivergingIntrinsic<'tcx>,
-        _state: &mut State<Self::Value>,
+        intrinsic: &NonDivergingIntrinsic<'tcx>,
+        state: &mut State<Self::Value>,
     ) {
-        todo!();
+        match intrinsic {
+            NonDivergingIntrinsic::Assume(..) => {
+                // Could use this, but ignoring it is sound.
+            }
+            NonDivergingIntrinsic::CopyNonOverlapping(CopyNonOverlapping { dst, .. }) => {
+                if let Some(place) = dst.place() {
+                    state.flood(place.as_ref(), self.map());
+                }
+            }
+        }
     }
 
     fn handle_assign(