1 //===--- CGExpr.cpp - Emit LLVM Code from Expressions ---------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This contains code to emit Expr nodes as LLVM code.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "CodeGenFunction.h"
15 #include "CodeGenModule.h"
16 #include "CGCall.h"
17 #include "CGCXXABI.h"
18 #include "CGRecordLayout.h"
19 #include "CGObjCRuntime.h"
20 #include "clang/AST/ASTContext.h"
21 #include "clang/AST/DeclObjC.h"
22 #include "llvm/Intrinsics.h"
23 #include "clang/Frontend/CodeGenOptions.h"
24 #include "llvm/Target/TargetData.h"
25 using namespace clang;
26 using namespace CodeGen;
27 
28 //===--------------------------------------------------------------------===//
29 //                        Miscellaneous Helper Methods
30 //===--------------------------------------------------------------------===//
31 
32 /// CreateTempAlloca - This creates a alloca and inserts it into the entry
33 /// block.
34 llvm::AllocaInst *CodeGenFunction::CreateTempAlloca(const llvm::Type *Ty,
35                                                     const llvm::Twine &Name) {
36   if (!Builder.isNamePreserving())
37     return new llvm::AllocaInst(Ty, 0, "", AllocaInsertPt);
38   return new llvm::AllocaInst(Ty, 0, Name, AllocaInsertPt);
39 }
40 
41 void CodeGenFunction::InitTempAlloca(llvm::AllocaInst *Var,
42                                      llvm::Value *Init) {
43   llvm::StoreInst *Store = new llvm::StoreInst(Init, Var);
44   llvm::BasicBlock *Block = AllocaInsertPt->getParent();
45   Block->getInstList().insertAfter(&*AllocaInsertPt, Store);
46 }
47 
48 llvm::AllocaInst *CodeGenFunction::CreateIRTemp(QualType Ty,
49                                                 const llvm::Twine &Name) {
50   llvm::AllocaInst *Alloc = CreateTempAlloca(ConvertType(Ty), Name);
51   // FIXME: Should we prefer the preferred type alignment here?
52   CharUnits Align = getContext().getTypeAlignInChars(Ty);
53   Alloc->setAlignment(Align.getQuantity());
54   return Alloc;
55 }
56 
57 llvm::AllocaInst *CodeGenFunction::CreateMemTemp(QualType Ty,
58                                                  const llvm::Twine &Name) {
59   llvm::AllocaInst *Alloc = CreateTempAlloca(ConvertTypeForMem(Ty), Name);
60   // FIXME: Should we prefer the preferred type alignment here?
61   CharUnits Align = getContext().getTypeAlignInChars(Ty);
62   Alloc->setAlignment(Align.getQuantity());
63   return Alloc;
64 }
65 
66 /// EvaluateExprAsBool - Perform the usual unary conversions on the specified
67 /// expression and compare the result against zero, returning an Int1Ty value.
68 llvm::Value *CodeGenFunction::EvaluateExprAsBool(const Expr *E) {
69   if (const MemberPointerType *MPT = E->getType()->getAs<MemberPointerType>()) {
70     llvm::Value *MemPtr = EmitScalarExpr(E);
71     return CGM.getCXXABI().EmitMemberPointerIsNotNull(CGF, MemPtr, MPT);
72   }
73 
74   QualType BoolTy = getContext().BoolTy;
75   if (!E->getType()->isAnyComplexType())
76     return EmitScalarConversion(EmitScalarExpr(E), E->getType(), BoolTy);
77 
78   return EmitComplexToScalarConversion(EmitComplexExpr(E), E->getType(),BoolTy);
79 }
80 
81 /// EmitAnyExpr - Emit code to compute the specified expression which
82 /// can have any type.  The result is returned as an RValue struct.
83 /// If this is an aggregate expression, AggSlot indicates where the
84 /// result should be returned.
85 RValue CodeGenFunction::EmitAnyExpr(const Expr *E, AggValueSlot AggSlot,
86                                     bool IgnoreResult) {
87   if (!hasAggregateLLVMType(E->getType()))
88     return RValue::get(EmitScalarExpr(E, IgnoreResult));
89   else if (E->getType()->isAnyComplexType())
90     return RValue::getComplex(EmitComplexExpr(E, false, false,
91                                               IgnoreResult, IgnoreResult));
92 
93   EmitAggExpr(E, AggSlot, IgnoreResult);
94   return AggSlot.asRValue();
95 }
96 
97 /// EmitAnyExprToTemp - Similary to EmitAnyExpr(), however, the result will
98 /// always be accessible even if no aggregate location is provided.
99 RValue CodeGenFunction::EmitAnyExprToTemp(const Expr *E) {
100   AggValueSlot AggSlot = AggValueSlot::ignored();
101 
102   if (hasAggregateLLVMType(E->getType()) &&
103       !E->getType()->isAnyComplexType())
104     AggSlot = CreateAggTemp(E->getType(), "agg.tmp");
105   return EmitAnyExpr(E, AggSlot);
106 }
107 
108 /// EmitAnyExprToMem - Evaluate an expression into a given memory
109 /// location.
110 void CodeGenFunction::EmitAnyExprToMem(const Expr *E,
111                                        llvm::Value *Location,
112                                        bool IsLocationVolatile,
113                                        bool IsInit) {
114   if (E->getType()->isComplexType())
115     EmitComplexExprIntoAddr(E, Location, IsLocationVolatile);
116   else if (hasAggregateLLVMType(E->getType()))
117     EmitAggExpr(E, AggValueSlot::forAddr(Location, IsLocationVolatile, IsInit));
118   else {
119     RValue RV = RValue::get(EmitScalarExpr(E, /*Ignore*/ false));
120     LValue LV = MakeAddrLValue(Location, E->getType());
121     EmitStoreThroughLValue(RV, LV, E->getType());
122   }
123 }
124 
125 /// \brief An adjustment to be made to the temporary created when emitting a
126 /// reference binding, which accesses a particular subobject of that temporary.
127 struct SubobjectAdjustment {
128   enum { DerivedToBaseAdjustment, FieldAdjustment } Kind;
129 
130   union {
131     struct {
132       const CastExpr *BasePath;
133       const CXXRecordDecl *DerivedClass;
134     } DerivedToBase;
135 
136     FieldDecl *Field;
137   };
138 
139   SubobjectAdjustment(const CastExpr *BasePath,
140                       const CXXRecordDecl *DerivedClass)
141     : Kind(DerivedToBaseAdjustment)
142   {
143     DerivedToBase.BasePath = BasePath;
144     DerivedToBase.DerivedClass = DerivedClass;
145   }
146 
147   SubobjectAdjustment(FieldDecl *Field)
148     : Kind(FieldAdjustment)
149   {
150     this->Field = Field;
151   }
152 };
153 
154 static llvm::Value *
155 CreateReferenceTemporary(CodeGenFunction& CGF, QualType Type,
156                          const NamedDecl *InitializedDecl) {
157   if (const VarDecl *VD = dyn_cast_or_null<VarDecl>(InitializedDecl)) {
158     if (VD->hasGlobalStorage()) {
159       llvm::SmallString<256> Name;
160       CGF.CGM.getCXXABI().getMangleContext().mangleReferenceTemporary(VD, Name);
161 
162       const llvm::Type *RefTempTy = CGF.ConvertTypeForMem(Type);
163 
164       // Create the reference temporary.
165       llvm::GlobalValue *RefTemp =
166         new llvm::GlobalVariable(CGF.CGM.getModule(),
167                                  RefTempTy, /*isConstant=*/false,
168                                  llvm::GlobalValue::InternalLinkage,
169                                  llvm::Constant::getNullValue(RefTempTy),
170                                  Name.str());
171       return RefTemp;
172     }
173   }
174 
175   return CGF.CreateMemTemp(Type, "ref.tmp");
176 }
177 
178 static llvm::Value *
179 EmitExprForReferenceBinding(CodeGenFunction &CGF, const Expr *E,
180                             llvm::Value *&ReferenceTemporary,
181                             const CXXDestructorDecl *&ReferenceTemporaryDtor,
182                             const NamedDecl *InitializedDecl) {
183   if (const CXXDefaultArgExpr *DAE = dyn_cast<CXXDefaultArgExpr>(E))
184     E = DAE->getExpr();
185 
186   if (const CXXExprWithTemporaries *TE = dyn_cast<CXXExprWithTemporaries>(E)) {
187     CodeGenFunction::RunCleanupsScope Scope(CGF);
188 
189     return EmitExprForReferenceBinding(CGF, TE->getSubExpr(),
190                                        ReferenceTemporary,
191                                        ReferenceTemporaryDtor,
192                                        InitializedDecl);
193   }
194 
195   RValue RV;
196   if (E->isLvalue(CGF.getContext()) == Expr::LV_Valid) {
197     // Emit the expression as an lvalue.
198     LValue LV = CGF.EmitLValue(E);
199 
200     if (LV.isSimple())
201       return LV.getAddress();
202 
203     // We have to load the lvalue.
204     RV = CGF.EmitLoadOfLValue(LV, E->getType());
205   } else {
206     QualType ResultTy = E->getType();
207 
208     llvm::SmallVector<SubobjectAdjustment, 2> Adjustments;
209     while (true) {
210       if (const ParenExpr *PE = dyn_cast<ParenExpr>(E)) {
211         E = PE->getSubExpr();
212         continue;
213       }
214 
215       if (const CastExpr *CE = dyn_cast<CastExpr>(E)) {
216         if ((CE->getCastKind() == CK_DerivedToBase ||
217              CE->getCastKind() == CK_UncheckedDerivedToBase) &&
218             E->getType()->isRecordType()) {
219           E = CE->getSubExpr();
220           CXXRecordDecl *Derived
221             = cast<CXXRecordDecl>(E->getType()->getAs<RecordType>()->getDecl());
222           Adjustments.push_back(SubobjectAdjustment(CE, Derived));
223           continue;
224         }
225 
226         if (CE->getCastKind() == CK_NoOp) {
227           E = CE->getSubExpr();
228           continue;
229         }
230       } else if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {
231         if (ME->getBase()->isLvalue(CGF.getContext()) != Expr::LV_Valid &&
232             ME->getBase()->getType()->isRecordType()) {
233           if (FieldDecl *Field = dyn_cast<FieldDecl>(ME->getMemberDecl())) {
234             E = ME->getBase();
235             Adjustments.push_back(SubobjectAdjustment(Field));
236             continue;
237           }
238         }
239       }
240 
241       // Nothing changed.
242       break;
243     }
244 
245     // Create a reference temporary if necessary.
246     AggValueSlot AggSlot = AggValueSlot::ignored();
247     if (CGF.hasAggregateLLVMType(E->getType()) &&
248         !E->getType()->isAnyComplexType()) {
249       ReferenceTemporary = CreateReferenceTemporary(CGF, E->getType(),
250                                                     InitializedDecl);
251       AggSlot = AggValueSlot::forAddr(ReferenceTemporary, false,
252                                       InitializedDecl != 0);
253     }
254 
255     RV = CGF.EmitAnyExpr(E, AggSlot);
256 
257     if (InitializedDecl) {
258       // Get the destructor for the reference temporary.
259       if (const RecordType *RT = E->getType()->getAs<RecordType>()) {
260         CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(RT->getDecl());
261         if (!ClassDecl->hasTrivialDestructor())
262           ReferenceTemporaryDtor = ClassDecl->getDestructor();
263       }
264     }
265 
266     // Check if need to perform derived-to-base casts and/or field accesses, to
267     // get from the temporary object we created (and, potentially, for which we
268     // extended the lifetime) to the subobject we're binding the reference to.
269     if (!Adjustments.empty()) {
270       llvm::Value *Object = RV.getAggregateAddr();
271       for (unsigned I = Adjustments.size(); I != 0; --I) {
272         SubobjectAdjustment &Adjustment = Adjustments[I-1];
273         switch (Adjustment.Kind) {
274         case SubobjectAdjustment::DerivedToBaseAdjustment:
275           Object =
276               CGF.GetAddressOfBaseClass(Object,
277                                         Adjustment.DerivedToBase.DerivedClass,
278                               Adjustment.DerivedToBase.BasePath->path_begin(),
279                               Adjustment.DerivedToBase.BasePath->path_end(),
280                                         /*NullCheckValue=*/false);
281           break;
282 
283         case SubobjectAdjustment::FieldAdjustment: {
284           LValue LV =
285             CGF.EmitLValueForField(Object, Adjustment.Field, 0);
286           if (LV.isSimple()) {
287             Object = LV.getAddress();
288             break;
289           }
290 
291           // For non-simple lvalues, we actually have to create a copy of
292           // the object we're binding to.
293           QualType T = Adjustment.Field->getType().getNonReferenceType()
294                                                   .getUnqualifiedType();
295           Object = CreateReferenceTemporary(CGF, T, InitializedDecl);
296           LValue TempLV = CGF.MakeAddrLValue(Object,
297                                              Adjustment.Field->getType());
298           CGF.EmitStoreThroughLValue(CGF.EmitLoadOfLValue(LV, T), TempLV, T);
299           break;
300         }
301 
302         }
303       }
304 
305       const llvm::Type *ResultPtrTy = CGF.ConvertType(ResultTy)->getPointerTo();
306       return CGF.Builder.CreateBitCast(Object, ResultPtrTy, "temp");
307     }
308   }
309 
310   if (RV.isAggregate())
311     return RV.getAggregateAddr();
312 
313   // Create a temporary variable that we can bind the reference to.
314   ReferenceTemporary = CreateReferenceTemporary(CGF, E->getType(),
315                                                 InitializedDecl);
316 
317 
318   unsigned Alignment =
319     CGF.getContext().getTypeAlignInChars(E->getType()).getQuantity();
320   if (RV.isScalar())
321     CGF.EmitStoreOfScalar(RV.getScalarVal(), ReferenceTemporary,
322                           /*Volatile=*/false, Alignment, E->getType());
323   else
324     CGF.StoreComplexToAddr(RV.getComplexVal(), ReferenceTemporary,
325                            /*Volatile=*/false);
326   return ReferenceTemporary;
327 }
328 
329 RValue
330 CodeGenFunction::EmitReferenceBindingToExpr(const Expr *E,
331                                             const NamedDecl *InitializedDecl) {
332   llvm::Value *ReferenceTemporary = 0;
333   const CXXDestructorDecl *ReferenceTemporaryDtor = 0;
334   llvm::Value *Value = EmitExprForReferenceBinding(*this, E, ReferenceTemporary,
335                                                    ReferenceTemporaryDtor,
336                                                    InitializedDecl);
337   if (!ReferenceTemporaryDtor)
338     return RValue::get(Value);
339 
340   // Make sure to call the destructor for the reference temporary.
341   if (const VarDecl *VD = dyn_cast_or_null<VarDecl>(InitializedDecl)) {
342     if (VD->hasGlobalStorage()) {
343       llvm::Constant *DtorFn =
344         CGM.GetAddrOfCXXDestructor(ReferenceTemporaryDtor, Dtor_Complete);
345       CGF.EmitCXXGlobalDtorRegistration(DtorFn,
346                                       cast<llvm::Constant>(ReferenceTemporary));
347 
348       return RValue::get(Value);
349     }
350   }
351 
352   PushDestructorCleanup(ReferenceTemporaryDtor, ReferenceTemporary);
353 
354   return RValue::get(Value);
355 }
356 
357 
358 /// getAccessedFieldNo - Given an encoded value and a result number, return the
359 /// input field number being accessed.
360 unsigned CodeGenFunction::getAccessedFieldNo(unsigned Idx,
361                                              const llvm::Constant *Elts) {
362   if (isa<llvm::ConstantAggregateZero>(Elts))
363     return 0;
364 
365   return cast<llvm::ConstantInt>(Elts->getOperand(Idx))->getZExtValue();
366 }
367 
368 void CodeGenFunction::EmitCheck(llvm::Value *Address, unsigned Size) {
369   if (!CatchUndefined)
370     return;
371 
372   Address = Builder.CreateBitCast(Address, PtrToInt8Ty);
373 
374   const llvm::Type *IntPtrT = IntPtrTy;
375   llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::objectsize, &IntPtrT, 1);
376   const llvm::IntegerType *Int1Ty = llvm::Type::getInt1Ty(VMContext);
377 
378   // In time, people may want to control this and use a 1 here.
379   llvm::Value *Arg = llvm::ConstantInt::get(Int1Ty, 0);
380   llvm::Value *C = Builder.CreateCall2(F, Address, Arg);
381   llvm::BasicBlock *Cont = createBasicBlock();
382   llvm::BasicBlock *Check = createBasicBlock();
383   llvm::Value *NegativeOne = llvm::ConstantInt::get(IntPtrTy, -1ULL);
384   Builder.CreateCondBr(Builder.CreateICmpEQ(C, NegativeOne), Cont, Check);
385 
386   EmitBlock(Check);
387   Builder.CreateCondBr(Builder.CreateICmpUGE(C,
388                                         llvm::ConstantInt::get(IntPtrTy, Size)),
389                        Cont, getTrapBB());
390   EmitBlock(Cont);
391 }
392 
393 
394 CodeGenFunction::ComplexPairTy CodeGenFunction::
395 EmitComplexPrePostIncDec(const UnaryOperator *E, LValue LV,
396                          bool isInc, bool isPre) {
397   ComplexPairTy InVal = LoadComplexFromAddr(LV.getAddress(),
398                                             LV.isVolatileQualified());
399 
400   llvm::Value *NextVal;
401   if (isa<llvm::IntegerType>(InVal.first->getType())) {
402     uint64_t AmountVal = isInc ? 1 : -1;
403     NextVal = llvm::ConstantInt::get(InVal.first->getType(), AmountVal, true);
404 
405     // Add the inc/dec to the real part.
406     NextVal = Builder.CreateAdd(InVal.first, NextVal, isInc ? "inc" : "dec");
407   } else {
408     QualType ElemTy = E->getType()->getAs<ComplexType>()->getElementType();
409     llvm::APFloat FVal(getContext().getFloatTypeSemantics(ElemTy), 1);
410     if (!isInc)
411       FVal.changeSign();
412     NextVal = llvm::ConstantFP::get(getLLVMContext(), FVal);
413 
414     // Add the inc/dec to the real part.
415     NextVal = Builder.CreateFAdd(InVal.first, NextVal, isInc ? "inc" : "dec");
416   }
417 
418   ComplexPairTy IncVal(NextVal, InVal.second);
419 
420   // Store the updated result through the lvalue.
421   StoreComplexToAddr(IncVal, LV.getAddress(), LV.isVolatileQualified());
422 
423   // If this is a postinc, return the value read from memory, otherwise use the
424   // updated value.
425   return isPre ? IncVal : InVal;
426 }
427 
428 
429 //===----------------------------------------------------------------------===//
430 //                         LValue Expression Emission
431 //===----------------------------------------------------------------------===//
432 
433 RValue CodeGenFunction::GetUndefRValue(QualType Ty) {
434   if (Ty->isVoidType())
435     return RValue::get(0);
436 
437   if (const ComplexType *CTy = Ty->getAs<ComplexType>()) {
438     const llvm::Type *EltTy = ConvertType(CTy->getElementType());
439     llvm::Value *U = llvm::UndefValue::get(EltTy);
440     return RValue::getComplex(std::make_pair(U, U));
441   }
442 
443   // If this is a use of an undefined aggregate type, the aggregate must have an
444   // identifiable address.  Just because the contents of the value are undefined
445   // doesn't mean that the address can't be taken and compared.
446   if (hasAggregateLLVMType(Ty)) {
447     llvm::Value *DestPtr = CreateMemTemp(Ty, "undef.agg.tmp");
448     return RValue::getAggregate(DestPtr);
449   }
450 
451   return RValue::get(llvm::UndefValue::get(ConvertType(Ty)));
452 }
453 
454 RValue CodeGenFunction::EmitUnsupportedRValue(const Expr *E,
455                                               const char *Name) {
456   ErrorUnsupported(E, Name);
457   return GetUndefRValue(E->getType());
458 }
459 
460 LValue CodeGenFunction::EmitUnsupportedLValue(const Expr *E,
461                                               const char *Name) {
462   ErrorUnsupported(E, Name);
463   llvm::Type *Ty = llvm::PointerType::getUnqual(ConvertType(E->getType()));
464   return MakeAddrLValue(llvm::UndefValue::get(Ty), E->getType());
465 }
466 
467 LValue CodeGenFunction::EmitCheckedLValue(const Expr *E) {
468   LValue LV = EmitLValue(E);
469   if (!isa<DeclRefExpr>(E) && !LV.isBitField() && LV.isSimple())
470     EmitCheck(LV.getAddress(), getContext().getTypeSize(E->getType()) / 8);
471   return LV;
472 }
473 
474 /// EmitLValue - Emit code to compute a designator that specifies the location
475 /// of the expression.
476 ///
477 /// This can return one of two things: a simple address or a bitfield reference.
478 /// In either case, the LLVM Value* in the LValue structure is guaranteed to be
479 /// an LLVM pointer type.
480 ///
481 /// If this returns a bitfield reference, nothing about the pointee type of the
482 /// LLVM value is known: For example, it may not be a pointer to an integer.
483 ///
484 /// If this returns a normal address, and if the lvalue's C type is fixed size,
485 /// this method guarantees that the returned pointer type will point to an LLVM
486 /// type of the same size of the lvalue's type.  If the lvalue has a variable
487 /// length type, this is not possible.
488 ///
489 LValue CodeGenFunction::EmitLValue(const Expr *E) {
490   switch (E->getStmtClass()) {
491   default: return EmitUnsupportedLValue(E, "l-value expression");
492 
493   case Expr::ObjCSelectorExprClass:
494   return EmitObjCSelectorLValue(cast<ObjCSelectorExpr>(E));
495   case Expr::ObjCIsaExprClass:
496     return EmitObjCIsaExpr(cast<ObjCIsaExpr>(E));
497   case Expr::BinaryOperatorClass:
498     return EmitBinaryOperatorLValue(cast<BinaryOperator>(E));
499   case Expr::CompoundAssignOperatorClass:
500     return EmitCompoundAssignOperatorLValue(cast<CompoundAssignOperator>(E));
501   case Expr::CallExprClass:
502   case Expr::CXXMemberCallExprClass:
503   case Expr::CXXOperatorCallExprClass:
504     return EmitCallExprLValue(cast<CallExpr>(E));
505   case Expr::VAArgExprClass:
506     return EmitVAArgExprLValue(cast<VAArgExpr>(E));
507   case Expr::DeclRefExprClass:
508     return EmitDeclRefLValue(cast<DeclRefExpr>(E));
509   case Expr::ParenExprClass:return EmitLValue(cast<ParenExpr>(E)->getSubExpr());
510   case Expr::PredefinedExprClass:
511     return EmitPredefinedLValue(cast<PredefinedExpr>(E));
512   case Expr::StringLiteralClass:
513     return EmitStringLiteralLValue(cast<StringLiteral>(E));
514   case Expr::ObjCEncodeExprClass:
515     return EmitObjCEncodeExprLValue(cast<ObjCEncodeExpr>(E));
516 
517   case Expr::BlockDeclRefExprClass:
518     return EmitBlockDeclRefLValue(cast<BlockDeclRefExpr>(E));
519 
520   case Expr::CXXTemporaryObjectExprClass:
521   case Expr::CXXConstructExprClass:
522     return EmitCXXConstructLValue(cast<CXXConstructExpr>(E));
523   case Expr::CXXBindTemporaryExprClass:
524     return EmitCXXBindTemporaryLValue(cast<CXXBindTemporaryExpr>(E));
525   case Expr::CXXExprWithTemporariesClass:
526     return EmitCXXExprWithTemporariesLValue(cast<CXXExprWithTemporaries>(E));
527   case Expr::CXXScalarValueInitExprClass:
528     return EmitNullInitializationLValue(cast<CXXScalarValueInitExpr>(E));
529   case Expr::CXXDefaultArgExprClass:
530     return EmitLValue(cast<CXXDefaultArgExpr>(E)->getExpr());
531   case Expr::CXXTypeidExprClass:
532     return EmitCXXTypeidLValue(cast<CXXTypeidExpr>(E));
533 
534   case Expr::ObjCMessageExprClass:
535     return EmitObjCMessageExprLValue(cast<ObjCMessageExpr>(E));
536   case Expr::ObjCIvarRefExprClass:
537     return EmitObjCIvarRefLValue(cast<ObjCIvarRefExpr>(E));
538   case Expr::ObjCPropertyRefExprClass:
539     return EmitObjCPropertyRefLValue(cast<ObjCPropertyRefExpr>(E));
540   case Expr::ObjCImplicitSetterGetterRefExprClass:
541     return EmitObjCKVCRefLValue(cast<ObjCImplicitSetterGetterRefExpr>(E));
542   case Expr::ObjCSuperExprClass:
543     return EmitObjCSuperExprLValue(cast<ObjCSuperExpr>(E));
544 
545   case Expr::StmtExprClass:
546     return EmitStmtExprLValue(cast<StmtExpr>(E));
547   case Expr::UnaryOperatorClass:
548     return EmitUnaryOpLValue(cast<UnaryOperator>(E));
549   case Expr::ArraySubscriptExprClass:
550     return EmitArraySubscriptExpr(cast<ArraySubscriptExpr>(E));
551   case Expr::ExtVectorElementExprClass:
552     return EmitExtVectorElementExpr(cast<ExtVectorElementExpr>(E));
553   case Expr::MemberExprClass:
554     return EmitMemberExpr(cast<MemberExpr>(E));
555   case Expr::CompoundLiteralExprClass:
556     return EmitCompoundLiteralLValue(cast<CompoundLiteralExpr>(E));
557   case Expr::ConditionalOperatorClass:
558     return EmitConditionalOperatorLValue(cast<ConditionalOperator>(E));
559   case Expr::ChooseExprClass:
560     return EmitLValue(cast<ChooseExpr>(E)->getChosenSubExpr(getContext()));
561   case Expr::ImplicitCastExprClass:
562   case Expr::CStyleCastExprClass:
563   case Expr::CXXFunctionalCastExprClass:
564   case Expr::CXXStaticCastExprClass:
565   case Expr::CXXDynamicCastExprClass:
566   case Expr::CXXReinterpretCastExprClass:
567   case Expr::CXXConstCastExprClass:
568     return EmitCastLValue(cast<CastExpr>(E));
569   }
570 }
571 
572 llvm::Value *CodeGenFunction::EmitLoadOfScalar(llvm::Value *Addr, bool Volatile,
573                                               unsigned Alignment, QualType Ty) {
574   llvm::LoadInst *Load = Builder.CreateLoad(Addr, "tmp");
575   if (Volatile)
576     Load->setVolatile(true);
577   if (Alignment)
578     Load->setAlignment(Alignment);
579 
580   // Bool can have different representation in memory than in registers.
581   llvm::Value *V = Load;
582   if (Ty->isBooleanType())
583     if (V->getType() != llvm::Type::getInt1Ty(VMContext))
584       V = Builder.CreateTrunc(V, llvm::Type::getInt1Ty(VMContext), "tobool");
585 
586   return V;
587 }
588 
589 void CodeGenFunction::EmitStoreOfScalar(llvm::Value *Value, llvm::Value *Addr,
590                                         bool Volatile, unsigned Alignment,
591                                         QualType Ty) {
592 
593   if (Ty->isBooleanType()) {
594     // Bool can have different representation in memory than in registers.
595     const llvm::PointerType *DstPtr = cast<llvm::PointerType>(Addr->getType());
596     Value = Builder.CreateIntCast(Value, DstPtr->getElementType(), false);
597   }
598 
599   llvm::StoreInst *Store = Builder.CreateStore(Value, Addr, Volatile);
600   if (Alignment)
601     Store->setAlignment(Alignment);
602 }
603 
604 /// EmitLoadOfLValue - Given an expression that represents a value lvalue, this
605 /// method emits the address of the lvalue, then loads the result as an rvalue,
606 /// returning the rvalue.
607 RValue CodeGenFunction::EmitLoadOfLValue(LValue LV, QualType ExprType) {
608   if (LV.isObjCWeak()) {
609     // load of a __weak object.
610     llvm::Value *AddrWeakObj = LV.getAddress();
611     return RValue::get(CGM.getObjCRuntime().EmitObjCWeakRead(*this,
612                                                              AddrWeakObj));
613   }
614 
615   if (LV.isSimple()) {
616     llvm::Value *Ptr = LV.getAddress();
617 
618     // Functions are l-values that don't require loading.
619     if (ExprType->isFunctionType())
620       return RValue::get(Ptr);
621 
622     // Everything needs a load.
623     return RValue::get(EmitLoadOfScalar(Ptr, LV.isVolatileQualified(),
624                                         LV.getAlignment(), ExprType));
625 
626   }
627 
628   if (LV.isVectorElt()) {
629     llvm::Value *Vec = Builder.CreateLoad(LV.getVectorAddr(),
630                                           LV.isVolatileQualified(), "tmp");
631     return RValue::get(Builder.CreateExtractElement(Vec, LV.getVectorIdx(),
632                                                     "vecext"));
633   }
634 
635   // If this is a reference to a subset of the elements of a vector, either
636   // shuffle the input or extract/insert them as appropriate.
637   if (LV.isExtVectorElt())
638     return EmitLoadOfExtVectorElementLValue(LV, ExprType);
639 
640   if (LV.isBitField())
641     return EmitLoadOfBitfieldLValue(LV, ExprType);
642 
643   if (LV.isPropertyRef())
644     return EmitLoadOfPropertyRefLValue(LV, ExprType);
645 
646   assert(LV.isKVCRef() && "Unknown LValue type!");
647   return EmitLoadOfKVCRefLValue(LV, ExprType);
648 }
649 
650 RValue CodeGenFunction::EmitLoadOfBitfieldLValue(LValue LV,
651                                                  QualType ExprType) {
652   const CGBitFieldInfo &Info = LV.getBitFieldInfo();
653 
654   // Get the output type.
655   const llvm::Type *ResLTy = ConvertType(ExprType);
656   unsigned ResSizeInBits = CGM.getTargetData().getTypeSizeInBits(ResLTy);
657 
658   // Compute the result as an OR of all of the individual component accesses.
659   llvm::Value *Res = 0;
660   for (unsigned i = 0, e = Info.getNumComponents(); i != e; ++i) {
661     const CGBitFieldInfo::AccessInfo &AI = Info.getComponent(i);
662 
663     // Get the field pointer.
664     llvm::Value *Ptr = LV.getBitFieldBaseAddr();
665 
666     // Only offset by the field index if used, so that incoming values are not
667     // required to be structures.
668     if (AI.FieldIndex)
669       Ptr = Builder.CreateStructGEP(Ptr, AI.FieldIndex, "bf.field");
670 
671     // Offset by the byte offset, if used.
672     if (AI.FieldByteOffset) {
673       const llvm::Type *i8PTy = llvm::Type::getInt8PtrTy(VMContext);
674       Ptr = Builder.CreateBitCast(Ptr, i8PTy);
675       Ptr = Builder.CreateConstGEP1_32(Ptr, AI.FieldByteOffset,"bf.field.offs");
676     }
677 
678     // Cast to the access type.
679     const llvm::Type *PTy = llvm::Type::getIntNPtrTy(VMContext, AI.AccessWidth,
680                                                     ExprType.getAddressSpace());
681     Ptr = Builder.CreateBitCast(Ptr, PTy);
682 
683     // Perform the load.
684     llvm::LoadInst *Load = Builder.CreateLoad(Ptr, LV.isVolatileQualified());
685     if (AI.AccessAlignment)
686       Load->setAlignment(AI.AccessAlignment);
687 
688     // Shift out unused low bits and mask out unused high bits.
689     llvm::Value *Val = Load;
690     if (AI.FieldBitStart)
691       Val = Builder.CreateLShr(Load, AI.FieldBitStart);
692     Val = Builder.CreateAnd(Val, llvm::APInt::getLowBitsSet(AI.AccessWidth,
693                                                             AI.TargetBitWidth),
694                             "bf.clear");
695 
696     // Extend or truncate to the target size.
697     if (AI.AccessWidth < ResSizeInBits)
698       Val = Builder.CreateZExt(Val, ResLTy);
699     else if (AI.AccessWidth > ResSizeInBits)
700       Val = Builder.CreateTrunc(Val, ResLTy);
701 
702     // Shift into place, and OR into the result.
703     if (AI.TargetBitOffset)
704       Val = Builder.CreateShl(Val, AI.TargetBitOffset);
705     Res = Res ? Builder.CreateOr(Res, Val) : Val;
706   }
707 
708   // If the bit-field is signed, perform the sign-extension.
709   //
710   // FIXME: This can easily be folded into the load of the high bits, which
711   // could also eliminate the mask of high bits in some situations.
712   if (Info.isSigned()) {
713     unsigned ExtraBits = ResSizeInBits - Info.getSize();
714     if (ExtraBits)
715       Res = Builder.CreateAShr(Builder.CreateShl(Res, ExtraBits),
716                                ExtraBits, "bf.val.sext");
717   }
718 
719   return RValue::get(Res);
720 }
721 
722 RValue CodeGenFunction::EmitLoadOfPropertyRefLValue(LValue LV,
723                                                     QualType ExprType) {
724   return EmitObjCPropertyGet(LV.getPropertyRefExpr());
725 }
726 
727 RValue CodeGenFunction::EmitLoadOfKVCRefLValue(LValue LV,
728                                                QualType ExprType) {
729   return EmitObjCPropertyGet(LV.getKVCRefExpr());
730 }
731 
732 // If this is a reference to a subset of the elements of a vector, create an
733 // appropriate shufflevector.
734 RValue CodeGenFunction::EmitLoadOfExtVectorElementLValue(LValue LV,
735                                                          QualType ExprType) {
736   llvm::Value *Vec = Builder.CreateLoad(LV.getExtVectorAddr(),
737                                         LV.isVolatileQualified(), "tmp");
738 
739   const llvm::Constant *Elts = LV.getExtVectorElts();
740 
741   // If the result of the expression is a non-vector type, we must be extracting
742   // a single element.  Just codegen as an extractelement.
743   const VectorType *ExprVT = ExprType->getAs<VectorType>();
744   if (!ExprVT) {
745     unsigned InIdx = getAccessedFieldNo(0, Elts);
746     llvm::Value *Elt = llvm::ConstantInt::get(Int32Ty, InIdx);
747     return RValue::get(Builder.CreateExtractElement(Vec, Elt, "tmp"));
748   }
749 
750   // Always use shuffle vector to try to retain the original program structure
751   unsigned NumResultElts = ExprVT->getNumElements();
752 
753   llvm::SmallVector<llvm::Constant*, 4> Mask;
754   for (unsigned i = 0; i != NumResultElts; ++i) {
755     unsigned InIdx = getAccessedFieldNo(i, Elts);
756     Mask.push_back(llvm::ConstantInt::get(Int32Ty, InIdx));
757   }
758 
759   llvm::Value *MaskV = llvm::ConstantVector::get(&Mask[0], Mask.size());
760   Vec = Builder.CreateShuffleVector(Vec,
761                                     llvm::UndefValue::get(Vec->getType()),
762                                     MaskV, "tmp");
763   return RValue::get(Vec);
764 }
765 
766 
767 
768 /// EmitStoreThroughLValue - Store the specified rvalue into the specified
769 /// lvalue, where both are guaranteed to the have the same type, and that type
770 /// is 'Ty'.
771 void CodeGenFunction::EmitStoreThroughLValue(RValue Src, LValue Dst,
772                                              QualType Ty) {
773   if (!Dst.isSimple()) {
774     if (Dst.isVectorElt()) {
775       // Read/modify/write the vector, inserting the new element.
776       llvm::Value *Vec = Builder.CreateLoad(Dst.getVectorAddr(),
777                                             Dst.isVolatileQualified(), "tmp");
778       Vec = Builder.CreateInsertElement(Vec, Src.getScalarVal(),
779                                         Dst.getVectorIdx(), "vecins");
780       Builder.CreateStore(Vec, Dst.getVectorAddr(),Dst.isVolatileQualified());
781       return;
782     }
783 
784     // If this is an update of extended vector elements, insert them as
785     // appropriate.
786     if (Dst.isExtVectorElt())
787       return EmitStoreThroughExtVectorComponentLValue(Src, Dst, Ty);
788 
789     if (Dst.isBitField())
790       return EmitStoreThroughBitfieldLValue(Src, Dst, Ty);
791 
792     if (Dst.isPropertyRef())
793       return EmitStoreThroughPropertyRefLValue(Src, Dst, Ty);
794 
795     assert(Dst.isKVCRef() && "Unknown LValue type");
796     return EmitStoreThroughKVCRefLValue(Src, Dst, Ty);
797   }
798 
799   if (Dst.isObjCWeak() && !Dst.isNonGC()) {
800     // load of a __weak object.
801     llvm::Value *LvalueDst = Dst.getAddress();
802     llvm::Value *src = Src.getScalarVal();
803      CGM.getObjCRuntime().EmitObjCWeakAssign(*this, src, LvalueDst);
804     return;
805   }
806 
807   if (Dst.isObjCStrong() && !Dst.isNonGC()) {
808     // load of a __strong object.
809     llvm::Value *LvalueDst = Dst.getAddress();
810     llvm::Value *src = Src.getScalarVal();
811     if (Dst.isObjCIvar()) {
812       assert(Dst.getBaseIvarExp() && "BaseIvarExp is NULL");
813       const llvm::Type *ResultType = ConvertType(getContext().LongTy);
814       llvm::Value *RHS = EmitScalarExpr(Dst.getBaseIvarExp());
815       llvm::Value *dst = RHS;
816       RHS = Builder.CreatePtrToInt(RHS, ResultType, "sub.ptr.rhs.cast");
817       llvm::Value *LHS =
818         Builder.CreatePtrToInt(LvalueDst, ResultType, "sub.ptr.lhs.cast");
819       llvm::Value *BytesBetween = Builder.CreateSub(LHS, RHS, "ivar.offset");
820       CGM.getObjCRuntime().EmitObjCIvarAssign(*this, src, dst,
821                                               BytesBetween);
822     } else if (Dst.isGlobalObjCRef()) {
823       CGM.getObjCRuntime().EmitObjCGlobalAssign(*this, src, LvalueDst,
824                                                 Dst.isThreadLocalRef());
825     }
826     else
827       CGM.getObjCRuntime().EmitObjCStrongCastAssign(*this, src, LvalueDst);
828     return;
829   }
830 
831   assert(Src.isScalar() && "Can't emit an agg store with this method");
832   EmitStoreOfScalar(Src.getScalarVal(), Dst.getAddress(),
833                     Dst.isVolatileQualified(), Dst.getAlignment(), Ty);
834 }
835 
836 void CodeGenFunction::EmitStoreThroughBitfieldLValue(RValue Src, LValue Dst,
837                                                      QualType Ty,
838                                                      llvm::Value **Result) {
839   const CGBitFieldInfo &Info = Dst.getBitFieldInfo();
840 
841   // Get the output type.
842   const llvm::Type *ResLTy = ConvertTypeForMem(Ty);
843   unsigned ResSizeInBits = CGM.getTargetData().getTypeSizeInBits(ResLTy);
844 
845   // Get the source value, truncated to the width of the bit-field.
846   llvm::Value *SrcVal = Src.getScalarVal();
847 
848   if (Ty->isBooleanType())
849     SrcVal = Builder.CreateIntCast(SrcVal, ResLTy, /*IsSigned=*/false);
850 
851   SrcVal = Builder.CreateAnd(SrcVal, llvm::APInt::getLowBitsSet(ResSizeInBits,
852                                                                 Info.getSize()),
853                              "bf.value");
854 
855   // Return the new value of the bit-field, if requested.
856   if (Result) {
857     // Cast back to the proper type for result.
858     const llvm::Type *SrcTy = Src.getScalarVal()->getType();
859     llvm::Value *ReloadVal = Builder.CreateIntCast(SrcVal, SrcTy, false,
860                                                    "bf.reload.val");
861 
862     // Sign extend if necessary.
863     if (Info.isSigned()) {
864       unsigned ExtraBits = ResSizeInBits - Info.getSize();
865       if (ExtraBits)
866         ReloadVal = Builder.CreateAShr(Builder.CreateShl(ReloadVal, ExtraBits),
867                                        ExtraBits, "bf.reload.sext");
868     }
869 
870     *Result = ReloadVal;
871   }
872 
873   // Iterate over the components, writing each piece to memory.
874   for (unsigned i = 0, e = Info.getNumComponents(); i != e; ++i) {
875     const CGBitFieldInfo::AccessInfo &AI = Info.getComponent(i);
876 
877     // Get the field pointer.
878     llvm::Value *Ptr = Dst.getBitFieldBaseAddr();
879 
880     // Only offset by the field index if used, so that incoming values are not
881     // required to be structures.
882     if (AI.FieldIndex)
883       Ptr = Builder.CreateStructGEP(Ptr, AI.FieldIndex, "bf.field");
884 
885     // Offset by the byte offset, if used.
886     if (AI.FieldByteOffset) {
887       const llvm::Type *i8PTy = llvm::Type::getInt8PtrTy(VMContext);
888       Ptr = Builder.CreateBitCast(Ptr, i8PTy);
889       Ptr = Builder.CreateConstGEP1_32(Ptr, AI.FieldByteOffset,"bf.field.offs");
890     }
891 
892     // Cast to the access type.
893     const llvm::Type *PTy = llvm::Type::getIntNPtrTy(VMContext, AI.AccessWidth,
894                                                      Ty.getAddressSpace());
895     Ptr = Builder.CreateBitCast(Ptr, PTy);
896 
897     // Extract the piece of the bit-field value to write in this access, limited
898     // to the values that are part of this access.
899     llvm::Value *Val = SrcVal;
900     if (AI.TargetBitOffset)
901       Val = Builder.CreateLShr(Val, AI.TargetBitOffset);
902     Val = Builder.CreateAnd(Val, llvm::APInt::getLowBitsSet(ResSizeInBits,
903                                                             AI.TargetBitWidth));
904 
905     // Extend or truncate to the access size.
906     const llvm::Type *AccessLTy =
907       llvm::Type::getIntNTy(VMContext, AI.AccessWidth);
908     if (ResSizeInBits < AI.AccessWidth)
909       Val = Builder.CreateZExt(Val, AccessLTy);
910     else if (ResSizeInBits > AI.AccessWidth)
911       Val = Builder.CreateTrunc(Val, AccessLTy);
912 
913     // Shift into the position in memory.
914     if (AI.FieldBitStart)
915       Val = Builder.CreateShl(Val, AI.FieldBitStart);
916 
917     // If necessary, load and OR in bits that are outside of the bit-field.
918     if (AI.TargetBitWidth != AI.AccessWidth) {
919       llvm::LoadInst *Load = Builder.CreateLoad(Ptr, Dst.isVolatileQualified());
920       if (AI.AccessAlignment)
921         Load->setAlignment(AI.AccessAlignment);
922 
923       // Compute the mask for zeroing the bits that are part of the bit-field.
924       llvm::APInt InvMask =
925         ~llvm::APInt::getBitsSet(AI.AccessWidth, AI.FieldBitStart,
926                                  AI.FieldBitStart + AI.TargetBitWidth);
927 
928       // Apply the mask and OR in to the value to write.
929       Val = Builder.CreateOr(Builder.CreateAnd(Load, InvMask), Val);
930     }
931 
932     // Write the value.
933     llvm::StoreInst *Store = Builder.CreateStore(Val, Ptr,
934                                                  Dst.isVolatileQualified());
935     if (AI.AccessAlignment)
936       Store->setAlignment(AI.AccessAlignment);
937   }
938 }
939 
940 void CodeGenFunction::EmitStoreThroughPropertyRefLValue(RValue Src,
941                                                         LValue Dst,
942                                                         QualType Ty) {
943   EmitObjCPropertySet(Dst.getPropertyRefExpr(), Src);
944 }
945 
946 void CodeGenFunction::EmitStoreThroughKVCRefLValue(RValue Src,
947                                                    LValue Dst,
948                                                    QualType Ty) {
949   EmitObjCPropertySet(Dst.getKVCRefExpr(), Src);
950 }
951 
952 void CodeGenFunction::EmitStoreThroughExtVectorComponentLValue(RValue Src,
953                                                                LValue Dst,
954                                                                QualType Ty) {
955   // This access turns into a read/modify/write of the vector.  Load the input
956   // value now.
957   llvm::Value *Vec = Builder.CreateLoad(Dst.getExtVectorAddr(),
958                                         Dst.isVolatileQualified(), "tmp");
959   const llvm::Constant *Elts = Dst.getExtVectorElts();
960 
961   llvm::Value *SrcVal = Src.getScalarVal();
962 
963   if (const VectorType *VTy = Ty->getAs<VectorType>()) {
964     unsigned NumSrcElts = VTy->getNumElements();
965     unsigned NumDstElts =
966        cast<llvm::VectorType>(Vec->getType())->getNumElements();
967     if (NumDstElts == NumSrcElts) {
968       // Use shuffle vector is the src and destination are the same number of
969       // elements and restore the vector mask since it is on the side it will be
970       // stored.
971       llvm::SmallVector<llvm::Constant*, 4> Mask(NumDstElts);
972       for (unsigned i = 0; i != NumSrcElts; ++i) {
973         unsigned InIdx = getAccessedFieldNo(i, Elts);
974         Mask[InIdx] = llvm::ConstantInt::get(Int32Ty, i);
975       }
976 
977       llvm::Value *MaskV = llvm::ConstantVector::get(&Mask[0], Mask.size());
978       Vec = Builder.CreateShuffleVector(SrcVal,
979                                         llvm::UndefValue::get(Vec->getType()),
980                                         MaskV, "tmp");
981     } else if (NumDstElts > NumSrcElts) {
982       // Extended the source vector to the same length and then shuffle it
983       // into the destination.
984       // FIXME: since we're shuffling with undef, can we just use the indices
985       //        into that?  This could be simpler.
986       llvm::SmallVector<llvm::Constant*, 4> ExtMask;
987       unsigned i;
988       for (i = 0; i != NumSrcElts; ++i)
989         ExtMask.push_back(llvm::ConstantInt::get(Int32Ty, i));
990       for (; i != NumDstElts; ++i)
991         ExtMask.push_back(llvm::UndefValue::get(Int32Ty));
992       llvm::Value *ExtMaskV = llvm::ConstantVector::get(&ExtMask[0],
993                                                         ExtMask.size());
994       llvm::Value *ExtSrcVal =
995         Builder.CreateShuffleVector(SrcVal,
996                                     llvm::UndefValue::get(SrcVal->getType()),
997                                     ExtMaskV, "tmp");
998       // build identity
999       llvm::SmallVector<llvm::Constant*, 4> Mask;
1000       for (unsigned i = 0; i != NumDstElts; ++i)
1001         Mask.push_back(llvm::ConstantInt::get(Int32Ty, i));
1002 
1003       // modify when what gets shuffled in
1004       for (unsigned i = 0; i != NumSrcElts; ++i) {
1005         unsigned Idx = getAccessedFieldNo(i, Elts);
1006         Mask[Idx] = llvm::ConstantInt::get(Int32Ty, i+NumDstElts);
1007       }
1008       llvm::Value *MaskV = llvm::ConstantVector::get(&Mask[0], Mask.size());
1009       Vec = Builder.CreateShuffleVector(Vec, ExtSrcVal, MaskV, "tmp");
1010     } else {
1011       // We should never shorten the vector
1012       assert(0 && "unexpected shorten vector length");
1013     }
1014   } else {
1015     // If the Src is a scalar (not a vector) it must be updating one element.
1016     unsigned InIdx = getAccessedFieldNo(0, Elts);
1017     llvm::Value *Elt = llvm::ConstantInt::get(Int32Ty, InIdx);
1018     Vec = Builder.CreateInsertElement(Vec, SrcVal, Elt, "tmp");
1019   }
1020 
1021   Builder.CreateStore(Vec, Dst.getExtVectorAddr(), Dst.isVolatileQualified());
1022 }
1023 
1024 // setObjCGCLValueClass - sets class of he lvalue for the purpose of
1025 // generating write-barries API. It is currently a global, ivar,
1026 // or neither.
1027 static void setObjCGCLValueClass(const ASTContext &Ctx, const Expr *E,
1028                                  LValue &LV) {
1029   if (Ctx.getLangOptions().getGCMode() == LangOptions::NonGC)
1030     return;
1031 
1032   if (isa<ObjCIvarRefExpr>(E)) {
1033     LV.setObjCIvar(true);
1034     ObjCIvarRefExpr *Exp = cast<ObjCIvarRefExpr>(const_cast<Expr*>(E));
1035     LV.setBaseIvarExp(Exp->getBase());
1036     LV.setObjCArray(E->getType()->isArrayType());
1037     return;
1038   }
1039 
1040   if (const DeclRefExpr *Exp = dyn_cast<DeclRefExpr>(E)) {
1041     if (const VarDecl *VD = dyn_cast<VarDecl>(Exp->getDecl())) {
1042       if ((VD->isBlockVarDecl() && !VD->hasLocalStorage()) ||
1043           VD->isFileVarDecl()) {
1044         LV.setGlobalObjCRef(true);
1045         LV.setThreadLocalRef(VD->isThreadSpecified());
1046       }
1047     }
1048     LV.setObjCArray(E->getType()->isArrayType());
1049     return;
1050   }
1051 
1052   if (const UnaryOperator *Exp = dyn_cast<UnaryOperator>(E)) {
1053     setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV);
1054     return;
1055   }
1056 
1057   if (const ParenExpr *Exp = dyn_cast<ParenExpr>(E)) {
1058     setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV);
1059     if (LV.isObjCIvar()) {
1060       // If cast is to a structure pointer, follow gcc's behavior and make it
1061       // a non-ivar write-barrier.
1062       QualType ExpTy = E->getType();
1063       if (ExpTy->isPointerType())
1064         ExpTy = ExpTy->getAs<PointerType>()->getPointeeType();
1065       if (ExpTy->isRecordType())
1066         LV.setObjCIvar(false);
1067     }
1068     return;
1069   }
1070   if (const ImplicitCastExpr *Exp = dyn_cast<ImplicitCastExpr>(E)) {
1071     setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV);
1072     return;
1073   }
1074 
1075   if (const CStyleCastExpr *Exp = dyn_cast<CStyleCastExpr>(E)) {
1076     setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV);
1077     return;
1078   }
1079 
1080   if (const ArraySubscriptExpr *Exp = dyn_cast<ArraySubscriptExpr>(E)) {
1081     setObjCGCLValueClass(Ctx, Exp->getBase(), LV);
1082     if (LV.isObjCIvar() && !LV.isObjCArray())
1083       // Using array syntax to assigning to what an ivar points to is not
1084       // same as assigning to the ivar itself. {id *Names;} Names[i] = 0;
1085       LV.setObjCIvar(false);
1086     else if (LV.isGlobalObjCRef() && !LV.isObjCArray())
1087       // Using array syntax to assigning to what global points to is not
1088       // same as assigning to the global itself. {id *G;} G[i] = 0;
1089       LV.setGlobalObjCRef(false);
1090     return;
1091   }
1092 
1093   if (const MemberExpr *Exp = dyn_cast<MemberExpr>(E)) {
1094     setObjCGCLValueClass(Ctx, Exp->getBase(), LV);
1095     // We don't know if member is an 'ivar', but this flag is looked at
1096     // only in the context of LV.isObjCIvar().
1097     LV.setObjCArray(E->getType()->isArrayType());
1098     return;
1099   }
1100 }
1101 
1102 static LValue EmitGlobalVarDeclLValue(CodeGenFunction &CGF,
1103                                       const Expr *E, const VarDecl *VD) {
1104   assert((VD->hasExternalStorage() || VD->isFileVarDecl()) &&
1105          "Var decl must have external storage or be a file var decl!");
1106 
1107   llvm::Value *V = CGF.CGM.GetAddrOfGlobalVar(VD);
1108   if (VD->getType()->isReferenceType())
1109     V = CGF.Builder.CreateLoad(V, "tmp");
1110   unsigned Alignment = CGF.getContext().getDeclAlign(VD).getQuantity();
1111   LValue LV = CGF.MakeAddrLValue(V, E->getType(), Alignment);
1112   setObjCGCLValueClass(CGF.getContext(), E, LV);
1113   return LV;
1114 }
1115 
1116 static LValue EmitFunctionDeclLValue(CodeGenFunction &CGF,
1117                                       const Expr *E, const FunctionDecl *FD) {
1118   llvm::Value *V = CGF.CGM.GetAddrOfFunction(FD);
1119   if (!FD->hasPrototype()) {
1120     if (const FunctionProtoType *Proto =
1121             FD->getType()->getAs<FunctionProtoType>()) {
1122       // Ugly case: for a K&R-style definition, the type of the definition
1123       // isn't the same as the type of a use.  Correct for this with a
1124       // bitcast.
1125       QualType NoProtoType =
1126           CGF.getContext().getFunctionNoProtoType(Proto->getResultType());
1127       NoProtoType = CGF.getContext().getPointerType(NoProtoType);
1128       V = CGF.Builder.CreateBitCast(V, CGF.ConvertType(NoProtoType), "tmp");
1129     }
1130   }
1131   unsigned Alignment = CGF.getContext().getDeclAlign(FD).getQuantity();
1132   return CGF.MakeAddrLValue(V, E->getType(), Alignment);
1133 }
1134 
1135 LValue CodeGenFunction::EmitDeclRefLValue(const DeclRefExpr *E) {
1136   const NamedDecl *ND = E->getDecl();
1137   unsigned Alignment = CGF.getContext().getDeclAlign(ND).getQuantity();
1138 
1139   if (ND->hasAttr<WeakRefAttr>()) {
1140     const ValueDecl *VD = cast<ValueDecl>(ND);
1141     llvm::Constant *Aliasee = CGM.GetWeakRefReference(VD);
1142     return MakeAddrLValue(Aliasee, E->getType(), Alignment);
1143   }
1144 
1145   if (const VarDecl *VD = dyn_cast<VarDecl>(ND)) {
1146 
1147     // Check if this is a global variable.
1148     if (VD->hasExternalStorage() || VD->isFileVarDecl())
1149       return EmitGlobalVarDeclLValue(*this, E, VD);
1150 
1151     bool NonGCable = VD->hasLocalStorage() && !VD->hasAttr<BlocksAttr>();
1152 
1153     llvm::Value *V = LocalDeclMap[VD];
1154     if (!V && VD->isStaticLocal())
1155       V = CGM.getStaticLocalDeclAddress(VD);
1156     assert(V && "DeclRefExpr not entered in LocalDeclMap?");
1157 
1158     if (VD->hasAttr<BlocksAttr>()) {
1159       V = Builder.CreateStructGEP(V, 1, "forwarding");
1160       V = Builder.CreateLoad(V);
1161       V = Builder.CreateStructGEP(V, getByRefValueLLVMField(VD),
1162                                   VD->getNameAsString());
1163     }
1164     if (VD->getType()->isReferenceType())
1165       V = Builder.CreateLoad(V, "tmp");
1166 
1167     LValue LV = MakeAddrLValue(V, E->getType(), Alignment);
1168     if (NonGCable) {
1169       LV.getQuals().removeObjCGCAttr();
1170       LV.setNonGC(true);
1171     }
1172     setObjCGCLValueClass(getContext(), E, LV);
1173     return LV;
1174   }
1175 
1176   // If we're emitting an instance method as an independent lvalue,
1177   // we're actually emitting a member pointer.
1178   if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(ND))
1179     if (MD->isInstance()) {
1180       llvm::Value *V = CGM.getCXXABI().EmitMemberPointer(MD);
1181       return MakeAddrLValue(V, MD->getType(), Alignment);
1182     }
1183   if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(ND))
1184     return EmitFunctionDeclLValue(*this, E, FD);
1185 
1186   // If we're emitting a field as an independent lvalue, we're
1187   // actually emitting a member pointer.
1188   if (const FieldDecl *FD = dyn_cast<FieldDecl>(ND)) {
1189     llvm::Value *V = CGM.getCXXABI().EmitMemberPointer(FD);
1190     return MakeAddrLValue(V, FD->getType(), Alignment);
1191   }
1192 
1193   assert(false && "Unhandled DeclRefExpr");
1194 
1195   // an invalid LValue, but the assert will
1196   // ensure that this point is never reached.
1197   return LValue();
1198 }
1199 
1200 LValue CodeGenFunction::EmitBlockDeclRefLValue(const BlockDeclRefExpr *E) {
1201   unsigned Alignment =
1202     CGF.getContext().getDeclAlign(E->getDecl()).getQuantity();
1203   return MakeAddrLValue(GetAddrOfBlockDecl(E), E->getType(), Alignment);
1204 }
1205 
1206 LValue CodeGenFunction::EmitUnaryOpLValue(const UnaryOperator *E) {
1207   // __extension__ doesn't affect lvalue-ness.
1208   if (E->getOpcode() == UO_Extension)
1209     return EmitLValue(E->getSubExpr());
1210 
1211   QualType ExprTy = getContext().getCanonicalType(E->getSubExpr()->getType());
1212   switch (E->getOpcode()) {
1213   default: assert(0 && "Unknown unary operator lvalue!");
1214   case UO_Deref: {
1215     QualType T = E->getSubExpr()->getType()->getPointeeType();
1216     assert(!T.isNull() && "CodeGenFunction::EmitUnaryOpLValue: Illegal type");
1217 
1218     LValue LV = MakeAddrLValue(EmitScalarExpr(E->getSubExpr()), T);
1219     LV.getQuals().setAddressSpace(ExprTy.getAddressSpace());
1220 
1221     // We should not generate __weak write barrier on indirect reference
1222     // of a pointer to object; as in void foo (__weak id *param); *param = 0;
1223     // But, we continue to generate __strong write barrier on indirect write
1224     // into a pointer to object.
1225     if (getContext().getLangOptions().ObjC1 &&
1226         getContext().getLangOptions().getGCMode() != LangOptions::NonGC &&
1227         LV.isObjCWeak())
1228       LV.setNonGC(!E->isOBJCGCCandidate(getContext()));
1229     return LV;
1230   }
1231   case UO_Real:
1232   case UO_Imag: {
1233     LValue LV = EmitLValue(E->getSubExpr());
1234     unsigned Idx = E->getOpcode() == UO_Imag;
1235     return MakeAddrLValue(Builder.CreateStructGEP(LV.getAddress(),
1236                                                     Idx, "idx"),
1237                           ExprTy);
1238   }
1239   case UO_PreInc:
1240   case UO_PreDec: {
1241     LValue LV = EmitLValue(E->getSubExpr());
1242     bool isInc = E->getOpcode() == UO_PreInc;
1243 
1244     if (E->getType()->isAnyComplexType())
1245       EmitComplexPrePostIncDec(E, LV, isInc, true/*isPre*/);
1246     else
1247       EmitScalarPrePostIncDec(E, LV, isInc, true/*isPre*/);
1248     return LV;
1249   }
1250   }
1251 }
1252 
1253 LValue CodeGenFunction::EmitStringLiteralLValue(const StringLiteral *E) {
1254   return MakeAddrLValue(CGM.GetAddrOfConstantStringFromLiteral(E),
1255                         E->getType());
1256 }
1257 
1258 LValue CodeGenFunction::EmitObjCEncodeExprLValue(const ObjCEncodeExpr *E) {
1259   return MakeAddrLValue(CGM.GetAddrOfConstantStringFromObjCEncode(E),
1260                         E->getType());
1261 }
1262 
1263 
1264 LValue CodeGenFunction::EmitPredefinedLValue(const PredefinedExpr *E) {
1265   switch (E->getIdentType()) {
1266   default:
1267     return EmitUnsupportedLValue(E, "predefined expression");
1268 
1269   case PredefinedExpr::Func:
1270   case PredefinedExpr::Function:
1271   case PredefinedExpr::PrettyFunction: {
1272     unsigned Type = E->getIdentType();
1273     std::string GlobalVarName;
1274 
1275     switch (Type) {
1276     default: assert(0 && "Invalid type");
1277     case PredefinedExpr::Func:
1278       GlobalVarName = "__func__.";
1279       break;
1280     case PredefinedExpr::Function:
1281       GlobalVarName = "__FUNCTION__.";
1282       break;
1283     case PredefinedExpr::PrettyFunction:
1284       GlobalVarName = "__PRETTY_FUNCTION__.";
1285       break;
1286     }
1287 
1288     llvm::StringRef FnName = CurFn->getName();
1289     if (FnName.startswith("\01"))
1290       FnName = FnName.substr(1);
1291     GlobalVarName += FnName;
1292 
1293     const Decl *CurDecl = CurCodeDecl;
1294     if (CurDecl == 0)
1295       CurDecl = getContext().getTranslationUnitDecl();
1296 
1297     std::string FunctionName =
1298       PredefinedExpr::ComputeName((PredefinedExpr::IdentType)Type, CurDecl);
1299 
1300     llvm::Constant *C =
1301       CGM.GetAddrOfConstantCString(FunctionName, GlobalVarName.c_str());
1302     return MakeAddrLValue(C, E->getType());
1303   }
1304   }
1305 }
1306 
1307 llvm::BasicBlock *CodeGenFunction::getTrapBB() {
1308   const CodeGenOptions &GCO = CGM.getCodeGenOpts();
1309 
1310   // If we are not optimzing, don't collapse all calls to trap in the function
1311   // to the same call, that way, in the debugger they can see which operation
1312   // did in fact fail.  If we are optimizing, we collapse all calls to trap down
1313   // to just one per function to save on codesize.
1314   if (GCO.OptimizationLevel && TrapBB)
1315     return TrapBB;
1316 
1317   llvm::BasicBlock *Cont = 0;
1318   if (HaveInsertPoint()) {
1319     Cont = createBasicBlock("cont");
1320     EmitBranch(Cont);
1321   }
1322   TrapBB = createBasicBlock("trap");
1323   EmitBlock(TrapBB);
1324 
1325   llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::trap, 0, 0);
1326   llvm::CallInst *TrapCall = Builder.CreateCall(F);
1327   TrapCall->setDoesNotReturn();
1328   TrapCall->setDoesNotThrow();
1329   Builder.CreateUnreachable();
1330 
1331   if (Cont)
1332     EmitBlock(Cont);
1333   return TrapBB;
1334 }
1335 
1336 /// isSimpleArrayDecayOperand - If the specified expr is a simple decay from an
1337 /// array to pointer, return the array subexpression.
1338 static const Expr *isSimpleArrayDecayOperand(const Expr *E) {
1339   // If this isn't just an array->pointer decay, bail out.
1340   const CastExpr *CE = dyn_cast<CastExpr>(E);
1341   if (CE == 0 || CE->getCastKind() != CK_ArrayToPointerDecay)
1342     return 0;
1343 
1344   // If this is a decay from variable width array, bail out.
1345   const Expr *SubExpr = CE->getSubExpr();
1346   if (SubExpr->getType()->isVariableArrayType())
1347     return 0;
1348 
1349   return SubExpr;
1350 }
1351 
1352 LValue CodeGenFunction::EmitArraySubscriptExpr(const ArraySubscriptExpr *E) {
1353   // The index must always be an integer, which is not an aggregate.  Emit it.
1354   llvm::Value *Idx = EmitScalarExpr(E->getIdx());
1355   QualType IdxTy  = E->getIdx()->getType();
1356   bool IdxSigned = IdxTy->isSignedIntegerType();
1357 
1358   // If the base is a vector type, then we are forming a vector element lvalue
1359   // with this subscript.
1360   if (E->getBase()->getType()->isVectorType()) {
1361     // Emit the vector as an lvalue to get its address.
1362     LValue LHS = EmitLValue(E->getBase());
1363     assert(LHS.isSimple() && "Can only subscript lvalue vectors here!");
1364     Idx = Builder.CreateIntCast(Idx, CGF.Int32Ty, IdxSigned, "vidx");
1365     return LValue::MakeVectorElt(LHS.getAddress(), Idx,
1366                                  E->getBase()->getType().getCVRQualifiers());
1367   }
1368 
1369   // Extend or truncate the index type to 32 or 64-bits.
1370   if (!Idx->getType()->isIntegerTy(LLVMPointerWidth))
1371     Idx = Builder.CreateIntCast(Idx, IntPtrTy,
1372                                 IdxSigned, "idxprom");
1373 
1374   // FIXME: As llvm implements the object size checking, this can come out.
1375   if (CatchUndefined) {
1376     if (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E->getBase())){
1377       if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(ICE->getSubExpr())) {
1378         if (ICE->getCastKind() == CK_ArrayToPointerDecay) {
1379           if (const ConstantArrayType *CAT
1380               = getContext().getAsConstantArrayType(DRE->getType())) {
1381             llvm::APInt Size = CAT->getSize();
1382             llvm::BasicBlock *Cont = createBasicBlock("cont");
1383             Builder.CreateCondBr(Builder.CreateICmpULE(Idx,
1384                                   llvm::ConstantInt::get(Idx->getType(), Size)),
1385                                  Cont, getTrapBB());
1386             EmitBlock(Cont);
1387           }
1388         }
1389       }
1390     }
1391   }
1392 
1393   // We know that the pointer points to a type of the correct size, unless the
1394   // size is a VLA or Objective-C interface.
1395   llvm::Value *Address = 0;
1396   if (const VariableArrayType *VAT =
1397         getContext().getAsVariableArrayType(E->getType())) {
1398     llvm::Value *VLASize = GetVLASize(VAT);
1399 
1400     Idx = Builder.CreateMul(Idx, VLASize);
1401 
1402     QualType BaseType = getContext().getBaseElementType(VAT);
1403 
1404     CharUnits BaseTypeSize = getContext().getTypeSizeInChars(BaseType);
1405     Idx = Builder.CreateUDiv(Idx,
1406                              llvm::ConstantInt::get(Idx->getType(),
1407                                  BaseTypeSize.getQuantity()));
1408 
1409     // The base must be a pointer, which is not an aggregate.  Emit it.
1410     llvm::Value *Base = EmitScalarExpr(E->getBase());
1411 
1412     Address = Builder.CreateInBoundsGEP(Base, Idx, "arrayidx");
1413   } else if (const ObjCObjectType *OIT = E->getType()->getAs<ObjCObjectType>()){
1414     // Indexing over an interface, as in "NSString *P; P[4];"
1415     llvm::Value *InterfaceSize =
1416       llvm::ConstantInt::get(Idx->getType(),
1417           getContext().getTypeSizeInChars(OIT).getQuantity());
1418 
1419     Idx = Builder.CreateMul(Idx, InterfaceSize);
1420 
1421     const llvm::Type *i8PTy = llvm::Type::getInt8PtrTy(VMContext);
1422 
1423     // The base must be a pointer, which is not an aggregate.  Emit it.
1424     llvm::Value *Base = EmitScalarExpr(E->getBase());
1425     Address = Builder.CreateGEP(Builder.CreateBitCast(Base, i8PTy),
1426                                 Idx, "arrayidx");
1427     Address = Builder.CreateBitCast(Address, Base->getType());
1428   } else if (const Expr *Array = isSimpleArrayDecayOperand(E->getBase())) {
1429     // If this is A[i] where A is an array, the frontend will have decayed the
1430     // base to be a ArrayToPointerDecay implicit cast.  While correct, it is
1431     // inefficient at -O0 to emit a "gep A, 0, 0" when codegen'ing it, then a
1432     // "gep x, i" here.  Emit one "gep A, 0, i".
1433     assert(Array->getType()->isArrayType() &&
1434            "Array to pointer decay must have array source type!");
1435     llvm::Value *ArrayPtr = EmitLValue(Array).getAddress();
1436     llvm::Value *Zero = llvm::ConstantInt::get(Int32Ty, 0);
1437     llvm::Value *Args[] = { Zero, Idx };
1438 
1439     Address = Builder.CreateInBoundsGEP(ArrayPtr, Args, Args+2, "arrayidx");
1440   } else {
1441     // The base must be a pointer, which is not an aggregate.  Emit it.
1442     llvm::Value *Base = EmitScalarExpr(E->getBase());
1443     Address = Builder.CreateInBoundsGEP(Base, Idx, "arrayidx");
1444   }
1445 
1446   QualType T = E->getBase()->getType()->getPointeeType();
1447   assert(!T.isNull() &&
1448          "CodeGenFunction::EmitArraySubscriptExpr(): Illegal base type");
1449 
1450   LValue LV = MakeAddrLValue(Address, T);
1451   LV.getQuals().setAddressSpace(E->getBase()->getType().getAddressSpace());
1452 
1453   if (getContext().getLangOptions().ObjC1 &&
1454       getContext().getLangOptions().getGCMode() != LangOptions::NonGC) {
1455     LV.setNonGC(!E->isOBJCGCCandidate(getContext()));
1456     setObjCGCLValueClass(getContext(), E, LV);
1457   }
1458   return LV;
1459 }
1460 
1461 static
1462 llvm::Constant *GenerateConstantVector(llvm::LLVMContext &VMContext,
1463                                        llvm::SmallVector<unsigned, 4> &Elts) {
1464   llvm::SmallVector<llvm::Constant*, 4> CElts;
1465 
1466   const llvm::Type *Int32Ty = llvm::Type::getInt32Ty(VMContext);
1467   for (unsigned i = 0, e = Elts.size(); i != e; ++i)
1468     CElts.push_back(llvm::ConstantInt::get(Int32Ty, Elts[i]));
1469 
1470   return llvm::ConstantVector::get(&CElts[0], CElts.size());
1471 }
1472 
1473 LValue CodeGenFunction::
1474 EmitExtVectorElementExpr(const ExtVectorElementExpr *E) {
1475   // Emit the base vector as an l-value.
1476   LValue Base;
1477 
1478   // ExtVectorElementExpr's base can either be a vector or pointer to vector.
1479   if (E->isArrow()) {
1480     // If it is a pointer to a vector, emit the address and form an lvalue with
1481     // it.
1482     llvm::Value *Ptr = EmitScalarExpr(E->getBase());
1483     const PointerType *PT = E->getBase()->getType()->getAs<PointerType>();
1484     Base = MakeAddrLValue(Ptr, PT->getPointeeType());
1485     Base.getQuals().removeObjCGCAttr();
1486   } else if (E->getBase()->isLvalue(getContext()) == Expr::LV_Valid) {
1487     // Otherwise, if the base is an lvalue ( as in the case of foo.x.x),
1488     // emit the base as an lvalue.
1489     assert(E->getBase()->getType()->isVectorType());
1490     Base = EmitLValue(E->getBase());
1491   } else {
1492     // Otherwise, the base is a normal rvalue (as in (V+V).x), emit it as such.
1493     assert(E->getBase()->getType()->getAs<VectorType>() &&
1494            "Result must be a vector");
1495     llvm::Value *Vec = EmitScalarExpr(E->getBase());
1496 
1497     // Store the vector to memory (because LValue wants an address).
1498     llvm::Value *VecMem = CreateMemTemp(E->getBase()->getType());
1499     Builder.CreateStore(Vec, VecMem);
1500     Base = MakeAddrLValue(VecMem, E->getBase()->getType());
1501   }
1502 
1503   // Encode the element access list into a vector of unsigned indices.
1504   llvm::SmallVector<unsigned, 4> Indices;
1505   E->getEncodedElementAccess(Indices);
1506 
1507   if (Base.isSimple()) {
1508     llvm::Constant *CV = GenerateConstantVector(VMContext, Indices);
1509     return LValue::MakeExtVectorElt(Base.getAddress(), CV,
1510                                     Base.getVRQualifiers());
1511   }
1512   assert(Base.isExtVectorElt() && "Can only subscript lvalue vec elts here!");
1513 
1514   llvm::Constant *BaseElts = Base.getExtVectorElts();
1515   llvm::SmallVector<llvm::Constant *, 4> CElts;
1516 
1517   for (unsigned i = 0, e = Indices.size(); i != e; ++i) {
1518     if (isa<llvm::ConstantAggregateZero>(BaseElts))
1519       CElts.push_back(llvm::ConstantInt::get(Int32Ty, 0));
1520     else
1521       CElts.push_back(cast<llvm::Constant>(BaseElts->getOperand(Indices[i])));
1522   }
1523   llvm::Constant *CV = llvm::ConstantVector::get(&CElts[0], CElts.size());
1524   return LValue::MakeExtVectorElt(Base.getExtVectorAddr(), CV,
1525                                   Base.getVRQualifiers());
1526 }
1527 
1528 LValue CodeGenFunction::EmitMemberExpr(const MemberExpr *E) {
1529   bool isNonGC = false;
1530   Expr *BaseExpr = E->getBase();
1531   llvm::Value *BaseValue = NULL;
1532   Qualifiers BaseQuals;
1533 
1534   // If this is s.x, emit s as an lvalue.  If it is s->x, emit s as a scalar.
1535   if (E->isArrow()) {
1536     BaseValue = EmitScalarExpr(BaseExpr);
1537     const PointerType *PTy =
1538       BaseExpr->getType()->getAs<PointerType>();
1539     BaseQuals = PTy->getPointeeType().getQualifiers();
1540   } else if (isa<ObjCPropertyRefExpr>(BaseExpr->IgnoreParens()) ||
1541              isa<ObjCImplicitSetterGetterRefExpr>(
1542                BaseExpr->IgnoreParens())) {
1543     RValue RV = EmitObjCPropertyGet(BaseExpr);
1544     BaseValue = RV.getAggregateAddr();
1545     BaseQuals = BaseExpr->getType().getQualifiers();
1546   } else {
1547     LValue BaseLV = EmitLValue(BaseExpr);
1548     if (BaseLV.isNonGC())
1549       isNonGC = true;
1550     // FIXME: this isn't right for bitfields.
1551     BaseValue = BaseLV.getAddress();
1552     QualType BaseTy = BaseExpr->getType();
1553     BaseQuals = BaseTy.getQualifiers();
1554   }
1555 
1556   NamedDecl *ND = E->getMemberDecl();
1557   if (FieldDecl *Field = dyn_cast<FieldDecl>(ND)) {
1558     LValue LV = EmitLValueForField(BaseValue, Field,
1559                                    BaseQuals.getCVRQualifiers());
1560     LV.setNonGC(isNonGC);
1561     setObjCGCLValueClass(getContext(), E, LV);
1562     return LV;
1563   }
1564 
1565   if (VarDecl *VD = dyn_cast<VarDecl>(ND))
1566     return EmitGlobalVarDeclLValue(*this, E, VD);
1567 
1568   if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(ND))
1569     return EmitFunctionDeclLValue(*this, E, FD);
1570 
1571   assert(false && "Unhandled member declaration!");
1572   return LValue();
1573 }
1574 
1575 LValue CodeGenFunction::EmitLValueForBitfield(llvm::Value *BaseValue,
1576                                               const FieldDecl *Field,
1577                                               unsigned CVRQualifiers) {
1578   const CGRecordLayout &RL =
1579     CGM.getTypes().getCGRecordLayout(Field->getParent());
1580   const CGBitFieldInfo &Info = RL.getBitFieldInfo(Field);
1581   return LValue::MakeBitfield(BaseValue, Info,
1582                              Field->getType().getCVRQualifiers()|CVRQualifiers);
1583 }
1584 
1585 /// EmitLValueForAnonRecordField - Given that the field is a member of
1586 /// an anonymous struct or union buried inside a record, and given
1587 /// that the base value is a pointer to the enclosing record, derive
1588 /// an lvalue for the ultimate field.
1589 LValue CodeGenFunction::EmitLValueForAnonRecordField(llvm::Value *BaseValue,
1590                                                      const FieldDecl *Field,
1591                                                      unsigned CVRQualifiers) {
1592   llvm::SmallVector<const FieldDecl *, 8> Path;
1593   Path.push_back(Field);
1594 
1595   while (Field->getParent()->isAnonymousStructOrUnion()) {
1596     const ValueDecl *VD = Field->getParent()->getAnonymousStructOrUnionObject();
1597     if (!isa<FieldDecl>(VD)) break;
1598     Field = cast<FieldDecl>(VD);
1599     Path.push_back(Field);
1600   }
1601 
1602   llvm::SmallVectorImpl<const FieldDecl*>::reverse_iterator
1603     I = Path.rbegin(), E = Path.rend();
1604   while (true) {
1605     LValue LV = EmitLValueForField(BaseValue, *I, CVRQualifiers);
1606     if (++I == E) return LV;
1607 
1608     assert(LV.isSimple());
1609     BaseValue = LV.getAddress();
1610     CVRQualifiers |= LV.getVRQualifiers();
1611   }
1612 }
1613 
1614 LValue CodeGenFunction::EmitLValueForField(llvm::Value *BaseValue,
1615                                            const FieldDecl *Field,
1616                                            unsigned CVRQualifiers) {
1617   if (Field->isBitField())
1618     return EmitLValueForBitfield(BaseValue, Field, CVRQualifiers);
1619 
1620   const CGRecordLayout &RL =
1621     CGM.getTypes().getCGRecordLayout(Field->getParent());
1622   unsigned idx = RL.getLLVMFieldNo(Field);
1623   llvm::Value *V = Builder.CreateStructGEP(BaseValue, idx, "tmp");
1624 
1625   // Match union field type.
1626   if (Field->getParent()->isUnion()) {
1627     const llvm::Type *FieldTy =
1628       CGM.getTypes().ConvertTypeForMem(Field->getType());
1629     const llvm::PointerType *BaseTy =
1630       cast<llvm::PointerType>(BaseValue->getType());
1631     unsigned AS = BaseTy->getAddressSpace();
1632     V = Builder.CreateBitCast(V,
1633                               llvm::PointerType::get(FieldTy, AS),
1634                               "tmp");
1635   }
1636   if (Field->getType()->isReferenceType())
1637     V = Builder.CreateLoad(V, "tmp");
1638 
1639   unsigned Alignment = getContext().getDeclAlign(Field).getQuantity();
1640   LValue LV = MakeAddrLValue(V, Field->getType(), Alignment);
1641   LV.getQuals().addCVRQualifiers(CVRQualifiers);
1642 
1643   // __weak attribute on a field is ignored.
1644   if (LV.getQuals().getObjCGCAttr() == Qualifiers::Weak)
1645     LV.getQuals().removeObjCGCAttr();
1646 
1647   return LV;
1648 }
1649 
1650 LValue
1651 CodeGenFunction::EmitLValueForFieldInitialization(llvm::Value *BaseValue,
1652                                                   const FieldDecl *Field,
1653                                                   unsigned CVRQualifiers) {
1654   QualType FieldType = Field->getType();
1655 
1656   if (!FieldType->isReferenceType())
1657     return EmitLValueForField(BaseValue, Field, CVRQualifiers);
1658 
1659   const CGRecordLayout &RL =
1660     CGM.getTypes().getCGRecordLayout(Field->getParent());
1661   unsigned idx = RL.getLLVMFieldNo(Field);
1662   llvm::Value *V = Builder.CreateStructGEP(BaseValue, idx, "tmp");
1663 
1664   assert(!FieldType.getObjCGCAttr() && "fields cannot have GC attrs");
1665 
1666   unsigned Alignment = getContext().getDeclAlign(Field).getQuantity();
1667   return MakeAddrLValue(V, FieldType, Alignment);
1668 }
1669 
1670 LValue CodeGenFunction::EmitCompoundLiteralLValue(const CompoundLiteralExpr *E){
1671   llvm::Value *DeclPtr = CreateMemTemp(E->getType(), ".compoundliteral");
1672   const Expr *InitExpr = E->getInitializer();
1673   LValue Result = MakeAddrLValue(DeclPtr, E->getType());
1674 
1675   EmitAnyExprToMem(InitExpr, DeclPtr, /*Volatile*/ false, /*Init*/ true);
1676 
1677   return Result;
1678 }
1679 
1680 LValue
1681 CodeGenFunction::EmitConditionalOperatorLValue(const ConditionalOperator *E) {
1682   if (E->isLvalue(getContext()) == Expr::LV_Valid) {
1683     if (int Cond = ConstantFoldsToSimpleInteger(E->getCond())) {
1684       Expr *Live = Cond == 1 ? E->getLHS() : E->getRHS();
1685       if (Live)
1686         return EmitLValue(Live);
1687     }
1688 
1689     if (!E->getLHS())
1690       return EmitUnsupportedLValue(E, "conditional operator with missing LHS");
1691 
1692     llvm::BasicBlock *LHSBlock = createBasicBlock("cond.true");
1693     llvm::BasicBlock *RHSBlock = createBasicBlock("cond.false");
1694     llvm::BasicBlock *ContBlock = createBasicBlock("cond.end");
1695 
1696     EmitBranchOnBoolExpr(E->getCond(), LHSBlock, RHSBlock);
1697 
1698     // Any temporaries created here are conditional.
1699     BeginConditionalBranch();
1700     EmitBlock(LHSBlock);
1701     LValue LHS = EmitLValue(E->getLHS());
1702     EndConditionalBranch();
1703 
1704     if (!LHS.isSimple())
1705       return EmitUnsupportedLValue(E, "conditional operator");
1706 
1707     // FIXME: We shouldn't need an alloca for this.
1708     llvm::Value *Temp = CreateTempAlloca(LHS.getAddress()->getType(),"condtmp");
1709     Builder.CreateStore(LHS.getAddress(), Temp);
1710     EmitBranch(ContBlock);
1711 
1712     // Any temporaries created here are conditional.
1713     BeginConditionalBranch();
1714     EmitBlock(RHSBlock);
1715     LValue RHS = EmitLValue(E->getRHS());
1716     EndConditionalBranch();
1717     if (!RHS.isSimple())
1718       return EmitUnsupportedLValue(E, "conditional operator");
1719 
1720     Builder.CreateStore(RHS.getAddress(), Temp);
1721     EmitBranch(ContBlock);
1722 
1723     EmitBlock(ContBlock);
1724 
1725     Temp = Builder.CreateLoad(Temp, "lv");
1726     return MakeAddrLValue(Temp, E->getType());
1727   }
1728 
1729   // ?: here should be an aggregate.
1730   assert((hasAggregateLLVMType(E->getType()) &&
1731           !E->getType()->isAnyComplexType()) &&
1732          "Unexpected conditional operator!");
1733 
1734   return EmitAggExprToLValue(E);
1735 }
1736 
1737 /// EmitCastLValue - Casts are never lvalues unless that cast is a dynamic_cast.
1738 /// If the cast is a dynamic_cast, we can have the usual lvalue result,
1739 /// otherwise if a cast is needed by the code generator in an lvalue context,
1740 /// then it must mean that we need the address of an aggregate in order to
1741 /// access one of its fields.  This can happen for all the reasons that casts
1742 /// are permitted with aggregate result, including noop aggregate casts, and
1743 /// cast from scalar to union.
1744 LValue CodeGenFunction::EmitCastLValue(const CastExpr *E) {
1745   switch (E->getCastKind()) {
1746   case CK_ToVoid:
1747     return EmitUnsupportedLValue(E, "unexpected cast lvalue");
1748 
1749   case CK_NoOp:
1750     if (E->getSubExpr()->Classify(getContext()).getKind()
1751                                           != Expr::Classification::CL_PRValue) {
1752       LValue LV = EmitLValue(E->getSubExpr());
1753       if (LV.isPropertyRef() || LV.isKVCRef()) {
1754         QualType QT = E->getSubExpr()->getType();
1755         RValue RV =
1756           LV.isPropertyRef() ? EmitLoadOfPropertyRefLValue(LV, QT)
1757                              : EmitLoadOfKVCRefLValue(LV, QT);
1758         assert(!RV.isScalar() && "EmitCastLValue-scalar cast of property ref");
1759         llvm::Value *V = RV.getAggregateAddr();
1760         return MakeAddrLValue(V, QT);
1761       }
1762       return LV;
1763     }
1764     // Fall through to synthesize a temporary.
1765 
1766   case CK_Unknown:
1767   case CK_BitCast:
1768   case CK_ArrayToPointerDecay:
1769   case CK_FunctionToPointerDecay:
1770   case CK_NullToMemberPointer:
1771   case CK_IntegralToPointer:
1772   case CK_PointerToIntegral:
1773   case CK_VectorSplat:
1774   case CK_IntegralCast:
1775   case CK_IntegralToFloating:
1776   case CK_FloatingToIntegral:
1777   case CK_FloatingCast:
1778   case CK_DerivedToBaseMemberPointer:
1779   case CK_BaseToDerivedMemberPointer:
1780   case CK_MemberPointerToBoolean:
1781   case CK_AnyPointerToBlockPointerCast: {
1782     // These casts only produce lvalues when we're binding a reference to a
1783     // temporary realized from a (converted) pure rvalue. Emit the expression
1784     // as a value, copy it into a temporary, and return an lvalue referring to
1785     // that temporary.
1786     llvm::Value *V = CreateMemTemp(E->getType(), "ref.temp");
1787     EmitAnyExprToMem(E, V, false, false);
1788     return MakeAddrLValue(V, E->getType());
1789   }
1790 
1791   case CK_Dynamic: {
1792     LValue LV = EmitLValue(E->getSubExpr());
1793     llvm::Value *V = LV.getAddress();
1794     const CXXDynamicCastExpr *DCE = cast<CXXDynamicCastExpr>(E);
1795     return MakeAddrLValue(EmitDynamicCast(V, DCE), E->getType());
1796   }
1797 
1798   case CK_ConstructorConversion:
1799   case CK_UserDefinedConversion:
1800   case CK_AnyPointerToObjCPointerCast:
1801     return EmitLValue(E->getSubExpr());
1802 
1803   case CK_UncheckedDerivedToBase:
1804   case CK_DerivedToBase: {
1805     const RecordType *DerivedClassTy =
1806       E->getSubExpr()->getType()->getAs<RecordType>();
1807     CXXRecordDecl *DerivedClassDecl =
1808       cast<CXXRecordDecl>(DerivedClassTy->getDecl());
1809 
1810     LValue LV = EmitLValue(E->getSubExpr());
1811     llvm::Value *This;
1812     if (LV.isPropertyRef() || LV.isKVCRef()) {
1813       QualType QT = E->getSubExpr()->getType();
1814       RValue RV =
1815         LV.isPropertyRef() ? EmitLoadOfPropertyRefLValue(LV, QT)
1816                            : EmitLoadOfKVCRefLValue(LV, QT);
1817       assert (!RV.isScalar() && "EmitCastLValue");
1818       This = RV.getAggregateAddr();
1819     }
1820     else
1821       This = LV.getAddress();
1822 
1823     // Perform the derived-to-base conversion
1824     llvm::Value *Base =
1825       GetAddressOfBaseClass(This, DerivedClassDecl,
1826                             E->path_begin(), E->path_end(),
1827                             /*NullCheckValue=*/false);
1828 
1829     return MakeAddrLValue(Base, E->getType());
1830   }
1831   case CK_ToUnion:
1832     return EmitAggExprToLValue(E);
1833   case CK_BaseToDerived: {
1834     const RecordType *DerivedClassTy = E->getType()->getAs<RecordType>();
1835     CXXRecordDecl *DerivedClassDecl =
1836       cast<CXXRecordDecl>(DerivedClassTy->getDecl());
1837 
1838     LValue LV = EmitLValue(E->getSubExpr());
1839 
1840     // Perform the base-to-derived conversion
1841     llvm::Value *Derived =
1842       GetAddressOfDerivedClass(LV.getAddress(), DerivedClassDecl,
1843                                E->path_begin(), E->path_end(),
1844                                /*NullCheckValue=*/false);
1845 
1846     return MakeAddrLValue(Derived, E->getType());
1847   }
1848   case CK_LValueBitCast: {
1849     // This must be a reinterpret_cast (or c-style equivalent).
1850     const ExplicitCastExpr *CE = cast<ExplicitCastExpr>(E);
1851 
1852     LValue LV = EmitLValue(E->getSubExpr());
1853     llvm::Value *V = Builder.CreateBitCast(LV.getAddress(),
1854                                            ConvertType(CE->getTypeAsWritten()));
1855     return MakeAddrLValue(V, E->getType());
1856   }
1857   case CK_ObjCObjectLValueCast: {
1858     LValue LV = EmitLValue(E->getSubExpr());
1859     QualType ToType = getContext().getLValueReferenceType(E->getType());
1860     llvm::Value *V = Builder.CreateBitCast(LV.getAddress(),
1861                                            ConvertType(ToType));
1862     return MakeAddrLValue(V, E->getType());
1863   }
1864   }
1865 
1866   llvm_unreachable("Unhandled lvalue cast kind?");
1867 }
1868 
1869 LValue CodeGenFunction::EmitNullInitializationLValue(
1870                                               const CXXScalarValueInitExpr *E) {
1871   QualType Ty = E->getType();
1872   LValue LV = MakeAddrLValue(CreateMemTemp(Ty), Ty);
1873   EmitNullInitialization(LV.getAddress(), Ty);
1874   return LV;
1875 }
1876 
1877 //===--------------------------------------------------------------------===//
1878 //                             Expression Emission
1879 //===--------------------------------------------------------------------===//
1880 
1881 
1882 RValue CodeGenFunction::EmitCallExpr(const CallExpr *E,
1883                                      ReturnValueSlot ReturnValue) {
1884   // Builtins never have block type.
1885   if (E->getCallee()->getType()->isBlockPointerType())
1886     return EmitBlockCallExpr(E, ReturnValue);
1887 
1888   if (const CXXMemberCallExpr *CE = dyn_cast<CXXMemberCallExpr>(E))
1889     return EmitCXXMemberCallExpr(CE, ReturnValue);
1890 
1891   const Decl *TargetDecl = 0;
1892   if (const ImplicitCastExpr *CE = dyn_cast<ImplicitCastExpr>(E->getCallee())) {
1893     if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(CE->getSubExpr())) {
1894       TargetDecl = DRE->getDecl();
1895       if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(TargetDecl))
1896         if (unsigned builtinID = FD->getBuiltinID())
1897           return EmitBuiltinExpr(FD, builtinID, E);
1898     }
1899   }
1900 
1901   if (const CXXOperatorCallExpr *CE = dyn_cast<CXXOperatorCallExpr>(E))
1902     if (const CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(TargetDecl))
1903       return EmitCXXOperatorMemberCallExpr(CE, MD, ReturnValue);
1904 
1905   if (isa<CXXPseudoDestructorExpr>(E->getCallee()->IgnoreParens())) {
1906     // C++ [expr.pseudo]p1:
1907     //   The result shall only be used as the operand for the function call
1908     //   operator (), and the result of such a call has type void. The only
1909     //   effect is the evaluation of the postfix-expression before the dot or
1910     //   arrow.
1911     EmitScalarExpr(E->getCallee());
1912     return RValue::get(0);
1913   }
1914 
1915   llvm::Value *Callee = EmitScalarExpr(E->getCallee());
1916   return EmitCall(E->getCallee()->getType(), Callee, ReturnValue,
1917                   E->arg_begin(), E->arg_end(), TargetDecl);
1918 }
1919 
1920 LValue CodeGenFunction::EmitBinaryOperatorLValue(const BinaryOperator *E) {
1921   // Comma expressions just emit their LHS then their RHS as an l-value.
1922   if (E->getOpcode() == BO_Comma) {
1923     EmitAnyExpr(E->getLHS());
1924     EnsureInsertPoint();
1925     return EmitLValue(E->getRHS());
1926   }
1927 
1928   if (E->getOpcode() == BO_PtrMemD ||
1929       E->getOpcode() == BO_PtrMemI)
1930     return EmitPointerToDataMemberBinaryExpr(E);
1931 
1932   // Can only get l-value for binary operator expressions which are a
1933   // simple assignment of aggregate type.
1934   if (E->getOpcode() != BO_Assign)
1935     return EmitUnsupportedLValue(E, "binary l-value expression");
1936 
1937   if (!hasAggregateLLVMType(E->getType())) {
1938     // Emit the LHS as an l-value.
1939     LValue LV = EmitLValue(E->getLHS());
1940     // Store the value through the l-value.
1941     EmitStoreThroughLValue(EmitAnyExpr(E->getRHS()), LV, E->getType());
1942     return LV;
1943   }
1944 
1945   return EmitAggExprToLValue(E);
1946 }
1947 
1948 LValue CodeGenFunction::EmitCallExprLValue(const CallExpr *E) {
1949   RValue RV = EmitCallExpr(E);
1950 
1951   if (!RV.isScalar())
1952     return MakeAddrLValue(RV.getAggregateAddr(), E->getType());
1953 
1954   assert(E->getCallReturnType()->isReferenceType() &&
1955          "Can't have a scalar return unless the return type is a "
1956          "reference type!");
1957 
1958   return MakeAddrLValue(RV.getScalarVal(), E->getType());
1959 }
1960 
1961 LValue CodeGenFunction::EmitVAArgExprLValue(const VAArgExpr *E) {
1962   // FIXME: This shouldn't require another copy.
1963   return EmitAggExprToLValue(E);
1964 }
1965 
1966 LValue CodeGenFunction::EmitCXXConstructLValue(const CXXConstructExpr *E) {
1967   AggValueSlot Slot = CreateAggTemp(E->getType(), "tmp");
1968   EmitCXXConstructExpr(E, Slot);
1969   return MakeAddrLValue(Slot.getAddr(), E->getType());
1970 }
1971 
1972 LValue
1973 CodeGenFunction::EmitCXXTypeidLValue(const CXXTypeidExpr *E) {
1974   return MakeAddrLValue(EmitCXXTypeidExpr(E), E->getType());
1975 }
1976 
1977 LValue
1978 CodeGenFunction::EmitCXXBindTemporaryLValue(const CXXBindTemporaryExpr *E) {
1979   LValue LV = EmitLValue(E->getSubExpr());
1980   EmitCXXTemporary(E->getTemporary(), LV.getAddress());
1981   return LV;
1982 }
1983 
1984 LValue CodeGenFunction::EmitObjCMessageExprLValue(const ObjCMessageExpr *E) {
1985   RValue RV = EmitObjCMessageExpr(E);
1986 
1987   if (!RV.isScalar())
1988     return MakeAddrLValue(RV.getAggregateAddr(), E->getType());
1989 
1990   assert(E->getMethodDecl()->getResultType()->isReferenceType() &&
1991          "Can't have a scalar return unless the return type is a "
1992          "reference type!");
1993 
1994   return MakeAddrLValue(RV.getScalarVal(), E->getType());
1995 }
1996 
1997 LValue CodeGenFunction::EmitObjCSelectorLValue(const ObjCSelectorExpr *E) {
1998   llvm::Value *V =
1999     CGM.getObjCRuntime().GetSelector(Builder, E->getSelector(), true);
2000   return MakeAddrLValue(V, E->getType());
2001 }
2002 
2003 llvm::Value *CodeGenFunction::EmitIvarOffset(const ObjCInterfaceDecl *Interface,
2004                                              const ObjCIvarDecl *Ivar) {
2005   return CGM.getObjCRuntime().EmitIvarOffset(*this, Interface, Ivar);
2006 }
2007 
2008 LValue CodeGenFunction::EmitLValueForIvar(QualType ObjectTy,
2009                                           llvm::Value *BaseValue,
2010                                           const ObjCIvarDecl *Ivar,
2011                                           unsigned CVRQualifiers) {
2012   return CGM.getObjCRuntime().EmitObjCValueForIvar(*this, ObjectTy, BaseValue,
2013                                                    Ivar, CVRQualifiers);
2014 }
2015 
2016 LValue CodeGenFunction::EmitObjCIvarRefLValue(const ObjCIvarRefExpr *E) {
2017   // FIXME: A lot of the code below could be shared with EmitMemberExpr.
2018   llvm::Value *BaseValue = 0;
2019   const Expr *BaseExpr = E->getBase();
2020   Qualifiers BaseQuals;
2021   QualType ObjectTy;
2022   if (E->isArrow()) {
2023     BaseValue = EmitScalarExpr(BaseExpr);
2024     ObjectTy = BaseExpr->getType()->getPointeeType();
2025     BaseQuals = ObjectTy.getQualifiers();
2026   } else {
2027     LValue BaseLV = EmitLValue(BaseExpr);
2028     // FIXME: this isn't right for bitfields.
2029     BaseValue = BaseLV.getAddress();
2030     ObjectTy = BaseExpr->getType();
2031     BaseQuals = ObjectTy.getQualifiers();
2032   }
2033 
2034   LValue LV =
2035     EmitLValueForIvar(ObjectTy, BaseValue, E->getDecl(),
2036                       BaseQuals.getCVRQualifiers());
2037   setObjCGCLValueClass(getContext(), E, LV);
2038   return LV;
2039 }
2040 
2041 LValue
2042 CodeGenFunction::EmitObjCPropertyRefLValue(const ObjCPropertyRefExpr *E) {
2043   // This is a special l-value that just issues sends when we load or store
2044   // through it.
2045   return LValue::MakePropertyRef(E, E->getType().getCVRQualifiers());
2046 }
2047 
2048 LValue CodeGenFunction::EmitObjCKVCRefLValue(
2049                                 const ObjCImplicitSetterGetterRefExpr *E) {
2050   // This is a special l-value that just issues sends when we load or store
2051   // through it.
2052   return LValue::MakeKVCRef(E, E->getType().getCVRQualifiers());
2053 }
2054 
2055 LValue CodeGenFunction::EmitObjCSuperExprLValue(const ObjCSuperExpr *E) {
2056   return EmitUnsupportedLValue(E, "use of super");
2057 }
2058 
2059 LValue CodeGenFunction::EmitStmtExprLValue(const StmtExpr *E) {
2060   // Can only get l-value for message expression returning aggregate type
2061   RValue RV = EmitAnyExprToTemp(E);
2062   return MakeAddrLValue(RV.getAggregateAddr(), E->getType());
2063 }
2064 
2065 RValue CodeGenFunction::EmitCall(QualType CalleeType, llvm::Value *Callee,
2066                                  ReturnValueSlot ReturnValue,
2067                                  CallExpr::const_arg_iterator ArgBeg,
2068                                  CallExpr::const_arg_iterator ArgEnd,
2069                                  const Decl *TargetDecl) {
2070   // Get the actual function type. The callee type will always be a pointer to
2071   // function type or a block pointer type.
2072   assert(CalleeType->isFunctionPointerType() &&
2073          "Call must have function pointer type!");
2074 
2075   CalleeType = getContext().getCanonicalType(CalleeType);
2076 
2077   const FunctionType *FnType
2078     = cast<FunctionType>(cast<PointerType>(CalleeType)->getPointeeType());
2079   QualType ResultType = FnType->getResultType();
2080 
2081   CallArgList Args;
2082   EmitCallArgs(Args, dyn_cast<FunctionProtoType>(FnType), ArgBeg, ArgEnd);
2083 
2084   return EmitCall(CGM.getTypes().getFunctionInfo(Args, FnType),
2085                   Callee, ReturnValue, Args, TargetDecl);
2086 }
2087 
2088 LValue CodeGenFunction::
2089 EmitPointerToDataMemberBinaryExpr(const BinaryOperator *E) {
2090   llvm::Value *BaseV;
2091   if (E->getOpcode() == BO_PtrMemI)
2092     BaseV = EmitScalarExpr(E->getLHS());
2093   else
2094     BaseV = EmitLValue(E->getLHS()).getAddress();
2095 
2096   llvm::Value *OffsetV = EmitScalarExpr(E->getRHS());
2097 
2098   const MemberPointerType *MPT
2099     = E->getRHS()->getType()->getAs<MemberPointerType>();
2100 
2101   llvm::Value *AddV =
2102     CGM.getCXXABI().EmitMemberDataPointerAddress(*this, BaseV, OffsetV, MPT);
2103 
2104   return MakeAddrLValue(AddV, MPT->getPointeeType());
2105 }
2106 
2107