[Objective-C patch] Patch to fix a crash in IRGen because

of incorrect AST when a compound literal of Objective-C
property access is used to initialize a vertor of floats.
rdar://20407999


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@234176 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Fariborz Jahanian 2015-04-06 16:56:39 +00:00
parent 412865c8ea
commit 38bc66da56
2 changed files with 30 additions and 1 deletions

View File

@ -1519,7 +1519,15 @@ static ExprResult LookupMemberExpr(Sema &S, LookupResult &R,
if (BaseType->isExtVectorType()) {
// FIXME: this expr should store IsArrow.
IdentifierInfo *Member = MemberName.getAsIdentifierInfo();
ExprValueKind VK = (IsArrow ? VK_LValue : BaseExpr.get()->getValueKind());
ExprValueKind VK;
if (IsArrow)
VK = VK_LValue;
else {
if (PseudoObjectExpr *POE = dyn_cast<PseudoObjectExpr>(BaseExpr.get()))
VK = POE->getSyntacticForm()->getValueKind();
else
VK = BaseExpr.get()->getValueKind();
}
QualType ret = CheckExtVectorComponent(S, BaseType, VK, OpLoc,
Member, MemberLoc);
if (ret.isNull())

View File

@ -0,0 +1,21 @@
// RUN: %clang_cc1 %s -emit-llvm -triple x86_64-apple-darwin -o - | FileCheck %s
// rdar://20407999
typedef __attribute__((__ext_vector_type__(2))) float vector_float2;
@interface GPAgent2D
@property (nonatomic, assign) vector_float2 position;
@end
@interface GPGoal @end
@implementation GPGoal
-(void)getForce {
GPAgent2D* targetAgent;
(vector_float2){targetAgent.position.x, targetAgent.position.y};
}
@end
// CHECK: [[CL:%.*]] = alloca <2 x float>, align 8
// CHECK: store <2 x float> [[VECINIT:%.*]], <2 x float>* [[CL]]
// CHECK: [[FOURTEEN:%.*]] = load <2 x float>, <2 x float>* [[CL]]