mirror of https://github.com/microsoft/clang.git
[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:
parent
412865c8ea
commit
38bc66da56
|
@ -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())
|
||||
|
|
|
@ -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]]
|
Loading…
Reference in New Issue