diff options
| author | Yuki Okushi <huyuumi.dev@gmail.com> | 2025-04-27 18:53:00 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-27 18:53:00 +0900 |
| commit | d91ffb6da5c306150e53f73a361f69837bc39851 (patch) | |
| tree | ee6518c803de044596ce0e095d38bd7cab0f4a57 /compiler/rustc_const_eval/src | |
| parent | 89bb181106817c7828c16dc75ce5b2a367664471 (diff) | |
| parent | 1b315ad92df192895fb2d1f0532270c54f6f8436 (diff) | |
| download | rust-d91ffb6da5c306150e53f73a361f69837bc39851.tar.gz rust-d91ffb6da5c306150e53f73a361f69837bc39851.zip | |
Merge pull request #2351 from rust-lang/rustc-pull
Diffstat (limited to 'compiler/rustc_const_eval/src')
| -rw-r--r-- | compiler/rustc_const_eval/src/interpret/memory.rs | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/compiler/rustc_const_eval/src/interpret/memory.rs b/compiler/rustc_const_eval/src/interpret/memory.rs index d077900587e..9d8130661b0 100644 --- a/compiler/rustc_const_eval/src/interpret/memory.rs +++ b/compiler/rustc_const_eval/src/interpret/memory.rs @@ -872,8 +872,21 @@ impl<'tcx, M: Machine<'tcx>> InterpCx<'tcx, M> { // # Function pointers // (both global from `alloc_map` and local from `extra_fn_ptr_map`) - if self.get_fn_alloc(id).is_some() { - return AllocInfo::new(Size::ZERO, Align::ONE, AllocKind::Function, Mutability::Not); + if let Some(fn_val) = self.get_fn_alloc(id) { + let align = match fn_val { + FnVal::Instance(instance) => { + // Function alignment can be set globally with the `-Zmin-function-alignment=<n>` flag; + // the alignment from a `#[repr(align(<n>))]` is used if it specifies a higher alignment. + let fn_align = self.tcx.codegen_fn_attrs(instance.def_id()).alignment; + let global_align = self.tcx.sess.opts.unstable_opts.min_function_alignment; + + Ord::max(global_align, fn_align).unwrap_or(Align::ONE) + } + // Machine-specific extra functions currently do not support alignment restrictions. + FnVal::Other(_) => Align::ONE, + }; + + return AllocInfo::new(Size::ZERO, align, AllocKind::Function, Mutability::Not); } // # Global allocations |
