about summary refs log tree commit diff
path: root/src/test/codegen
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2018-11-28 00:25:40 +0100
committerNikita Popov <nikita.ppv@gmail.com>2018-11-28 00:31:03 +0100
commitd8190afbcb9b15eb8e04d3860a5bd018568a3980 (patch)
treef26626950c6a75fc397c42275a343d5d797e66d4 /src/test/codegen
parent6bfb46e4ac9a2704f06de1a2ff7a4612cd70c8cb (diff)
downloadrust-d8190afbcb9b15eb8e04d3860a5bd018568a3980.tar.gz
rust-d8190afbcb9b15eb8e04d3860a5bd018568a3980.zip
Fix alignment of stores to scalar pair
The alignment for the second element of a scalar pair is not the
same as for the first element. Make sure it is computed correctly
based on the element size.
Diffstat (limited to 'src/test/codegen')
-rw-r--r--src/test/codegen/issue-56267.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/test/codegen/issue-56267.rs b/src/test/codegen/issue-56267.rs
new file mode 100644
index 00000000000..2c33f558931
--- /dev/null
+++ b/src/test/codegen/issue-56267.rs
@@ -0,0 +1,18 @@
+// compile-flags: -C no-prepopulate-passes
+
+#![crate_type="rlib"]
+
+#[allow(dead_code)]
+pub struct Foo<T> {
+    foo: u64,
+    bar: T,
+}
+
+// The store writing to bar.1 should have alignment 4. Not checking
+// other stores here, as the alignment will be platform-dependent.
+
+// CHECK: store i32 [[TMP1:%.+]], i32* [[TMP2:%.+]], align 4
+#[no_mangle]
+pub fn test(x: (i32, i32)) -> Foo<(i32, i32)> {
+    Foo { foo: 0, bar: x }
+}