about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--compiler/rustc_codegen_llvm/src/abi.rs20
-rw-r--r--src/test/codegen/function-arguments-noopt.rs4
2 files changed, 12 insertions, 12 deletions
diff --git a/compiler/rustc_codegen_llvm/src/abi.rs b/compiler/rustc_codegen_llvm/src/abi.rs
index a20801914ad..5b8cc238480 100644
--- a/compiler/rustc_codegen_llvm/src/abi.rs
+++ b/compiler/rustc_codegen_llvm/src/abi.rs
@@ -59,6 +59,9 @@ impl ArgAttributesExt for ArgAttributes {
                     llattr.apply_llfn(idx, llfn);
                 }
             }
+            if let Some(align) = self.pointee_align {
+                llvm::LLVMRustAddAlignmentAttr(llfn, idx.as_uint(), align.bytes() as u32);
+            }
             match self.arg_ext {
                 ArgExtension::None => {}
                 ArgExtension::Zext => llvm::Attribute::ZExt.apply_llfn(idx, llfn),
@@ -77,9 +80,6 @@ impl ArgAttributesExt for ArgAttributes {
                 }
                 regular -= ArgAttribute::NonNull;
             }
-            if let Some(align) = self.pointee_align {
-                llvm::LLVMRustAddAlignmentAttr(llfn, idx.as_uint(), align.bytes() as u32);
-            }
             for (attr, llattr) in OPTIMIZATION_ATTRIBUTES {
                 if regular.contains(attr) {
                     llattr.apply_llfn(idx, llfn);
@@ -105,6 +105,13 @@ impl ArgAttributesExt for ArgAttributes {
                     llattr.apply_callsite(idx, callsite);
                 }
             }
+            if let Some(align) = self.pointee_align {
+                llvm::LLVMRustAddAlignmentCallSiteAttr(
+                    callsite,
+                    idx.as_uint(),
+                    align.bytes() as u32,
+                );
+            }
             match self.arg_ext {
                 ArgExtension::None => {}
                 ArgExtension::Zext => llvm::Attribute::ZExt.apply_callsite(idx, callsite),
@@ -127,13 +134,6 @@ impl ArgAttributesExt for ArgAttributes {
                 }
                 regular -= ArgAttribute::NonNull;
             }
-            if let Some(align) = self.pointee_align {
-                llvm::LLVMRustAddAlignmentCallSiteAttr(
-                    callsite,
-                    idx.as_uint(),
-                    align.bytes() as u32,
-                );
-            }
             for (attr, llattr) in OPTIMIZATION_ATTRIBUTES {
                 if regular.contains(attr) {
                     llattr.apply_callsite(idx, callsite);
diff --git a/src/test/codegen/function-arguments-noopt.rs b/src/test/codegen/function-arguments-noopt.rs
index c8c88888978..1d740a4b329 100644
--- a/src/test/codegen/function-arguments-noopt.rs
+++ b/src/test/codegen/function-arguments-noopt.rs
@@ -23,7 +23,7 @@ pub fn boolean_call(x: bool, f: fn(bool) -> bool) -> bool {
   f(x)
 }
 
-// CHECK: define i32* @borrow(i32* %x)
+// CHECK: define align 4 i32* @borrow(i32* align 4 %x)
 #[no_mangle]
 pub fn borrow(x: &i32) -> &i32 {
   x
@@ -32,7 +32,7 @@ pub fn borrow(x: &i32) -> &i32 {
 // CHECK-LABEL: @borrow_call
 #[no_mangle]
 pub fn borrow_call(x: &i32, f: fn(&i32) -> &i32) -> &i32 {
-  // CHECK: call i32* %f(i32* %x)
+  // CHECK: call align 4 i32* %f(i32* align 4 %x)
   f(x)
 }