diff options
| author | Jules Bertholet <julesbertholet@quoi.xyz> | 2025-06-29 13:01:41 -0400 |
|---|---|---|
| committer | Jules Bertholet <julesbertholet@quoi.xyz> | 2025-07-06 16:56:41 -0400 |
| commit | a1cefee8d5d39e7e36b60ea0cca06c0220938f74 (patch) | |
| tree | 90a66f781b6729f57d01f2b3894b177c01cfb089 | |
| parent | 97a7b9b1b498ca60ef68376fc34a61a001a0fea6 (diff) | |
| download | rust-a1cefee8d5d39e7e36b60ea0cca06c0220938f74.tar.gz rust-a1cefee8d5d39e7e36b60ea0cca06c0220938f74.zip | |
Support `#[align(…)]` on fns in `extern` blocks
| -rw-r--r-- | compiler/rustc_passes/src/check_attr.rs | 2 | ||||
| -rw-r--r-- | tests/codegen/align-fn.rs | 14 |
2 files changed, 15 insertions, 1 deletions
diff --git a/compiler/rustc_passes/src/check_attr.rs b/compiler/rustc_passes/src/check_attr.rs index 3d9eac0aedc..b8f1ec7ca93 100644 --- a/compiler/rustc_passes/src/check_attr.rs +++ b/compiler/rustc_passes/src/check_attr.rs @@ -1915,7 +1915,7 @@ impl<'tcx> CheckAttrVisitor<'tcx> { /// Checks if the `#[align]` attributes on `item` are valid. fn check_align(&self, span: Span, target: Target, align: Align, repr_span: Span) { match target { - Target::Fn | Target::Method(_) => {} + Target::Fn | Target::Method(_) | Target::ForeignFn => {} Target::Struct | Target::Union | Target::Enum => { self.dcx().emit_err(errors::AlignShouldBeReprAlign { span: repr_span, diff --git a/tests/codegen/align-fn.rs b/tests/codegen/align-fn.rs index 90073ff3081..4a9fc49d211 100644 --- a/tests/codegen/align-fn.rs +++ b/tests/codegen/align-fn.rs @@ -116,3 +116,17 @@ pub fn align_specified_twice_2() {} #[align(32)] #[align(256)] pub fn align_specified_twice_3() {} + +const _: () = { + // CHECK-LABEL: align_unmangled + // CHECK-SAME: align 256 + #[unsafe(no_mangle)] + #[align(32)] + #[align(256)] + extern "C" fn align_unmangled() {} +}; + +unsafe extern "C" { + #[align(256)] + fn align_unmangled(); +} |
