diff options
| author | Zachary S <zasample18+github@gmail.com> | 2025-07-30 15:35:19 -0500 |
|---|---|---|
| committer | Zachary S <zasample18+github@gmail.com> | 2025-07-31 12:50:40 -0500 |
| commit | f554c79ef819cbc0f9983d0d5306cd7a9bfea6d8 (patch) | |
| tree | c3b8c646fb17083c7b8149dbeec9f3b002289520 | |
| parent | 3fb1b53a9dbfcdf37a4b67d35cde373316829930 (diff) | |
| download | rust-f554c79ef819cbc0f9983d0d5306cd7a9bfea6d8.tar.gz rust-f554c79ef819cbc0f9983d0d5306cd7a9bfea6d8.zip | |
Do not give function allocations alignment in consteval or miri.
| -rw-r--r-- | compiler/rustc_const_eval/src/interpret/memory.rs | 8 | ||||
| -rw-r--r-- | src/tools/miri/tests/pass/fn_align.rs | 25 |
2 files changed, 6 insertions, 27 deletions
diff --git a/compiler/rustc_const_eval/src/interpret/memory.rs b/compiler/rustc_const_eval/src/interpret/memory.rs index 47bebf5371a..bbde7c66acc 100644 --- a/compiler/rustc_const_eval/src/interpret/memory.rs +++ b/compiler/rustc_const_eval/src/interpret/memory.rs @@ -937,8 +937,12 @@ impl<'tcx, M: Machine<'tcx>> InterpCx<'tcx, M> { // (both global from `alloc_map` and local from `extra_fn_ptr_map`) if let Some(fn_val) = self.get_fn_alloc(id) { let align = match fn_val { - FnVal::Instance(instance) => { - self.tcx.codegen_instance_attrs(instance.def).alignment.unwrap_or(Align::ONE) + FnVal::Instance(_instance) => { + // FIXME: Until we have a clear design for the effects of align(N) functions + // on the address of function pointers, we don't consider the align(N) + // attribute on functions in the interpreter. + //self.tcx.codegen_instance_attrs(instance.def).alignment.unwrap_or(Align::ONE) + Align::ONE } // Machine-specific extra functions currently do not support alignment restrictions. FnVal::Other(_) => Align::ONE, diff --git a/src/tools/miri/tests/pass/fn_align.rs b/src/tools/miri/tests/pass/fn_align.rs deleted file mode 100644 index 9752d033458..00000000000 --- a/src/tools/miri/tests/pass/fn_align.rs +++ /dev/null @@ -1,25 +0,0 @@ -//@compile-flags: -Zmin-function-alignment=8 - -// FIXME(rust-lang/rust#82232, rust-lang/rust#143834): temporarily renamed to mitigate `#[align]` -// nameres ambiguity -#![feature(rustc_attrs)] -#![feature(fn_align)] - -// When a function uses `align(N)`, the function address should be a multiple of `N`. - -#[rustc_align(256)] -fn foo() {} - -#[rustc_align(16)] -fn bar() {} - -#[rustc_align(4)] -fn baz() {} - -fn main() { - assert!((foo as usize).is_multiple_of(256)); - assert!((bar as usize).is_multiple_of(16)); - - // The maximum of `align(N)` and `-Zmin-function-alignment=N` is used. - assert!((baz as usize).is_multiple_of(8)); -} |
