diff options
| author | John McCall <rjmccall@apple.com> | 2015-09-29 04:37:40 +0000 |
|---|---|---|
| committer | John McCall <rjmccall@apple.com> | 2015-09-29 04:37:40 +0000 |
| commit | 8460bcaa332df13fa3a83d2f62c65a4a14190970 (patch) | |
| tree | 7abe3705a3aa4d8d061c25daa19389126981636a /clang | |
| parent | 8674c5cf70f6479132bc7dd63467b6c8c92c469d (diff) | |
| download | bcm5719-llvm-8460bcaa332df13fa3a83d2f62c65a4a14190970.tar.gz bcm5719-llvm-8460bcaa332df13fa3a83d2f62c65a4a14190970.zip | |
Honor the casted-to alignment of an explicit cast even when
Sema thinks the cast is a no-op, as it does when (e.g.) the
only thing that changes is an alignment attribute.
Fixed PR24944.
llvm-svn: 248775
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/CodeGen/CGExpr.cpp | 1 | ||||
| -rw-r--r-- | clang/test/CodeGen/alignment.c | 8 |
2 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp index c38dbdd7d30..ece83371db9 100644 --- a/clang/lib/CodeGen/CGExpr.cpp +++ b/clang/lib/CodeGen/CGExpr.cpp @@ -814,7 +814,6 @@ Address CodeGenFunction::EmitPointerWithAlignment(const Expr *E, // If this is an explicit bitcast, and the source l-value is // opaque, honor the alignment of the casted-to type. if (isa<ExplicitCastExpr>(CE) && - CE->getCastKind() == CK_BitCast && InnerSource != AlignmentSource::Decl) { Addr = Address(Addr.getPointer(), getNaturalPointeeTypeAlignment(E->getType(), Source)); diff --git a/clang/test/CodeGen/alignment.c b/clang/test/CodeGen/alignment.c index 0a598010c85..c9f58136e38 100644 --- a/clang/test/CodeGen/alignment.c +++ b/clang/test/CodeGen/alignment.c @@ -59,3 +59,11 @@ void test4(float4align64 *p) { // CHECK: @test4( // CHECK: store <4 x float> {{.*}}, <4 x float>* {{.*}}, align 64 +// PR24944 - Typedef alignment not honored on no-op cast. +typedef float __attribute__((vector_size(16), aligned(16))) float4align16; +typedef float __attribute__((vector_size(16), aligned(2))) float4align2; +void test6(float4align64 *p) { + float4align64 vec = *(float4align2*) p; +} +// CHECK-LABEL: @test6 +// CHECK: load <4 x float>, <4 x float>* {{.*}}, align 2 |

