diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2012-08-23 03:10:17 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2012-08-23 03:10:17 +0000 |
commit | ea93e40785ffeadfac66b948c95f9490ec26207a (patch) | |
tree | 6a362e4eb0dc758c46b2c6a2b14d261000b41500 /test/CodeGen/builtin-memfns.c | |
parent | 2d5a1de741c94f15461b06cd09a65081c7ce3d70 (diff) |
Use the alignment from lvalue emission to more accurately compute the alignment
of a pointer for builtin emission, instead of just depending on the type of the
pointee. <rdar://problem/11314941>.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162425 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/builtin-memfns.c')
-rw-r--r-- | test/CodeGen/builtin-memfns.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/test/CodeGen/builtin-memfns.c b/test/CodeGen/builtin-memfns.c index 72d340619f..4a06160ccb 100644 --- a/test/CodeGen/builtin-memfns.c +++ b/test/CodeGen/builtin-memfns.c @@ -63,3 +63,23 @@ int test7(int *p) { __builtin_memset(hwparams, 0, 256); // No crash alignment = 1 // CHECK: call void @llvm.memset{{.*}}256, i32 1, i1 false) } + +// <rdar://problem/11314941> +// Make sure we don't over-estimate the alignment of fields of +// packed structs. +struct PS { + int modes[4]; +} __attribute__((packed)); +struct PS ps; +void test8(int *arg) { + // CHECK: @test8 + // CHECK: call void @llvm.memcpy{{.*}} 16, i32 1, i1 false) + __builtin_memcpy(arg, ps.modes, sizeof(struct PS)); +} + +__attribute((aligned(16))) int x[4], y[4]; +void test9() { + // CHECK: @test9 + // CHECK: call void @llvm.memcpy{{.*}} 16, i32 16, i1 false) + __builtin_memcpy(x, y, sizeof(y)); +} |