diff options
| author | Folkert de Vries <folkert@folkertdev.nl> | 2025-04-16 12:16:40 +0200 |
|---|---|---|
| committer | Folkert de Vries <folkert@folkertdev.nl> | 2025-04-16 12:16:40 +0200 |
| commit | a6dcd519f325e8e3bce6b59461d6f073a9f5c18b (patch) | |
| tree | b77b012f6163a96e7b808e3a01fa3c2a90271d78 | |
| parent | 5961e5ba3daa20d98f549eb9029105ae50c13aed (diff) | |
| download | rust-a6dcd519f325e8e3bce6b59461d6f073a9f5c18b.tar.gz rust-a6dcd519f325e8e3bce6b59461d6f073a9f5c18b.zip | |
fix multiple `#[repr(align(N))]` on functions
| -rw-r--r-- | compiler/rustc_codegen_ssa/src/codegen_attrs.rs | 3 | ||||
| -rw-r--r-- | tests/codegen/align-fn.rs | 19 |
2 files changed, 21 insertions, 1 deletions
diff --git a/compiler/rustc_codegen_ssa/src/codegen_attrs.rs b/compiler/rustc_codegen_ssa/src/codegen_attrs.rs index ddb61188983..8f23a5f21cd 100644 --- a/compiler/rustc_codegen_ssa/src/codegen_attrs.rs +++ b/compiler/rustc_codegen_ssa/src/codegen_attrs.rs @@ -114,7 +114,8 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, did: LocalDefId) -> CodegenFnAttrs { AttributeKind::Repr(reprs) => { codegen_fn_attrs.alignment = reprs .iter() - .find_map(|(r, _)| if let ReprAlign(x) = r { Some(*x) } else { None }); + .filter_map(|(r, _)| if let ReprAlign(x) = r { Some(*x) } else { None }) + .max(); } _ => {} diff --git a/tests/codegen/align-fn.rs b/tests/codegen/align-fn.rs index 97f23cc0423..660d8cd2bbf 100644 --- a/tests/codegen/align-fn.rs +++ b/tests/codegen/align-fn.rs @@ -47,3 +47,22 @@ impl T for () {} pub fn foo() { ().trait_method(); } + +// CHECK-LABEL: align_specified_twice_1 +// CHECK-SAME: align 64 +#[no_mangle] +#[repr(align(32), align(64))] +pub fn align_specified_twice_1() {} + +// CHECK-LABEL: align_specified_twice_2 +// CHECK-SAME: align 128 +#[no_mangle] +#[repr(align(128), align(32))] +pub fn align_specified_twice_2() {} + +// CHECK-LABEL: align_specified_twice_3 +// CHECK-SAME: align 256 +#[no_mangle] +#[repr(align(32))] +#[repr(align(256))] +pub fn align_specified_twice_3() {} |
