forked from OSchip/llvm-project
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
This commit is contained in:
parent
8674c5cf70
commit
8460bcaa33
|
@ -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));
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue