about summary refs log tree commit diff
path: root/compiler/rustc_mir_transform/src/check_alignment.rs
diff options
context:
space:
mode:
authorBen Kimock <kimockb@gmail.com>2023-05-27 14:52:41 -0400
committerBen Kimock <kimockb@gmail.com>2023-05-27 14:54:15 -0400
commit783b1ce99c86106456329d7fc51c149bc27a282a (patch)
tree710100951df1f310a62b889af4801e46792a3ef4 /compiler/rustc_mir_transform/src/check_alignment.rs
parentde4dddf155ca599ca4c888bb4ee29989394c24d6 (diff)
downloadrust-783b1ce99c86106456329d7fc51c149bc27a282a.tar.gz
rust-783b1ce99c86106456329d7fc51c149bc27a282a.zip
Exclude Rvalue::AddressOf for raw pointer deref alignment checks
Diffstat (limited to 'compiler/rustc_mir_transform/src/check_alignment.rs')
-rw-r--r--compiler/rustc_mir_transform/src/check_alignment.rs8
1 files changed, 8 insertions, 0 deletions
diff --git a/compiler/rustc_mir_transform/src/check_alignment.rs b/compiler/rustc_mir_transform/src/check_alignment.rs
index d60184e0ebe..1fe8ea07892 100644
--- a/compiler/rustc_mir_transform/src/check_alignment.rs
+++ b/compiler/rustc_mir_transform/src/check_alignment.rs
@@ -75,6 +75,14 @@ struct PointerFinder<'tcx, 'a> {
 }
 
 impl<'tcx, 'a> Visitor<'tcx> for PointerFinder<'tcx, 'a> {
+    fn visit_rvalue(&mut self, rvalue: &Rvalue<'tcx>, location: Location) {
+        if let Rvalue::AddressOf(..) = rvalue {
+            // Ignore dereferences inside of an AddressOf
+            return;
+        }
+        self.super_rvalue(rvalue, location);
+    }
+
     fn visit_place(&mut self, place: &Place<'tcx>, context: PlaceContext, _location: Location) {
         if let PlaceContext::NonUse(_) = context {
             return;