Skip to content

Commit a6dcd51

Browse files
committed
fix multiple #[repr(align(N))] on functions
1 parent 5961e5b commit a6dcd51

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

compiler/rustc_codegen_ssa/src/codegen_attrs.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,8 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, did: LocalDefId) -> CodegenFnAttrs {
114114
AttributeKind::Repr(reprs) => {
115115
codegen_fn_attrs.alignment = reprs
116116
.iter()
117-
.find_map(|(r, _)| if let ReprAlign(x) = r { Some(*x) } else { None });
117+
.filter_map(|(r, _)| if let ReprAlign(x) = r { Some(*x) } else { None })
118+
.max();
118119
}
119120

120121
_ => {}

tests/codegen/align-fn.rs

+19
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,22 @@ impl T for () {}
4747
pub fn foo() {
4848
().trait_method();
4949
}
50+
51+
// CHECK-LABEL: align_specified_twice_1
52+
// CHECK-SAME: align 64
53+
#[no_mangle]
54+
#[repr(align(32), align(64))]
55+
pub fn align_specified_twice_1() {}
56+
57+
// CHECK-LABEL: align_specified_twice_2
58+
// CHECK-SAME: align 128
59+
#[no_mangle]
60+
#[repr(align(128), align(32))]
61+
pub fn align_specified_twice_2() {}
62+
63+
// CHECK-LABEL: align_specified_twice_3
64+
// CHECK-SAME: align 256
65+
#[no_mangle]
66+
#[repr(align(32))]
67+
#[repr(align(256))]
68+
pub fn align_specified_twice_3() {}

0 commit comments

Comments
 (0)