about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2022-07-20 10:45:09 -0400
committerRalf Jung <post@ralfj.de>2022-07-20 17:12:08 -0400
commit9cbd1066d711ef4b5de00fc105f05ee6a3db9ae9 (patch)
treee611d267c4cd0db3cb6e6a780696c04f5dc82a6b
parent399e020b96b0194e734c698d3ef4eee5c5fa59ea (diff)
downloadrust-9cbd1066d711ef4b5de00fc105f05ee6a3db9ae9.tar.gz
rust-9cbd1066d711ef4b5de00fc105f05ee6a3db9ae9.zip
add range metadata to alignment loads
-rw-r--r--compiler/rustc_codegen_ssa/src/mir/intrinsic.rs9
1 files changed, 7 insertions, 2 deletions
diff --git a/compiler/rustc_codegen_ssa/src/mir/intrinsic.rs b/compiler/rustc_codegen_ssa/src/mir/intrinsic.rs
index 1fffa3beaaa..0a8bd914823 100644
--- a/compiler/rustc_codegen_ssa/src/mir/intrinsic.rs
+++ b/compiler/rustc_codegen_ssa/src/mir/intrinsic.rs
@@ -9,7 +9,7 @@ use crate::MemFlags;
 
 use rustc_middle::ty::{self, Ty, TyCtxt};
 use rustc_span::{sym, Span};
-use rustc_target::abi::call::{FnAbi, PassMode};
+use rustc_target::abi::{WrappingRange, call::{FnAbi, PassMode}};
 
 fn copy_intrinsic<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>(
     bx: &mut Bx,
@@ -110,7 +110,12 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
                     sym::vtable_align => ty::COMMON_VTABLE_ENTRIES_ALIGN,
                     _ => bug!(),
                 };
-                meth::VirtualIndex::from_index(idx).get_usize(bx, vtable)
+                let value = meth::VirtualIndex::from_index(idx).get_usize(bx, vtable);
+                if name == sym::vtable_align {
+                    // Alignment is always nonzero.
+                    bx.range_metadata(value, WrappingRange { start: 1, end: !0 });
+                };
+                value
             }
             sym::pref_align_of
             | sym::needs_drop