about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJannis Christopher Köhl <mail@koehl.dev>2022-10-05 21:42:16 +0200
committerJannis Christopher Köhl <mail@koehl.dev>2022-11-07 10:35:20 +0100
commit1765587846ac9bee95f4f293862b0aae9b8ff4ff (patch)
tree79c3f18d3367325ee45c65669834279e841475a8
parentb5063ab0e543174e416e34fc130c8b8daba34b41 (diff)
downloadrust-1765587846ac9bee95f4f293862b0aae9b8ff4ff.tar.gz
rust-1765587846ac9bee95f4f293862b0aae9b8ff4ff.zip
Only track (trivially) freeze types
-rw-r--r--compiler/rustc_middle/src/ty/util.rs2
-rw-r--r--compiler/rustc_mir_dataflow/src/value_analysis.rs6
2 files changed, 6 insertions, 2 deletions
diff --git a/compiler/rustc_middle/src/ty/util.rs b/compiler/rustc_middle/src/ty/util.rs
index f72e236eda1..6cbdac2a8cb 100644
--- a/compiler/rustc_middle/src/ty/util.rs
+++ b/compiler/rustc_middle/src/ty/util.rs
@@ -849,7 +849,7 @@ impl<'tcx> Ty<'tcx> {
     ///
     /// Returning true means the type is known to be `Freeze`. Returning
     /// `false` means nothing -- could be `Freeze`, might not be.
-    fn is_trivially_freeze(self) -> bool {
+    pub fn is_trivially_freeze(self) -> bool {
         match self.kind() {
             ty::Int(_)
             | ty::Uint(_)
diff --git a/compiler/rustc_mir_dataflow/src/value_analysis.rs b/compiler/rustc_mir_dataflow/src/value_analysis.rs
index 510856da92f..766a659adca 100644
--- a/compiler/rustc_mir_dataflow/src/value_analysis.rs
+++ b/compiler/rustc_mir_dataflow/src/value_analysis.rs
@@ -674,7 +674,11 @@ impl Map {
             return Err(());
         }
 
-        // FIXME: Check that the place is `Freeze`.
+        if !ty.is_trivially_freeze() {
+            // Due to the way we deal with shared references, only `Freeze` types may be tracked.
+            // We are a little bit to restrictive here by only allowing trivially `Freeze` types.
+            return Err(());
+        }
 
         let place = self.make_place(local, projection)?;