diff options
| author | Jannis Christopher Köhl <mail@koehl.dev> | 2022-10-05 21:42:16 +0200 |
|---|---|---|
| committer | Jannis Christopher Köhl <mail@koehl.dev> | 2022-11-07 10:35:20 +0100 |
| commit | 1765587846ac9bee95f4f293862b0aae9b8ff4ff (patch) | |
| tree | 79c3f18d3367325ee45c65669834279e841475a8 | |
| parent | b5063ab0e543174e416e34fc130c8b8daba34b41 (diff) | |
| download | rust-1765587846ac9bee95f4f293862b0aae9b8ff4ff.tar.gz rust-1765587846ac9bee95f4f293862b0aae9b8ff4ff.zip | |
Only track (trivially) freeze types
| -rw-r--r-- | compiler/rustc_middle/src/ty/util.rs | 2 | ||||
| -rw-r--r-- | compiler/rustc_mir_dataflow/src/value_analysis.rs | 6 |
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)?; |
