Home | History | Annotate | Download | only in CodeGen
      1 //===-- CodeGenFunction.h - Per-Function state for LLVM CodeGen -*- C++ -*-===//
      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 is the internal per-function state used for llvm translation.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #ifndef CLANG_CODEGEN_CODEGENFUNCTION_H
     15 #define CLANG_CODEGEN_CODEGENFUNCTION_H
     16 
     17 #include "CGBuilder.h"
     18 #include "CGDebugInfo.h"
     19 #include "CGValue.h"
     20 #include "EHScopeStack.h"
     21 #include "CodeGenModule.h"
     22 #include "clang/AST/CharUnits.h"
     23 #include "clang/AST/ExprCXX.h"
     24 #include "clang/AST/ExprObjC.h"
     25 #include "clang/AST/Type.h"
     26 #include "clang/Basic/ABI.h"
     27 #include "clang/Basic/CapturedStmt.h"
     28 #include "clang/Basic/TargetInfo.h"
     29 #include "clang/Frontend/CodeGenOptions.h"
     30 #include "llvm/ADT/ArrayRef.h"
     31 #include "llvm/ADT/DenseMap.h"
     32 #include "llvm/ADT/SmallVector.h"
     33 #include "llvm/Support/Debug.h"
     34 #include "llvm/Support/ValueHandle.h"
     35 
     36 namespace llvm {
     37   class BasicBlock;
     38   class LLVMContext;
     39   class MDNode;
     40   class Module;
     41   class SwitchInst;
     42   class Twine;
     43   class Value;
     44   class CallSite;
     45 }
     46 
     47 namespace clang {
     48   class ASTContext;
     49   class BlockDecl;
     50   class CXXDestructorDecl;
     51   class CXXForRangeStmt;
     52   class CXXTryStmt;
     53   class Decl;
     54   class LabelDecl;
     55   class EnumConstantDecl;
     56   class FunctionDecl;
     57   class FunctionProtoType;
     58   class LabelStmt;
     59   class ObjCContainerDecl;
     60   class ObjCInterfaceDecl;
     61   class ObjCIvarDecl;
     62   class ObjCMethodDecl;
     63   class ObjCImplementationDecl;
     64   class ObjCPropertyImplDecl;
     65   class TargetInfo;
     66   class TargetCodeGenInfo;
     67   class VarDecl;
     68   class ObjCForCollectionStmt;
     69   class ObjCAtTryStmt;
     70   class ObjCAtThrowStmt;
     71   class ObjCAtSynchronizedStmt;
     72   class ObjCAutoreleasePoolStmt;
     73 
     74 namespace CodeGen {
     75   class CodeGenTypes;
     76   class CGFunctionInfo;
     77   class CGRecordLayout;
     78   class CGBlockInfo;
     79   class CGCXXABI;
     80   class BlockFlags;
     81   class BlockFieldFlags;
     82 
     83 /// The kind of evaluation to perform on values of a particular
     84 /// type.  Basically, is the code in CGExprScalar, CGExprComplex, or
     85 /// CGExprAgg?
     86 ///
     87 /// TODO: should vectors maybe be split out into their own thing?
     88 enum TypeEvaluationKind {
     89   TEK_Scalar,
     90   TEK_Complex,
     91   TEK_Aggregate
     92 };
     93 
     94 /// CodeGenFunction - This class organizes the per-function state that is used
     95 /// while generating LLVM code.
     96 class CodeGenFunction : public CodeGenTypeCache {
     97   CodeGenFunction(const CodeGenFunction &) LLVM_DELETED_FUNCTION;
     98   void operator=(const CodeGenFunction &) LLVM_DELETED_FUNCTION;
     99 
    100   friend class CGCXXABI;
    101 public:
    102   /// A jump destination is an abstract label, branching to which may
    103   /// require a jump out through normal cleanups.
    104   struct JumpDest {
    105     JumpDest() : Block(0), ScopeDepth(), Index(0) {}
    106     JumpDest(llvm::BasicBlock *Block,
    107              EHScopeStack::stable_iterator Depth,
    108              unsigned Index)
    109       : Block(Block), ScopeDepth(Depth), Index(Index) {}
    110 
    111     bool isValid() const { return Block != 0; }
    112     llvm::BasicBlock *getBlock() const { return Block; }
    113     EHScopeStack::stable_iterator getScopeDepth() const { return ScopeDepth; }
    114     unsigned getDestIndex() const { return Index; }
    115 
    116     // This should be used cautiously.
    117     void setScopeDepth(EHScopeStack::stable_iterator depth) {
    118       ScopeDepth = depth;
    119     }
    120 
    121   private:
    122     llvm::BasicBlock *Block;
    123     EHScopeStack::stable_iterator ScopeDepth;
    124     unsigned Index;
    125   };
    126 
    127   CodeGenModule &CGM;  // Per-module state.
    128   const TargetInfo &Target;
    129 
    130   typedef std::pair<llvm::Value *, llvm::Value *> ComplexPairTy;
    131   CGBuilderTy Builder;
    132 
    133   /// CurFuncDecl - Holds the Decl for the current outermost
    134   /// non-closure context.
    135   const Decl *CurFuncDecl;
    136   /// CurCodeDecl - This is the inner-most code context, which includes blocks.
    137   const Decl *CurCodeDecl;
    138   const CGFunctionInfo *CurFnInfo;
    139   QualType FnRetTy;
    140   llvm::Function *CurFn;
    141 
    142   /// CurGD - The GlobalDecl for the current function being compiled.
    143   GlobalDecl CurGD;
    144 
    145   /// PrologueCleanupDepth - The cleanup depth enclosing all the
    146   /// cleanups associated with the parameters.
    147   EHScopeStack::stable_iterator PrologueCleanupDepth;
    148 
    149   /// ReturnBlock - Unified return block.
    150   JumpDest ReturnBlock;
    151 
    152   /// ReturnValue - The temporary alloca to hold the return value. This is null
    153   /// iff the function has no return value.
    154   llvm::Value *ReturnValue;
    155 
    156   /// AllocaInsertPoint - This is an instruction in the entry block before which
    157   /// we prefer to insert allocas.
    158   llvm::AssertingVH<llvm::Instruction> AllocaInsertPt;
    159 
    160   /// \brief API for captured statement code generation.
    161   class CGCapturedStmtInfo {
    162   public:
    163     explicit CGCapturedStmtInfo(const CapturedStmt &S,
    164                                 CapturedRegionKind K = CR_Default)
    165       : Kind(K), ThisValue(0), CXXThisFieldDecl(0) {
    166 
    167       RecordDecl::field_iterator Field =
    168         S.getCapturedRecordDecl()->field_begin();
    169       for (CapturedStmt::const_capture_iterator I = S.capture_begin(),
    170                                                 E = S.capture_end();
    171            I != E; ++I, ++Field) {
    172         if (I->capturesThis())
    173           CXXThisFieldDecl = *Field;
    174         else
    175           CaptureFields[I->getCapturedVar()] = *Field;
    176       }
    177     }
    178 
    179     virtual ~CGCapturedStmtInfo();
    180 
    181     CapturedRegionKind getKind() const { return Kind; }
    182 
    183     void setContextValue(llvm::Value *V) { ThisValue = V; }
    184     // \brief Retrieve the value of the context parameter.
    185     llvm::Value *getContextValue() const { return ThisValue; }
    186 
    187     /// \brief Lookup the captured field decl for a variable.
    188     const FieldDecl *lookup(const VarDecl *VD) const {
    189       return CaptureFields.lookup(VD);
    190     }
    191 
    192     bool isCXXThisExprCaptured() const { return CXXThisFieldDecl != 0; }
    193     FieldDecl *getThisFieldDecl() const { return CXXThisFieldDecl; }
    194 
    195     /// \brief Emit the captured statement body.
    196     virtual void EmitBody(CodeGenFunction &CGF, Stmt *S) {
    197       CGF.EmitStmt(S);
    198     }
    199 
    200     /// \brief Get the name of the capture helper.
    201     virtual StringRef getHelperName() const { return "__captured_stmt"; }
    202 
    203   private:
    204     /// \brief The kind of captured statement being generated.
    205     CapturedRegionKind Kind;
    206 
    207     /// \brief Keep the map between VarDecl and FieldDecl.
    208     llvm::SmallDenseMap<const VarDecl *, FieldDecl *> CaptureFields;
    209 
    210     /// \brief The base address of the captured record, passed in as the first
    211     /// argument of the parallel region function.
    212     llvm::Value *ThisValue;
    213 
    214     /// \brief Captured 'this' type.
    215     FieldDecl *CXXThisFieldDecl;
    216   };
    217   CGCapturedStmtInfo *CapturedStmtInfo;
    218 
    219   /// BoundsChecking - Emit run-time bounds checks. Higher values mean
    220   /// potentially higher performance penalties.
    221   unsigned char BoundsChecking;
    222 
    223   /// \brief Whether any type-checking sanitizers are enabled. If \c false,
    224   /// calls to EmitTypeCheck can be skipped.
    225   bool SanitizePerformTypeCheck;
    226 
    227   /// \brief Sanitizer options to use for this function.
    228   const SanitizerOptions *SanOpts;
    229 
    230   /// In ARC, whether we should autorelease the return value.
    231   bool AutoreleaseResult;
    232 
    233   const CodeGen::CGBlockInfo *BlockInfo;
    234   llvm::Value *BlockPointer;
    235 
    236   llvm::DenseMap<const VarDecl *, FieldDecl *> LambdaCaptureFields;
    237   FieldDecl *LambdaThisCaptureField;
    238 
    239   /// \brief A mapping from NRVO variables to the flags used to indicate
    240   /// when the NRVO has been applied to this variable.
    241   llvm::DenseMap<const VarDecl *, llvm::Value *> NRVOFlags;
    242 
    243   EHScopeStack EHStack;
    244   llvm::SmallVector<char, 256> LifetimeExtendedCleanupStack;
    245 
    246   /// Header for data within LifetimeExtendedCleanupStack.
    247   struct LifetimeExtendedCleanupHeader {
    248     /// The size of the following cleanup object.
    249     size_t Size : 29;
    250     /// The kind of cleanup to push: a value from the CleanupKind enumeration.
    251     unsigned Kind : 3;
    252 
    253     size_t getSize() const { return Size; }
    254     CleanupKind getKind() const { return static_cast<CleanupKind>(Kind); }
    255   };
    256 
    257   /// i32s containing the indexes of the cleanup destinations.
    258   llvm::AllocaInst *NormalCleanupDest;
    259 
    260   unsigned NextCleanupDestIndex;
    261 
    262   /// FirstBlockInfo - The head of a singly-linked-list of block layouts.
    263   CGBlockInfo *FirstBlockInfo;
    264 
    265   /// EHResumeBlock - Unified block containing a call to llvm.eh.resume.
    266   llvm::BasicBlock *EHResumeBlock;
    267 
    268   /// The exception slot.  All landing pads write the current exception pointer
    269   /// into this alloca.
    270   llvm::Value *ExceptionSlot;
    271 
    272   /// The selector slot.  Under the MandatoryCleanup model, all landing pads
    273   /// write the current selector value into this alloca.
    274   llvm::AllocaInst *EHSelectorSlot;
    275 
    276   /// Emits a landing pad for the current EH stack.
    277   llvm::BasicBlock *EmitLandingPad();
    278 
    279   llvm::BasicBlock *getInvokeDestImpl();
    280 
    281   template <class T>
    282   typename DominatingValue<T>::saved_type saveValueInCond(T value) {
    283     return DominatingValue<T>::save(*this, value);
    284   }
    285 
    286 public:
    287   /// ObjCEHValueStack - Stack of Objective-C exception values, used for
    288   /// rethrows.
    289   SmallVector<llvm::Value*, 8> ObjCEHValueStack;
    290 
    291   /// A class controlling the emission of a finally block.
    292   class FinallyInfo {
    293     /// Where the catchall's edge through the cleanup should go.
    294     JumpDest RethrowDest;
    295 
    296     /// A function to call to enter the catch.
    297     llvm::Constant *BeginCatchFn;
    298 
    299     /// An i1 variable indicating whether or not the @finally is
    300     /// running for an exception.
    301     llvm::AllocaInst *ForEHVar;
    302 
    303     /// An i8* variable into which the exception pointer to rethrow
    304     /// has been saved.
    305     llvm::AllocaInst *SavedExnVar;
    306 
    307   public:
    308     void enter(CodeGenFunction &CGF, const Stmt *Finally,
    309                llvm::Constant *beginCatchFn, llvm::Constant *endCatchFn,
    310                llvm::Constant *rethrowFn);
    311     void exit(CodeGenFunction &CGF);
    312   };
    313 
    314   /// pushFullExprCleanup - Push a cleanup to be run at the end of the
    315   /// current full-expression.  Safe against the possibility that
    316   /// we're currently inside a conditionally-evaluated expression.
    317   template <class T, class A0>
    318   void pushFullExprCleanup(CleanupKind kind, A0 a0) {
    319     // If we're not in a conditional branch, or if none of the
    320     // arguments requires saving, then use the unconditional cleanup.
    321     if (!isInConditionalBranch())
    322       return EHStack.pushCleanup<T>(kind, a0);
    323 
    324     typename DominatingValue<A0>::saved_type a0_saved = saveValueInCond(a0);
    325 
    326     typedef EHScopeStack::ConditionalCleanup1<T, A0> CleanupType;
    327     EHStack.pushCleanup<CleanupType>(kind, a0_saved);
    328     initFullExprCleanup();
    329   }
    330 
    331   /// pushFullExprCleanup - Push a cleanup to be run at the end of the
    332   /// current full-expression.  Safe against the possibility that
    333   /// we're currently inside a conditionally-evaluated expression.
    334   template <class T, class A0, class A1>
    335   void pushFullExprCleanup(CleanupKind kind, A0 a0, A1 a1) {
    336     // If we're not in a conditional branch, or if none of the
    337     // arguments requires saving, then use the unconditional cleanup.
    338     if (!isInConditionalBranch())
    339       return EHStack.pushCleanup<T>(kind, a0, a1);
    340 
    341     typename DominatingValue<A0>::saved_type a0_saved = saveValueInCond(a0);
    342     typename DominatingValue<A1>::saved_type a1_saved = saveValueInCond(a1);
    343 
    344     typedef EHScopeStack::ConditionalCleanup2<T, A0, A1> CleanupType;
    345     EHStack.pushCleanup<CleanupType>(kind, a0_saved, a1_saved);
    346     initFullExprCleanup();
    347   }
    348 
    349   /// pushFullExprCleanup - Push a cleanup to be run at the end of the
    350   /// current full-expression.  Safe against the possibility that
    351   /// we're currently inside a conditionally-evaluated expression.
    352   template <class T, class A0, class A1, class A2>
    353   void pushFullExprCleanup(CleanupKind kind, A0 a0, A1 a1, A2 a2) {
    354     // If we're not in a conditional branch, or if none of the
    355     // arguments requires saving, then use the unconditional cleanup.
    356     if (!isInConditionalBranch()) {
    357       return EHStack.pushCleanup<T>(kind, a0, a1, a2);
    358     }
    359 
    360     typename DominatingValue<A0>::saved_type a0_saved = saveValueInCond(a0);
    361     typename DominatingValue<A1>::saved_type a1_saved = saveValueInCond(a1);
    362     typename DominatingValue<A2>::saved_type a2_saved = saveValueInCond(a2);
    363 
    364     typedef EHScopeStack::ConditionalCleanup3<T, A0, A1, A2> CleanupType;
    365     EHStack.pushCleanup<CleanupType>(kind, a0_saved, a1_saved, a2_saved);
    366     initFullExprCleanup();
    367   }
    368 
    369   /// pushFullExprCleanup - Push a cleanup to be run at the end of the
    370   /// current full-expression.  Safe against the possibility that
    371   /// we're currently inside a conditionally-evaluated expression.
    372   template <class T, class A0, class A1, class A2, class A3>
    373   void pushFullExprCleanup(CleanupKind kind, A0 a0, A1 a1, A2 a2, A3 a3) {
    374     // If we're not in a conditional branch, or if none of the
    375     // arguments requires saving, then use the unconditional cleanup.
    376     if (!isInConditionalBranch()) {
    377       return EHStack.pushCleanup<T>(kind, a0, a1, a2, a3);
    378     }
    379 
    380     typename DominatingValue<A0>::saved_type a0_saved = saveValueInCond(a0);
    381     typename DominatingValue<A1>::saved_type a1_saved = saveValueInCond(a1);
    382     typename DominatingValue<A2>::saved_type a2_saved = saveValueInCond(a2);
    383     typename DominatingValue<A3>::saved_type a3_saved = saveValueInCond(a3);
    384 
    385     typedef EHScopeStack::ConditionalCleanup4<T, A0, A1, A2, A3> CleanupType;
    386     EHStack.pushCleanup<CleanupType>(kind, a0_saved, a1_saved,
    387                                      a2_saved, a3_saved);
    388     initFullExprCleanup();
    389   }
    390 
    391   /// \brief Queue a cleanup to be pushed after finishing the current
    392   /// full-expression.
    393   template <class T, class A0, class A1, class A2, class A3>
    394   void pushCleanupAfterFullExpr(CleanupKind Kind, A0 a0, A1 a1, A2 a2, A3 a3) {
    395     assert(!isInConditionalBranch() && "can't defer conditional cleanup");
    396 
    397     LifetimeExtendedCleanupHeader Header = { sizeof(T), Kind };
    398 
    399     size_t OldSize = LifetimeExtendedCleanupStack.size();
    400     LifetimeExtendedCleanupStack.resize(
    401         LifetimeExtendedCleanupStack.size() + sizeof(Header) + Header.Size);
    402 
    403     char *Buffer = &LifetimeExtendedCleanupStack[OldSize];
    404     new (Buffer) LifetimeExtendedCleanupHeader(Header);
    405     new (Buffer + sizeof(Header)) T(a0, a1, a2, a3);
    406   }
    407 
    408   /// Set up the last cleaup that was pushed as a conditional
    409   /// full-expression cleanup.
    410   void initFullExprCleanup();
    411 
    412   /// PushDestructorCleanup - Push a cleanup to call the
    413   /// complete-object destructor of an object of the given type at the
    414   /// given address.  Does nothing if T is not a C++ class type with a
    415   /// non-trivial destructor.
    416   void PushDestructorCleanup(QualType T, llvm::Value *Addr);
    417 
    418   /// PushDestructorCleanup - Push a cleanup to call the
    419   /// complete-object variant of the given destructor on the object at
    420   /// the given address.
    421   void PushDestructorCleanup(const CXXDestructorDecl *Dtor,
    422                              llvm::Value *Addr);
    423 
    424   /// PopCleanupBlock - Will pop the cleanup entry on the stack and
    425   /// process all branch fixups.
    426   void PopCleanupBlock(bool FallThroughIsBranchThrough = false);
    427 
    428   /// DeactivateCleanupBlock - Deactivates the given cleanup block.
    429   /// The block cannot be reactivated.  Pops it if it's the top of the
    430   /// stack.
    431   ///
    432   /// \param DominatingIP - An instruction which is known to
    433   ///   dominate the current IP (if set) and which lies along
    434   ///   all paths of execution between the current IP and the
    435   ///   the point at which the cleanup comes into scope.
    436   void DeactivateCleanupBlock(EHScopeStack::stable_iterator Cleanup,
    437                               llvm::Instruction *DominatingIP);
    438 
    439   /// ActivateCleanupBlock - Activates an initially-inactive cleanup.
    440   /// Cannot be used to resurrect a deactivated cleanup.
    441   ///
    442   /// \param DominatingIP - An instruction which is known to
    443   ///   dominate the current IP (if set) and which lies along
    444   ///   all paths of execution between the current IP and the
    445   ///   the point at which the cleanup comes into scope.
    446   void ActivateCleanupBlock(EHScopeStack::stable_iterator Cleanup,
    447                             llvm::Instruction *DominatingIP);
    448 
    449   /// \brief Enters a new scope for capturing cleanups, all of which
    450   /// will be executed once the scope is exited.
    451   class RunCleanupsScope {
    452     EHScopeStack::stable_iterator CleanupStackDepth;
    453     size_t LifetimeExtendedCleanupStackSize;
    454     bool OldDidCallStackSave;
    455   protected:
    456     bool PerformCleanup;
    457   private:
    458 
    459     RunCleanupsScope(const RunCleanupsScope &) LLVM_DELETED_FUNCTION;
    460     void operator=(const RunCleanupsScope &) LLVM_DELETED_FUNCTION;
    461 
    462   protected:
    463     CodeGenFunction& CGF;
    464 
    465   public:
    466     /// \brief Enter a new cleanup scope.
    467     explicit RunCleanupsScope(CodeGenFunction &CGF)
    468       : PerformCleanup(true), CGF(CGF)
    469     {
    470       CleanupStackDepth = CGF.EHStack.stable_begin();
    471       LifetimeExtendedCleanupStackSize =
    472           CGF.LifetimeExtendedCleanupStack.size();
    473       OldDidCallStackSave = CGF.DidCallStackSave;
    474       CGF.DidCallStackSave = false;
    475     }
    476 
    477     /// \brief Exit this cleanup scope, emitting any accumulated
    478     /// cleanups.
    479     ~RunCleanupsScope() {
    480       if (PerformCleanup) {
    481         CGF.DidCallStackSave = OldDidCallStackSave;
    482         CGF.PopCleanupBlocks(CleanupStackDepth,
    483                              LifetimeExtendedCleanupStackSize);
    484       }
    485     }
    486 
    487     /// \brief Determine whether this scope requires any cleanups.
    488     bool requiresCleanups() const {
    489       return CGF.EHStack.stable_begin() != CleanupStackDepth;
    490     }
    491 
    492     /// \brief Force the emission of cleanups now, instead of waiting
    493     /// until this object is destroyed.
    494     void ForceCleanup() {
    495       assert(PerformCleanup && "Already forced cleanup");
    496       CGF.DidCallStackSave = OldDidCallStackSave;
    497       CGF.PopCleanupBlocks(CleanupStackDepth,
    498                            LifetimeExtendedCleanupStackSize);
    499       PerformCleanup = false;
    500     }
    501   };
    502 
    503   class LexicalScope: protected RunCleanupsScope {
    504     SourceRange Range;
    505     SmallVector<const LabelDecl*, 4> Labels;
    506     LexicalScope *ParentScope;
    507 
    508     LexicalScope(const LexicalScope &) LLVM_DELETED_FUNCTION;
    509     void operator=(const LexicalScope &) LLVM_DELETED_FUNCTION;
    510 
    511   public:
    512     /// \brief Enter a new cleanup scope.
    513     explicit LexicalScope(CodeGenFunction &CGF, SourceRange Range)
    514       : RunCleanupsScope(CGF), Range(Range), ParentScope(CGF.CurLexicalScope) {
    515       CGF.CurLexicalScope = this;
    516       if (CGDebugInfo *DI = CGF.getDebugInfo())
    517         DI->EmitLexicalBlockStart(CGF.Builder, Range.getBegin());
    518     }
    519 
    520     void addLabel(const LabelDecl *label) {
    521       assert(PerformCleanup && "adding label to dead scope?");
    522       Labels.push_back(label);
    523     }
    524 
    525     /// \brief Exit this cleanup scope, emitting any accumulated
    526     /// cleanups.
    527     ~LexicalScope() {
    528       if (CGDebugInfo *DI = CGF.getDebugInfo())
    529         DI->EmitLexicalBlockEnd(CGF.Builder, Range.getEnd());
    530 
    531       // If we should perform a cleanup, force them now.  Note that
    532       // this ends the cleanup scope before rescoping any labels.
    533       if (PerformCleanup) ForceCleanup();
    534     }
    535 
    536     /// \brief Force the emission of cleanups now, instead of waiting
    537     /// until this object is destroyed.
    538     void ForceCleanup() {
    539       CGF.CurLexicalScope = ParentScope;
    540       RunCleanupsScope::ForceCleanup();
    541 
    542       if (!Labels.empty())
    543         rescopeLabels();
    544     }
    545 
    546     void rescopeLabels();
    547   };
    548 
    549 
    550   /// \brief Takes the old cleanup stack size and emits the cleanup blocks
    551   /// that have been added.
    552   void PopCleanupBlocks(EHScopeStack::stable_iterator OldCleanupStackSize);
    553 
    554   /// \brief Takes the old cleanup stack size and emits the cleanup blocks
    555   /// that have been added, then adds all lifetime-extended cleanups from
    556   /// the given position to the stack.
    557   void PopCleanupBlocks(EHScopeStack::stable_iterator OldCleanupStackSize,
    558                         size_t OldLifetimeExtendedStackSize);
    559 
    560   void ResolveBranchFixups(llvm::BasicBlock *Target);
    561 
    562   /// The given basic block lies in the current EH scope, but may be a
    563   /// target of a potentially scope-crossing jump; get a stable handle
    564   /// to which we can perform this jump later.
    565   JumpDest getJumpDestInCurrentScope(llvm::BasicBlock *Target) {
    566     return JumpDest(Target,
    567                     EHStack.getInnermostNormalCleanup(),
    568                     NextCleanupDestIndex++);
    569   }
    570 
    571   /// The given basic block lies in the current EH scope, but may be a
    572   /// target of a potentially scope-crossing jump; get a stable handle
    573   /// to which we can perform this jump later.
    574   JumpDest getJumpDestInCurrentScope(StringRef Name = StringRef()) {
    575     return getJumpDestInCurrentScope(createBasicBlock(Name));
    576   }
    577 
    578   /// EmitBranchThroughCleanup - Emit a branch from the current insert
    579   /// block through the normal cleanup handling code (if any) and then
    580   /// on to \arg Dest.
    581   void EmitBranchThroughCleanup(JumpDest Dest);
    582 
    583   /// isObviouslyBranchWithoutCleanups - Return true if a branch to the
    584   /// specified destination obviously has no cleanups to run.  'false' is always
    585   /// a conservatively correct answer for this method.
    586   bool isObviouslyBranchWithoutCleanups(JumpDest Dest) const;
    587 
    588   /// popCatchScope - Pops the catch scope at the top of the EHScope
    589   /// stack, emitting any required code (other than the catch handlers
    590   /// themselves).
    591   void popCatchScope();
    592 
    593   llvm::BasicBlock *getEHResumeBlock(bool isCleanup);
    594   llvm::BasicBlock *getEHDispatchBlock(EHScopeStack::stable_iterator scope);
    595 
    596   /// An object to manage conditionally-evaluated expressions.
    597   class ConditionalEvaluation {
    598     llvm::BasicBlock *StartBB;
    599 
    600   public:
    601     ConditionalEvaluation(CodeGenFunction &CGF)
    602       : StartBB(CGF.Builder.GetInsertBlock()) {}
    603 
    604     void begin(CodeGenFunction &CGF) {
    605       assert(CGF.OutermostConditional != this);
    606       if (!CGF.OutermostConditional)
    607         CGF.OutermostConditional = this;
    608     }
    609 
    610     void end(CodeGenFunction &CGF) {
    611       assert(CGF.OutermostConditional != 0);
    612       if (CGF.OutermostConditional == this)
    613         CGF.OutermostConditional = 0;
    614     }
    615 
    616     /// Returns a block which will be executed prior to each
    617     /// evaluation of the conditional code.
    618     llvm::BasicBlock *getStartingBlock() const {
    619       return StartBB;
    620     }
    621   };
    622 
    623   /// isInConditionalBranch - Return true if we're currently emitting
    624   /// one branch or the other of a conditional expression.
    625   bool isInConditionalBranch() const { return OutermostConditional != 0; }
    626 
    627   void setBeforeOutermostConditional(llvm::Value *value, llvm::Value *addr) {
    628     assert(isInConditionalBranch());
    629     llvm::BasicBlock *block = OutermostConditional->getStartingBlock();
    630     new llvm::StoreInst(value, addr, &block->back());
    631   }
    632 
    633   /// An RAII object to record that we're evaluating a statement
    634   /// expression.
    635   class StmtExprEvaluation {
    636     CodeGenFunction &CGF;
    637 
    638     /// We have to save the outermost conditional: cleanups in a
    639     /// statement expression aren't conditional just because the
    640     /// StmtExpr is.
    641     ConditionalEvaluation *SavedOutermostConditional;
    642 
    643   public:
    644     StmtExprEvaluation(CodeGenFunction &CGF)
    645       : CGF(CGF), SavedOutermostConditional(CGF.OutermostConditional) {
    646       CGF.OutermostConditional = 0;
    647     }
    648 
    649     ~StmtExprEvaluation() {
    650       CGF.OutermostConditional = SavedOutermostConditional;
    651       CGF.EnsureInsertPoint();
    652     }
    653   };
    654 
    655   /// An object which temporarily prevents a value from being
    656   /// destroyed by aggressive peephole optimizations that assume that
    657   /// all uses of a value have been realized in the IR.
    658   class PeepholeProtection {
    659     llvm::Instruction *Inst;
    660     friend class CodeGenFunction;
    661 
    662   public:
    663     PeepholeProtection() : Inst(0) {}
    664   };
    665 
    666   /// A non-RAII class containing all the information about a bound
    667   /// opaque value.  OpaqueValueMapping, below, is a RAII wrapper for
    668   /// this which makes individual mappings very simple; using this
    669   /// class directly is useful when you have a variable number of
    670   /// opaque values or don't want the RAII functionality for some
    671   /// reason.
    672   class OpaqueValueMappingData {
    673     const OpaqueValueExpr *OpaqueValue;
    674     bool BoundLValue;
    675     CodeGenFunction::PeepholeProtection Protection;
    676 
    677     OpaqueValueMappingData(const OpaqueValueExpr *ov,
    678                            bool boundLValue)
    679       : OpaqueValue(ov), BoundLValue(boundLValue) {}
    680   public:
    681     OpaqueValueMappingData() : OpaqueValue(0) {}
    682 
    683     static bool shouldBindAsLValue(const Expr *expr) {
    684       // gl-values should be bound as l-values for obvious reasons.
    685       // Records should be bound as l-values because IR generation
    686       // always keeps them in memory.  Expressions of function type
    687       // act exactly like l-values but are formally required to be
    688       // r-values in C.
    689       return expr->isGLValue() ||
    690              expr->getType()->isRecordType() ||
    691              expr->getType()->isFunctionType();
    692     }
    693 
    694     static OpaqueValueMappingData bind(CodeGenFunction &CGF,
    695                                        const OpaqueValueExpr *ov,
    696                                        const Expr *e) {
    697       if (shouldBindAsLValue(ov))
    698         return bind(CGF, ov, CGF.EmitLValue(e));
    699       return bind(CGF, ov, CGF.EmitAnyExpr(e));
    700     }
    701 
    702     static OpaqueValueMappingData bind(CodeGenFunction &CGF,
    703                                        const OpaqueValueExpr *ov,
    704                                        const LValue &lv) {
    705       assert(shouldBindAsLValue(ov));
    706       CGF.OpaqueLValues.insert(std::make_pair(ov, lv));
    707       return OpaqueValueMappingData(ov, true);
    708     }
    709 
    710     static OpaqueValueMappingData bind(CodeGenFunction &CGF,
    711                                        const OpaqueValueExpr *ov,
    712                                        const RValue &rv) {
    713       assert(!shouldBindAsLValue(ov));
    714       CGF.OpaqueRValues.insert(std::make_pair(ov, rv));
    715 
    716       OpaqueValueMappingData data(ov, false);
    717 
    718       // Work around an extremely aggressive peephole optimization in
    719       // EmitScalarConversion which assumes that all other uses of a
    720       // value are extant.
    721       data.Protection = CGF.protectFromPeepholes(rv);
    722 
    723       return data;
    724     }
    725 
    726     bool isValid() const { return OpaqueValue != 0; }
    727     void clear() { OpaqueValue = 0; }
    728 
    729     void unbind(CodeGenFunction &CGF) {
    730       assert(OpaqueValue && "no data to unbind!");
    731 
    732       if (BoundLValue) {
    733         CGF.OpaqueLValues.erase(OpaqueValue);
    734       } else {
    735         CGF.OpaqueRValues.erase(OpaqueValue);
    736         CGF.unprotectFromPeepholes(Protection);
    737       }
    738     }
    739   };
    740 
    741   /// An RAII object to set (and then clear) a mapping for an OpaqueValueExpr.
    742   class OpaqueValueMapping {
    743     CodeGenFunction &CGF;
    744     OpaqueValueMappingData Data;
    745 
    746   public:
    747     static bool shouldBindAsLValue(const Expr *expr) {
    748       return OpaqueValueMappingData::shouldBindAsLValue(expr);
    749     }
    750 
    751     /// Build the opaque value mapping for the given conditional
    752     /// operator if it's the GNU ?: extension.  This is a common
    753     /// enough pattern that the convenience operator is really
    754     /// helpful.
    755     ///
    756     OpaqueValueMapping(CodeGenFunction &CGF,
    757                        const AbstractConditionalOperator *op) : CGF(CGF) {
    758       if (isa<ConditionalOperator>(op))
    759         // Leave Data empty.
    760         return;
    761 
    762       const BinaryConditionalOperator *e = cast<BinaryConditionalOperator>(op);
    763       Data = OpaqueValueMappingData::bind(CGF, e->getOpaqueValue(),
    764                                           e->getCommon());
    765     }
    766 
    767     OpaqueValueMapping(CodeGenFunction &CGF,
    768                        const OpaqueValueExpr *opaqueValue,
    769                        LValue lvalue)
    770       : CGF(CGF), Data(OpaqueValueMappingData::bind(CGF, opaqueValue, lvalue)) {
    771     }
    772 
    773     OpaqueValueMapping(CodeGenFunction &CGF,
    774                        const OpaqueValueExpr *opaqueValue,
    775                        RValue rvalue)
    776       : CGF(CGF), Data(OpaqueValueMappingData::bind(CGF, opaqueValue, rvalue)) {
    777     }
    778 
    779     void pop() {
    780       Data.unbind(CGF);
    781       Data.clear();
    782     }
    783 
    784     ~OpaqueValueMapping() {
    785       if (Data.isValid()) Data.unbind(CGF);
    786     }
    787   };
    788 
    789   /// getByrefValueFieldNumber - Given a declaration, returns the LLVM field
    790   /// number that holds the value.
    791   unsigned getByRefValueLLVMField(const ValueDecl *VD) const;
    792 
    793   /// BuildBlockByrefAddress - Computes address location of the
    794   /// variable which is declared as __block.
    795   llvm::Value *BuildBlockByrefAddress(llvm::Value *BaseAddr,
    796                                       const VarDecl *V);
    797 private:
    798   CGDebugInfo *DebugInfo;
    799   bool DisableDebugInfo;
    800 
    801   /// DidCallStackSave - Whether llvm.stacksave has been called. Used to avoid
    802   /// calling llvm.stacksave for multiple VLAs in the same scope.
    803   bool DidCallStackSave;
    804 
    805   /// IndirectBranch - The first time an indirect goto is seen we create a block
    806   /// with an indirect branch.  Every time we see the address of a label taken,
    807   /// we add the label to the indirect goto.  Every subsequent indirect goto is
    808   /// codegen'd as a jump to the IndirectBranch's basic block.
    809   llvm::IndirectBrInst *IndirectBranch;
    810 
    811   /// LocalDeclMap - This keeps track of the LLVM allocas or globals for local C
    812   /// decls.
    813   typedef llvm::DenseMap<const Decl*, llvm::Value*> DeclMapTy;
    814   DeclMapTy LocalDeclMap;
    815 
    816   /// LabelMap - This keeps track of the LLVM basic block for each C label.
    817   llvm::DenseMap<const LabelDecl*, JumpDest> LabelMap;
    818 
    819   // BreakContinueStack - This keeps track of where break and continue
    820   // statements should jump to.
    821   struct BreakContinue {
    822     BreakContinue(JumpDest Break, JumpDest Continue)
    823       : BreakBlock(Break), ContinueBlock(Continue) {}
    824 
    825     JumpDest BreakBlock;
    826     JumpDest ContinueBlock;
    827   };
    828   SmallVector<BreakContinue, 8> BreakContinueStack;
    829 
    830   /// SwitchInsn - This is nearest current switch instruction. It is null if
    831   /// current context is not in a switch.
    832   llvm::SwitchInst *SwitchInsn;
    833 
    834   /// CaseRangeBlock - This block holds if condition check for last case
    835   /// statement range in current switch instruction.
    836   llvm::BasicBlock *CaseRangeBlock;
    837 
    838   /// OpaqueLValues - Keeps track of the current set of opaque value
    839   /// expressions.
    840   llvm::DenseMap<const OpaqueValueExpr *, LValue> OpaqueLValues;
    841   llvm::DenseMap<const OpaqueValueExpr *, RValue> OpaqueRValues;
    842 
    843   // VLASizeMap - This keeps track of the associated size for each VLA type.
    844   // We track this by the size expression rather than the type itself because
    845   // in certain situations, like a const qualifier applied to an VLA typedef,
    846   // multiple VLA types can share the same size expression.
    847   // FIXME: Maybe this could be a stack of maps that is pushed/popped as we
    848   // enter/leave scopes.
    849   llvm::DenseMap<const Expr*, llvm::Value*> VLASizeMap;
    850 
    851   /// A block containing a single 'unreachable' instruction.  Created
    852   /// lazily by getUnreachableBlock().
    853   llvm::BasicBlock *UnreachableBlock;
    854 
    855   /// Counts of the number return expressions in the function.
    856   unsigned NumReturnExprs;
    857 
    858   /// Count the number of simple (constant) return expressions in the function.
    859   unsigned NumSimpleReturnExprs;
    860 
    861   /// The last regular (non-return) debug location (breakpoint) in the function.
    862   SourceLocation LastStopPoint;
    863 
    864 public:
    865   /// A scope within which we are constructing the fields of an object which
    866   /// might use a CXXDefaultInitExpr. This stashes away a 'this' value to use
    867   /// if we need to evaluate a CXXDefaultInitExpr within the evaluation.
    868   class FieldConstructionScope {
    869   public:
    870     FieldConstructionScope(CodeGenFunction &CGF, llvm::Value *This)
    871         : CGF(CGF), OldCXXDefaultInitExprThis(CGF.CXXDefaultInitExprThis) {
    872       CGF.CXXDefaultInitExprThis = This;
    873     }
    874     ~FieldConstructionScope() {
    875       CGF.CXXDefaultInitExprThis = OldCXXDefaultInitExprThis;
    876     }
    877 
    878   private:
    879     CodeGenFunction &CGF;
    880     llvm::Value *OldCXXDefaultInitExprThis;
    881   };
    882 
    883   /// The scope of a CXXDefaultInitExpr. Within this scope, the value of 'this'
    884   /// is overridden to be the object under construction.
    885   class CXXDefaultInitExprScope {
    886   public:
    887     CXXDefaultInitExprScope(CodeGenFunction &CGF)
    888         : CGF(CGF), OldCXXThisValue(CGF.CXXThisValue) {
    889       CGF.CXXThisValue = CGF.CXXDefaultInitExprThis;
    890     }
    891     ~CXXDefaultInitExprScope() {
    892       CGF.CXXThisValue = OldCXXThisValue;
    893     }
    894 
    895   public:
    896     CodeGenFunction &CGF;
    897     llvm::Value *OldCXXThisValue;
    898   };
    899 
    900 private:
    901   /// CXXThisDecl - When generating code for a C++ member function,
    902   /// this will hold the implicit 'this' declaration.
    903   ImplicitParamDecl *CXXABIThisDecl;
    904   llvm::Value *CXXABIThisValue;
    905   llvm::Value *CXXThisValue;
    906 
    907   /// The value of 'this' to use when evaluating CXXDefaultInitExprs within
    908   /// this expression.
    909   llvm::Value *CXXDefaultInitExprThis;
    910 
    911   /// CXXStructorImplicitParamDecl - When generating code for a constructor or
    912   /// destructor, this will hold the implicit argument (e.g. VTT).
    913   ImplicitParamDecl *CXXStructorImplicitParamDecl;
    914   llvm::Value *CXXStructorImplicitParamValue;
    915 
    916   /// OutermostConditional - Points to the outermost active
    917   /// conditional control.  This is used so that we know if a
    918   /// temporary should be destroyed conditionally.
    919   ConditionalEvaluation *OutermostConditional;
    920 
    921   /// The current lexical scope.
    922   LexicalScope *CurLexicalScope;
    923 
    924   /// The current source location that should be used for exception
    925   /// handling code.
    926   SourceLocation CurEHLocation;
    927 
    928   /// ByrefValueInfoMap - For each __block variable, contains a pair of the LLVM
    929   /// type as well as the field number that contains the actual data.
    930   llvm::DenseMap<const ValueDecl *, std::pair<llvm::Type *,
    931                                               unsigned> > ByRefValueInfo;
    932 
    933   llvm::BasicBlock *TerminateLandingPad;
    934   llvm::BasicBlock *TerminateHandler;
    935   llvm::BasicBlock *TrapBB;
    936 
    937   /// Add a kernel metadata node to the named metadata node 'opencl.kernels'.
    938   /// In the kernel metadata node, reference the kernel function and metadata
    939   /// nodes for its optional attribute qualifiers (OpenCL 1.1 6.7.2):
    940   /// - A node for the vec_type_hint(<type>) qualifier contains string
    941   ///   "vec_type_hint", an undefined value of the <type> data type,
    942   ///   and a Boolean that is true if the <type> is integer and signed.
    943   /// - A node for the work_group_size_hint(X,Y,Z) qualifier contains string
    944   ///   "work_group_size_hint", and three 32-bit integers X, Y and Z.
    945   /// - A node for the reqd_work_group_size(X,Y,Z) qualifier contains string
    946   ///   "reqd_work_group_size", and three 32-bit integers X, Y and Z.
    947   void EmitOpenCLKernelMetadata(const FunctionDecl *FD,
    948                                 llvm::Function *Fn);
    949 
    950 public:
    951   CodeGenFunction(CodeGenModule &cgm, bool suppressNewContext=false);
    952   ~CodeGenFunction();
    953 
    954   CodeGenTypes &getTypes() const { return CGM.getTypes(); }
    955   ASTContext &getContext() const { return CGM.getContext(); }
    956   /// Returns true if DebugInfo is actually initialized.
    957   bool maybeInitializeDebugInfo() {
    958     if (CGM.getModuleDebugInfo()) {
    959       DebugInfo = CGM.getModuleDebugInfo();
    960       return true;
    961     }
    962     return false;
    963   }
    964   CGDebugInfo *getDebugInfo() {
    965     if (DisableDebugInfo)
    966       return NULL;
    967     return DebugInfo;
    968   }
    969   void disableDebugInfo() { DisableDebugInfo = true; }
    970   void enableDebugInfo() { DisableDebugInfo = false; }
    971 
    972   bool shouldUseFusedARCCalls() {
    973     return CGM.getCodeGenOpts().OptimizationLevel == 0;
    974   }
    975 
    976   const LangOptions &getLangOpts() const { return CGM.getLangOpts(); }
    977 
    978   /// Returns a pointer to the function's exception object and selector slot,
    979   /// which is assigned in every landing pad.
    980   llvm::Value *getExceptionSlot();
    981   llvm::Value *getEHSelectorSlot();
    982 
    983   /// Returns the contents of the function's exception object and selector
    984   /// slots.
    985   llvm::Value *getExceptionFromSlot();
    986   llvm::Value *getSelectorFromSlot();
    987 
    988   llvm::Value *getNormalCleanupDestSlot();
    989 
    990   llvm::BasicBlock *getUnreachableBlock() {
    991     if (!UnreachableBlock) {
    992       UnreachableBlock = createBasicBlock("unreachable");
    993       new llvm::UnreachableInst(getLLVMContext(), UnreachableBlock);
    994     }
    995     return UnreachableBlock;
    996   }
    997 
    998   llvm::BasicBlock *getInvokeDest() {
    999     if (!EHStack.requiresLandingPad()) return 0;
   1000     return getInvokeDestImpl();
   1001   }
   1002 
   1003   const TargetInfo &getTarget() const { return Target; }
   1004   llvm::LLVMContext &getLLVMContext() { return CGM.getLLVMContext(); }
   1005 
   1006   //===--------------------------------------------------------------------===//
   1007   //                                  Cleanups
   1008   //===--------------------------------------------------------------------===//
   1009 
   1010   typedef void Destroyer(CodeGenFunction &CGF, llvm::Value *addr, QualType ty);
   1011 
   1012   void pushIrregularPartialArrayCleanup(llvm::Value *arrayBegin,
   1013                                         llvm::Value *arrayEndPointer,
   1014                                         QualType elementType,
   1015                                         Destroyer *destroyer);
   1016   void pushRegularPartialArrayCleanup(llvm::Value *arrayBegin,
   1017                                       llvm::Value *arrayEnd,
   1018                                       QualType elementType,
   1019                                       Destroyer *destroyer);
   1020 
   1021   void pushDestroy(QualType::DestructionKind dtorKind,
   1022                    llvm::Value *addr, QualType type);
   1023   void pushEHDestroy(QualType::DestructionKind dtorKind,
   1024                      llvm::Value *addr, QualType type);
   1025   void pushDestroy(CleanupKind kind, llvm::Value *addr, QualType type,
   1026                    Destroyer *destroyer, bool useEHCleanupForArray);
   1027   void pushLifetimeExtendedDestroy(CleanupKind kind, llvm::Value *addr,
   1028                                    QualType type, Destroyer *destroyer,
   1029                                    bool useEHCleanupForArray);
   1030   void emitDestroy(llvm::Value *addr, QualType type, Destroyer *destroyer,
   1031                    bool useEHCleanupForArray);
   1032   llvm::Function *generateDestroyHelper(llvm::Constant *addr,
   1033                                         QualType type,
   1034                                         Destroyer *destroyer,
   1035                                         bool useEHCleanupForArray);
   1036   void emitArrayDestroy(llvm::Value *begin, llvm::Value *end,
   1037                         QualType type, Destroyer *destroyer,
   1038                         bool checkZeroLength, bool useEHCleanup);
   1039 
   1040   Destroyer *getDestroyer(QualType::DestructionKind destructionKind);
   1041 
   1042   /// Determines whether an EH cleanup is required to destroy a type
   1043   /// with the given destruction kind.
   1044   bool needsEHCleanup(QualType::DestructionKind kind) {
   1045     switch (kind) {
   1046     case QualType::DK_none:
   1047       return false;
   1048     case QualType::DK_cxx_destructor:
   1049     case QualType::DK_objc_weak_lifetime:
   1050       return getLangOpts().Exceptions;
   1051     case QualType::DK_objc_strong_lifetime:
   1052       return getLangOpts().Exceptions &&
   1053              CGM.getCodeGenOpts().ObjCAutoRefCountExceptions;
   1054     }
   1055     llvm_unreachable("bad destruction kind");
   1056   }
   1057 
   1058   CleanupKind getCleanupKind(QualType::DestructionKind kind) {
   1059     return (needsEHCleanup(kind) ? NormalAndEHCleanup : NormalCleanup);
   1060   }
   1061 
   1062   //===--------------------------------------------------------------------===//
   1063   //                                  Objective-C
   1064   //===--------------------------------------------------------------------===//
   1065 
   1066   void GenerateObjCMethod(const ObjCMethodDecl *OMD);
   1067 
   1068   void StartObjCMethod(const ObjCMethodDecl *MD,
   1069                        const ObjCContainerDecl *CD,
   1070                        SourceLocation StartLoc);
   1071 
   1072   /// GenerateObjCGetter - Synthesize an Objective-C property getter function.
   1073   void GenerateObjCGetter(ObjCImplementationDecl *IMP,
   1074                           const ObjCPropertyImplDecl *PID);
   1075   void generateObjCGetterBody(const ObjCImplementationDecl *classImpl,
   1076                               const ObjCPropertyImplDecl *propImpl,
   1077                               const ObjCMethodDecl *GetterMothodDecl,
   1078                               llvm::Constant *AtomicHelperFn);
   1079 
   1080   void GenerateObjCCtorDtorMethod(ObjCImplementationDecl *IMP,
   1081                                   ObjCMethodDecl *MD, bool ctor);
   1082 
   1083   /// GenerateObjCSetter - Synthesize an Objective-C property setter function
   1084   /// for the given property.
   1085   void GenerateObjCSetter(ObjCImplementationDecl *IMP,
   1086                           const ObjCPropertyImplDecl *PID);
   1087   void generateObjCSetterBody(const ObjCImplementationDecl *classImpl,
   1088                               const ObjCPropertyImplDecl *propImpl,
   1089                               llvm::Constant *AtomicHelperFn);
   1090   bool IndirectObjCSetterArg(const CGFunctionInfo &FI);
   1091   bool IvarTypeWithAggrGCObjects(QualType Ty);
   1092 
   1093   //===--------------------------------------------------------------------===//
   1094   //                                  Block Bits
   1095   //===--------------------------------------------------------------------===//
   1096 
   1097   llvm::Value *EmitBlockLiteral(const BlockExpr *);
   1098   llvm::Value *EmitBlockLiteral(const CGBlockInfo &Info);
   1099   static void destroyBlockInfos(CGBlockInfo *info);
   1100   llvm::Constant *BuildDescriptorBlockDecl(const BlockExpr *,
   1101                                            const CGBlockInfo &Info,
   1102                                            llvm::StructType *,
   1103                                            llvm::Constant *BlockVarLayout);
   1104 
   1105   llvm::Function *GenerateBlockFunction(GlobalDecl GD,
   1106                                         const CGBlockInfo &Info,
   1107                                         const DeclMapTy &ldm,
   1108                                         bool IsLambdaConversionToBlock);
   1109 
   1110   llvm::Constant *GenerateCopyHelperFunction(const CGBlockInfo &blockInfo);
   1111   llvm::Constant *GenerateDestroyHelperFunction(const CGBlockInfo &blockInfo);
   1112   llvm::Constant *GenerateObjCAtomicSetterCopyHelperFunction(
   1113                                              const ObjCPropertyImplDecl *PID);
   1114   llvm::Constant *GenerateObjCAtomicGetterCopyHelperFunction(
   1115                                              const ObjCPropertyImplDecl *PID);
   1116   llvm::Value *EmitBlockCopyAndAutorelease(llvm::Value *Block, QualType Ty);
   1117 
   1118   void BuildBlockRelease(llvm::Value *DeclPtr, BlockFieldFlags flags);
   1119 
   1120   class AutoVarEmission;
   1121 
   1122   void emitByrefStructureInit(const AutoVarEmission &emission);
   1123   void enterByrefCleanup(const AutoVarEmission &emission);
   1124 
   1125   llvm::Value *LoadBlockStruct() {
   1126     assert(BlockPointer && "no block pointer set!");
   1127     return BlockPointer;
   1128   }
   1129 
   1130   void AllocateBlockCXXThisPointer(const CXXThisExpr *E);
   1131   void AllocateBlockDecl(const DeclRefExpr *E);
   1132   llvm::Value *GetAddrOfBlockDecl(const VarDecl *var, bool ByRef);
   1133   llvm::Type *BuildByRefType(const VarDecl *var);
   1134 
   1135   void GenerateCode(GlobalDecl GD, llvm::Function *Fn,
   1136                     const CGFunctionInfo &FnInfo);
   1137   void StartFunction(GlobalDecl GD,
   1138                      QualType RetTy,
   1139                      llvm::Function *Fn,
   1140                      const CGFunctionInfo &FnInfo,
   1141                      const FunctionArgList &Args,
   1142                      SourceLocation StartLoc);
   1143 
   1144   void EmitConstructorBody(FunctionArgList &Args);
   1145   void EmitDestructorBody(FunctionArgList &Args);
   1146   void emitImplicitAssignmentOperatorBody(FunctionArgList &Args);
   1147   void EmitFunctionBody(FunctionArgList &Args);
   1148 
   1149   void EmitForwardingCallToLambda(const CXXRecordDecl *Lambda,
   1150                                   CallArgList &CallArgs);
   1151   void EmitLambdaToBlockPointerBody(FunctionArgList &Args);
   1152   void EmitLambdaBlockInvokeBody();
   1153   void EmitLambdaDelegatingInvokeBody(const CXXMethodDecl *MD);
   1154   void EmitLambdaStaticInvokeFunction(const CXXMethodDecl *MD);
   1155 
   1156   /// EmitReturnBlock - Emit the unified return block, trying to avoid its
   1157   /// emission when possible.
   1158   void EmitReturnBlock();
   1159 
   1160   /// FinishFunction - Complete IR generation of the current function. It is
   1161   /// legal to call this function even if there is no current insertion point.
   1162   void FinishFunction(SourceLocation EndLoc=SourceLocation());
   1163 
   1164   /// GenerateThunk - Generate a thunk for the given method.
   1165   void GenerateThunk(llvm::Function *Fn, const CGFunctionInfo &FnInfo,
   1166                      GlobalDecl GD, const ThunkInfo &Thunk);
   1167 
   1168   void GenerateVarArgsThunk(llvm::Function *Fn, const CGFunctionInfo &FnInfo,
   1169                             GlobalDecl GD, const ThunkInfo &Thunk);
   1170 
   1171   void EmitCtorPrologue(const CXXConstructorDecl *CD, CXXCtorType Type,
   1172                         FunctionArgList &Args);
   1173 
   1174   void EmitInitializerForField(FieldDecl *Field, LValue LHS, Expr *Init,
   1175                                ArrayRef<VarDecl *> ArrayIndexes);
   1176 
   1177   /// InitializeVTablePointer - Initialize the vtable pointer of the given
   1178   /// subobject.
   1179   ///
   1180   void InitializeVTablePointer(BaseSubobject Base,
   1181                                const CXXRecordDecl *NearestVBase,
   1182                                CharUnits OffsetFromNearestVBase,
   1183                                llvm::Constant *VTable,
   1184                                const CXXRecordDecl *VTableClass);
   1185 
   1186   typedef llvm::SmallPtrSet<const CXXRecordDecl *, 4> VisitedVirtualBasesSetTy;
   1187   void InitializeVTablePointers(BaseSubobject Base,
   1188                                 const CXXRecordDecl *NearestVBase,
   1189                                 CharUnits OffsetFromNearestVBase,
   1190                                 bool BaseIsNonVirtualPrimaryBase,
   1191                                 llvm::Constant *VTable,
   1192                                 const CXXRecordDecl *VTableClass,
   1193                                 VisitedVirtualBasesSetTy& VBases);
   1194 
   1195   void InitializeVTablePointers(const CXXRecordDecl *ClassDecl);
   1196 
   1197   /// GetVTablePtr - Return the Value of the vtable pointer member pointed
   1198   /// to by This.
   1199   llvm::Value *GetVTablePtr(llvm::Value *This, llvm::Type *Ty);
   1200 
   1201   /// EnterDtorCleanups - Enter the cleanups necessary to complete the
   1202   /// given phase of destruction for a destructor.  The end result
   1203   /// should call destructors on members and base classes in reverse
   1204   /// order of their construction.
   1205   void EnterDtorCleanups(const CXXDestructorDecl *Dtor, CXXDtorType Type);
   1206 
   1207   /// ShouldInstrumentFunction - Return true if the current function should be
   1208   /// instrumented with __cyg_profile_func_* calls
   1209   bool ShouldInstrumentFunction();
   1210 
   1211   /// EmitFunctionInstrumentation - Emit LLVM code to call the specified
   1212   /// instrumentation function with the current function and the call site, if
   1213   /// function instrumentation is enabled.
   1214   void EmitFunctionInstrumentation(const char *Fn);
   1215 
   1216   /// EmitMCountInstrumentation - Emit call to .mcount.
   1217   void EmitMCountInstrumentation();
   1218 
   1219   /// EmitFunctionProlog - Emit the target specific LLVM code to load the
   1220   /// arguments for the given function. This is also responsible for naming the
   1221   /// LLVM function arguments.
   1222   void EmitFunctionProlog(const CGFunctionInfo &FI,
   1223                           llvm::Function *Fn,
   1224                           const FunctionArgList &Args);
   1225 
   1226   /// EmitFunctionEpilog - Emit the target specific LLVM code to return the
   1227   /// given temporary.
   1228   void EmitFunctionEpilog(const CGFunctionInfo &FI, bool EmitRetDbgLoc);
   1229 
   1230   /// EmitStartEHSpec - Emit the start of the exception spec.
   1231   void EmitStartEHSpec(const Decl *D);
   1232 
   1233   /// EmitEndEHSpec - Emit the end of the exception spec.
   1234   void EmitEndEHSpec(const Decl *D);
   1235 
   1236   /// getTerminateLandingPad - Return a landing pad that just calls terminate.
   1237   llvm::BasicBlock *getTerminateLandingPad();
   1238 
   1239   /// getTerminateHandler - Return a handler (not a landing pad, just
   1240   /// a catch handler) that just calls terminate.  This is used when
   1241   /// a terminate scope encloses a try.
   1242   llvm::BasicBlock *getTerminateHandler();
   1243 
   1244   llvm::Type *ConvertTypeForMem(QualType T);
   1245   llvm::Type *ConvertType(QualType T);
   1246   llvm::Type *ConvertType(const TypeDecl *T) {
   1247     return ConvertType(getContext().getTypeDeclType(T));
   1248   }
   1249 
   1250   /// LoadObjCSelf - Load the value of self. This function is only valid while
   1251   /// generating code for an Objective-C method.
   1252   llvm::Value *LoadObjCSelf();
   1253 
   1254   /// TypeOfSelfObject - Return type of object that this self represents.
   1255   QualType TypeOfSelfObject();
   1256 
   1257   /// hasAggregateLLVMType - Return true if the specified AST type will map into
   1258   /// an aggregate LLVM type or is void.
   1259   static TypeEvaluationKind getEvaluationKind(QualType T);
   1260 
   1261   static bool hasScalarEvaluationKind(QualType T) {
   1262     return getEvaluationKind(T) == TEK_Scalar;
   1263   }
   1264 
   1265   static bool hasAggregateEvaluationKind(QualType T) {
   1266     return getEvaluationKind(T) == TEK_Aggregate;
   1267   }
   1268 
   1269   /// createBasicBlock - Create an LLVM basic block.
   1270   llvm::BasicBlock *createBasicBlock(const Twine &name = "",
   1271                                      llvm::Function *parent = 0,
   1272                                      llvm::BasicBlock *before = 0) {
   1273 #ifdef NDEBUG
   1274     return llvm::BasicBlock::Create(getLLVMContext(), "", parent, before);
   1275 #else
   1276     return llvm::BasicBlock::Create(getLLVMContext(), name, parent, before);
   1277 #endif
   1278   }
   1279 
   1280   /// getBasicBlockForLabel - Return the LLVM basicblock that the specified
   1281   /// label maps to.
   1282   JumpDest getJumpDestForLabel(const LabelDecl *S);
   1283 
   1284   /// SimplifyForwardingBlocks - If the given basic block is only a branch to
   1285   /// another basic block, simplify it. This assumes that no other code could
   1286   /// potentially reference the basic block.
   1287   void SimplifyForwardingBlocks(llvm::BasicBlock *BB);
   1288 
   1289   /// EmitBlock - Emit the given block \arg BB and set it as the insert point,
   1290   /// adding a fall-through branch from the current insert block if
   1291   /// necessary. It is legal to call this function even if there is no current
   1292   /// insertion point.
   1293   ///
   1294   /// IsFinished - If true, indicates that the caller has finished emitting
   1295   /// branches to the given block and does not expect to emit code into it. This
   1296   /// means the block can be ignored if it is unreachable.
   1297   void EmitBlock(llvm::BasicBlock *BB, bool IsFinished=false);
   1298 
   1299   /// EmitBlockAfterUses - Emit the given block somewhere hopefully
   1300   /// near its uses, and leave the insertion point in it.
   1301   void EmitBlockAfterUses(llvm::BasicBlock *BB);
   1302 
   1303   /// EmitBranch - Emit a branch to the specified basic block from the current
   1304   /// insert block, taking care to avoid creation of branches from dummy
   1305   /// blocks. It is legal to call this function even if there is no current
   1306   /// insertion point.
   1307   ///
   1308   /// This function clears the current insertion point. The caller should follow
   1309   /// calls to this function with calls to Emit*Block prior to generation new
   1310   /// code.
   1311   void EmitBranch(llvm::BasicBlock *Block);
   1312 
   1313   /// HaveInsertPoint - True if an insertion point is defined. If not, this
   1314   /// indicates that the current code being emitted is unreachable.
   1315   bool HaveInsertPoint() const {
   1316     return Builder.GetInsertBlock() != 0;
   1317   }
   1318 
   1319   /// EnsureInsertPoint - Ensure that an insertion point is defined so that
   1320   /// emitted IR has a place to go. Note that by definition, if this function
   1321   /// creates a block then that block is unreachable; callers may do better to
   1322   /// detect when no insertion point is defined and simply skip IR generation.
   1323   void EnsureInsertPoint() {
   1324     if (!HaveInsertPoint())
   1325       EmitBlock(createBasicBlock());
   1326   }
   1327 
   1328   /// ErrorUnsupported - Print out an error that codegen doesn't support the
   1329   /// specified stmt yet.
   1330   void ErrorUnsupported(const Stmt *S, const char *Type,
   1331                         bool OmitOnError=false);
   1332 
   1333   //===--------------------------------------------------------------------===//
   1334   //                                  Helpers
   1335   //===--------------------------------------------------------------------===//
   1336 
   1337   LValue MakeAddrLValue(llvm::Value *V, QualType T,
   1338                         CharUnits Alignment = CharUnits()) {
   1339     return LValue::MakeAddr(V, T, Alignment, getContext(),
   1340                             CGM.getTBAAInfo(T));
   1341   }
   1342 
   1343   LValue MakeNaturalAlignAddrLValue(llvm::Value *V, QualType T) {
   1344     CharUnits Alignment;
   1345     if (!T->isIncompleteType())
   1346       Alignment = getContext().getTypeAlignInChars(T);
   1347     return LValue::MakeAddr(V, T, Alignment, getContext(),
   1348                             CGM.getTBAAInfo(T));
   1349   }
   1350 
   1351   /// CreateTempAlloca - This creates a alloca and inserts it into the entry
   1352   /// block. The caller is responsible for setting an appropriate alignment on
   1353   /// the alloca.
   1354   llvm::AllocaInst *CreateTempAlloca(llvm::Type *Ty,
   1355                                      const Twine &Name = "tmp");
   1356 
   1357   /// InitTempAlloca - Provide an initial value for the given alloca.
   1358   void InitTempAlloca(llvm::AllocaInst *Alloca, llvm::Value *Value);
   1359 
   1360   /// CreateIRTemp - Create a temporary IR object of the given type, with
   1361   /// appropriate alignment. This routine should only be used when an temporary
   1362   /// value needs to be stored into an alloca (for example, to avoid explicit
   1363   /// PHI construction), but the type is the IR type, not the type appropriate
   1364   /// for storing in memory.
   1365   llvm::AllocaInst *CreateIRTemp(QualType T, const Twine &Name = "tmp");
   1366 
   1367   /// CreateMemTemp - Create a temporary memory object of the given type, with
   1368   /// appropriate alignment.
   1369   llvm::AllocaInst *CreateMemTemp(QualType T, const Twine &Name = "tmp");
   1370 
   1371   /// CreateAggTemp - Create a temporary memory object for the given
   1372   /// aggregate type.
   1373   AggValueSlot CreateAggTemp(QualType T, const Twine &Name = "tmp") {
   1374     CharUnits Alignment = getContext().getTypeAlignInChars(T);
   1375     return AggValueSlot::forAddr(CreateMemTemp(T, Name), Alignment,
   1376                                  T.getQualifiers(),
   1377                                  AggValueSlot::IsNotDestructed,
   1378                                  AggValueSlot::DoesNotNeedGCBarriers,
   1379                                  AggValueSlot::IsNotAliased);
   1380   }
   1381 
   1382   /// Emit a cast to void* in the appropriate address space.
   1383   llvm::Value *EmitCastToVoidPtr(llvm::Value *value);
   1384 
   1385   /// EvaluateExprAsBool - Perform the usual unary conversions on the specified
   1386   /// expression and compare the result against zero, returning an Int1Ty value.
   1387   llvm::Value *EvaluateExprAsBool(const Expr *E);
   1388 
   1389   /// EmitIgnoredExpr - Emit an expression in a context which ignores the result.
   1390   void EmitIgnoredExpr(const Expr *E);
   1391 
   1392   /// EmitAnyExpr - Emit code to compute the specified expression which can have
   1393   /// any type.  The result is returned as an RValue struct.  If this is an
   1394   /// aggregate expression, the aggloc/agglocvolatile arguments indicate where
   1395   /// the result should be returned.
   1396   ///
   1397   /// \param ignoreResult True if the resulting value isn't used.
   1398   RValue EmitAnyExpr(const Expr *E,
   1399                      AggValueSlot aggSlot = AggValueSlot::ignored(),
   1400                      bool ignoreResult = false);
   1401 
   1402   // EmitVAListRef - Emit a "reference" to a va_list; this is either the address
   1403   // or the value of the expression, depending on how va_list is defined.
   1404   llvm::Value *EmitVAListRef(const Expr *E);
   1405 
   1406   /// EmitAnyExprToTemp - Similary to EmitAnyExpr(), however, the result will
   1407   /// always be accessible even if no aggregate location is provided.
   1408   RValue EmitAnyExprToTemp(const Expr *E);
   1409 
   1410   /// EmitAnyExprToMem - Emits the code necessary to evaluate an
   1411   /// arbitrary expression into the given memory location.
   1412   void EmitAnyExprToMem(const Expr *E, llvm::Value *Location,
   1413                         Qualifiers Quals, bool IsInitializer);
   1414 
   1415   /// EmitExprAsInit - Emits the code necessary to initialize a
   1416   /// location in memory with the given initializer.
   1417   void EmitExprAsInit(const Expr *init, const ValueDecl *D,
   1418                       LValue lvalue, bool capturedByInit);
   1419 
   1420   /// hasVolatileMember - returns true if aggregate type has a volatile
   1421   /// member.
   1422   bool hasVolatileMember(QualType T) {
   1423     if (const RecordType *RT = T->getAs<RecordType>()) {
   1424       const RecordDecl *RD = cast<RecordDecl>(RT->getDecl());
   1425       return RD->hasVolatileMember();
   1426     }
   1427     return false;
   1428   }
   1429   /// EmitAggregateCopy - Emit an aggregate assignment.
   1430   ///
   1431   /// The difference to EmitAggregateCopy is that tail padding is not copied.
   1432   /// This is required for correctness when assigning non-POD structures in C++.
   1433   void EmitAggregateAssign(llvm::Value *DestPtr, llvm::Value *SrcPtr,
   1434                            QualType EltTy) {
   1435     bool IsVolatile = hasVolatileMember(EltTy);
   1436     EmitAggregateCopy(DestPtr, SrcPtr, EltTy, IsVolatile, CharUnits::Zero(),
   1437                       true);
   1438   }
   1439 
   1440   /// EmitAggregateCopy - Emit an aggregate copy.
   1441   ///
   1442   /// \param isVolatile - True iff either the source or the destination is
   1443   /// volatile.
   1444   /// \param isAssignment - If false, allow padding to be copied.  This often
   1445   /// yields more efficient.
   1446   void EmitAggregateCopy(llvm::Value *DestPtr, llvm::Value *SrcPtr,
   1447                          QualType EltTy, bool isVolatile=false,
   1448                          CharUnits Alignment = CharUnits::Zero(),
   1449                          bool isAssignment = false);
   1450 
   1451   /// StartBlock - Start new block named N. If insert block is a dummy block
   1452   /// then reuse it.
   1453   void StartBlock(const char *N);
   1454 
   1455   /// GetAddrOfLocalVar - Return the address of a local variable.
   1456   llvm::Value *GetAddrOfLocalVar(const VarDecl *VD) {
   1457     llvm::Value *Res = LocalDeclMap[VD];
   1458     assert(Res && "Invalid argument to GetAddrOfLocalVar(), no decl!");
   1459     return Res;
   1460   }
   1461 
   1462   /// getOpaqueLValueMapping - Given an opaque value expression (which
   1463   /// must be mapped to an l-value), return its mapping.
   1464   const LValue &getOpaqueLValueMapping(const OpaqueValueExpr *e) {
   1465     assert(OpaqueValueMapping::shouldBindAsLValue(e));
   1466 
   1467     llvm::DenseMap<const OpaqueValueExpr*,LValue>::iterator
   1468       it = OpaqueLValues.find(e);
   1469     assert(it != OpaqueLValues.end() && "no mapping for opaque value!");
   1470     return it->second;
   1471   }
   1472 
   1473   /// getOpaqueRValueMapping - Given an opaque value expression (which
   1474   /// must be mapped to an r-value), return its mapping.
   1475   const RValue &getOpaqueRValueMapping(const OpaqueValueExpr *e) {
   1476     assert(!OpaqueValueMapping::shouldBindAsLValue(e));
   1477 
   1478     llvm::DenseMap<const OpaqueValueExpr*,RValue>::iterator
   1479       it = OpaqueRValues.find(e);
   1480     assert(it != OpaqueRValues.end() && "no mapping for opaque value!");
   1481     return it->second;
   1482   }
   1483 
   1484   /// getAccessedFieldNo - Given an encoded value and a result number, return
   1485   /// the input field number being accessed.
   1486   static unsigned getAccessedFieldNo(unsigned Idx, const llvm::Constant *Elts);
   1487 
   1488   llvm::BlockAddress *GetAddrOfLabel(const LabelDecl *L);
   1489   llvm::BasicBlock *GetIndirectGotoBlock();
   1490 
   1491   /// EmitNullInitialization - Generate code to set a value of the given type to
   1492   /// null, If the type contains data member pointers, they will be initialized
   1493   /// to -1 in accordance with the Itanium C++ ABI.
   1494   void EmitNullInitialization(llvm::Value *DestPtr, QualType Ty);
   1495 
   1496   // EmitVAArg - Generate code to get an argument from the passed in pointer
   1497   // and update it accordingly. The return value is a pointer to the argument.
   1498   // FIXME: We should be able to get rid of this method and use the va_arg
   1499   // instruction in LLVM instead once it works well enough.
   1500   llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty);
   1501 
   1502   /// emitArrayLength - Compute the length of an array, even if it's a
   1503   /// VLA, and drill down to the base element type.
   1504   llvm::Value *emitArrayLength(const ArrayType *arrayType,
   1505                                QualType &baseType,
   1506                                llvm::Value *&addr);
   1507 
   1508   /// EmitVLASize - Capture all the sizes for the VLA expressions in
   1509   /// the given variably-modified type and store them in the VLASizeMap.
   1510   ///
   1511   /// This function can be called with a null (unreachable) insert point.
   1512   void EmitVariablyModifiedType(QualType Ty);
   1513 
   1514   /// getVLASize - Returns an LLVM value that corresponds to the size,
   1515   /// in non-variably-sized elements, of a variable length array type,
   1516   /// plus that largest non-variably-sized element type.  Assumes that
   1517   /// the type has already been emitted with EmitVariablyModifiedType.
   1518   std::pair<llvm::Value*,QualType> getVLASize(const VariableArrayType *vla);
   1519   std::pair<llvm::Value*,QualType> getVLASize(QualType vla);
   1520 
   1521   /// LoadCXXThis - Load the value of 'this'. This function is only valid while
   1522   /// generating code for an C++ member function.
   1523   llvm::Value *LoadCXXThis() {
   1524     assert(CXXThisValue && "no 'this' value for this function");
   1525     return CXXThisValue;
   1526   }
   1527 
   1528   /// LoadCXXVTT - Load the VTT parameter to base constructors/destructors have
   1529   /// virtual bases.
   1530   // FIXME: Every place that calls LoadCXXVTT is something
   1531   // that needs to be abstracted properly.
   1532   llvm::Value *LoadCXXVTT() {
   1533     assert(CXXStructorImplicitParamValue && "no VTT value for this function");
   1534     return CXXStructorImplicitParamValue;
   1535   }
   1536 
   1537   /// LoadCXXStructorImplicitParam - Load the implicit parameter
   1538   /// for a constructor/destructor.
   1539   llvm::Value *LoadCXXStructorImplicitParam() {
   1540     assert(CXXStructorImplicitParamValue &&
   1541            "no implicit argument value for this function");
   1542     return CXXStructorImplicitParamValue;
   1543   }
   1544 
   1545   /// GetAddressOfBaseOfCompleteClass - Convert the given pointer to a
   1546   /// complete class to the given direct base.
   1547   llvm::Value *
   1548   GetAddressOfDirectBaseInCompleteClass(llvm::Value *Value,
   1549                                         const CXXRecordDecl *Derived,
   1550                                         const CXXRecordDecl *Base,
   1551                                         bool BaseIsVirtual);
   1552 
   1553   /// GetAddressOfBaseClass - This function will add the necessary delta to the
   1554   /// load of 'this' and returns address of the base class.
   1555   llvm::Value *GetAddressOfBaseClass(llvm::Value *Value,
   1556                                      const CXXRecordDecl *Derived,
   1557                                      CastExpr::path_const_iterator PathBegin,
   1558                                      CastExpr::path_const_iterator PathEnd,
   1559                                      bool NullCheckValue);
   1560 
   1561   llvm::Value *GetAddressOfDerivedClass(llvm::Value *Value,
   1562                                         const CXXRecordDecl *Derived,
   1563                                         CastExpr::path_const_iterator PathBegin,
   1564                                         CastExpr::path_const_iterator PathEnd,
   1565                                         bool NullCheckValue);
   1566 
   1567   /// GetVTTParameter - Return the VTT parameter that should be passed to a
   1568   /// base constructor/destructor with virtual bases.
   1569   /// FIXME: VTTs are Itanium ABI-specific, so the definition should move
   1570   /// to ItaniumCXXABI.cpp together with all the references to VTT.
   1571   llvm::Value *GetVTTParameter(GlobalDecl GD, bool ForVirtualBase,
   1572                                bool Delegating);
   1573 
   1574   void EmitDelegateCXXConstructorCall(const CXXConstructorDecl *Ctor,
   1575                                       CXXCtorType CtorType,
   1576                                       const FunctionArgList &Args);
   1577   // It's important not to confuse this and the previous function. Delegating
   1578   // constructors are the C++0x feature. The constructor delegate optimization
   1579   // is used to reduce duplication in the base and complete consturctors where
   1580   // they are substantially the same.
   1581   void EmitDelegatingCXXConstructorCall(const CXXConstructorDecl *Ctor,
   1582                                         const FunctionArgList &Args);
   1583   void EmitCXXConstructorCall(const CXXConstructorDecl *D, CXXCtorType Type,
   1584                               bool ForVirtualBase, bool Delegating,
   1585                               llvm::Value *This,
   1586                               CallExpr::const_arg_iterator ArgBeg,
   1587                               CallExpr::const_arg_iterator ArgEnd);
   1588 
   1589   void EmitSynthesizedCXXCopyCtorCall(const CXXConstructorDecl *D,
   1590                               llvm::Value *This, llvm::Value *Src,
   1591                               CallExpr::const_arg_iterator ArgBeg,
   1592                               CallExpr::const_arg_iterator ArgEnd);
   1593 
   1594   void EmitCXXAggrConstructorCall(const CXXConstructorDecl *D,
   1595                                   const ConstantArrayType *ArrayTy,
   1596                                   llvm::Value *ArrayPtr,
   1597                                   CallExpr::const_arg_iterator ArgBeg,
   1598                                   CallExpr::const_arg_iterator ArgEnd,
   1599                                   bool ZeroInitialization = false);
   1600 
   1601   void EmitCXXAggrConstructorCall(const CXXConstructorDecl *D,
   1602                                   llvm::Value *NumElements,
   1603                                   llvm::Value *ArrayPtr,
   1604                                   CallExpr::const_arg_iterator ArgBeg,
   1605                                   CallExpr::const_arg_iterator ArgEnd,
   1606                                   bool ZeroInitialization = false);
   1607 
   1608   static Destroyer destroyCXXObject;
   1609 
   1610   void EmitCXXDestructorCall(const CXXDestructorDecl *D, CXXDtorType Type,
   1611                              bool ForVirtualBase, bool Delegating,
   1612                              llvm::Value *This);
   1613 
   1614   void EmitNewArrayInitializer(const CXXNewExpr *E, QualType elementType,
   1615                                llvm::Value *NewPtr, llvm::Value *NumElements);
   1616 
   1617   void EmitCXXTemporary(const CXXTemporary *Temporary, QualType TempType,
   1618                         llvm::Value *Ptr);
   1619 
   1620   llvm::Value *EmitCXXNewExpr(const CXXNewExpr *E);
   1621   void EmitCXXDeleteExpr(const CXXDeleteExpr *E);
   1622 
   1623   void EmitDeleteCall(const FunctionDecl *DeleteFD, llvm::Value *Ptr,
   1624                       QualType DeleteTy);
   1625 
   1626   llvm::Value* EmitCXXTypeidExpr(const CXXTypeidExpr *E);
   1627   llvm::Value *EmitDynamicCast(llvm::Value *V, const CXXDynamicCastExpr *DCE);
   1628   llvm::Value* EmitCXXUuidofExpr(const CXXUuidofExpr *E);
   1629 
   1630   /// \brief Situations in which we might emit a check for the suitability of a
   1631   ///        pointer or glvalue.
   1632   enum TypeCheckKind {
   1633     /// Checking the operand of a load. Must be suitably sized and aligned.
   1634     TCK_Load,
   1635     /// Checking the destination of a store. Must be suitably sized and aligned.
   1636     TCK_Store,
   1637     /// Checking the bound value in a reference binding. Must be suitably sized
   1638     /// and aligned, but is not required to refer to an object (until the
   1639     /// reference is used), per core issue 453.
   1640     TCK_ReferenceBinding,
   1641     /// Checking the object expression in a non-static data member access. Must
   1642     /// be an object within its lifetime.
   1643     TCK_MemberAccess,
   1644     /// Checking the 'this' pointer for a call to a non-static member function.
   1645     /// Must be an object within its lifetime.
   1646     TCK_MemberCall,
   1647     /// Checking the 'this' pointer for a constructor call.
   1648     TCK_ConstructorCall,
   1649     /// Checking the operand of a static_cast to a derived pointer type. Must be
   1650     /// null or an object within its lifetime.
   1651     TCK_DowncastPointer,
   1652     /// Checking the operand of a static_cast to a derived reference type. Must
   1653     /// be an object within its lifetime.
   1654     TCK_DowncastReference
   1655   };
   1656 
   1657   /// \brief Emit a check that \p V is the address of storage of the
   1658   /// appropriate size and alignment for an object of type \p Type.
   1659   void EmitTypeCheck(TypeCheckKind TCK, SourceLocation Loc, llvm::Value *V,
   1660                      QualType Type, CharUnits Alignment = CharUnits::Zero());
   1661 
   1662   /// \brief Emit a check that \p Base points into an array object, which
   1663   /// we can access at index \p Index. \p Accessed should be \c false if we
   1664   /// this expression is used as an lvalue, for instance in "&Arr[Idx]".
   1665   void EmitBoundsCheck(const Expr *E, const Expr *Base, llvm::Value *Index,
   1666                        QualType IndexType, bool Accessed);
   1667 
   1668   llvm::Value *EmitScalarPrePostIncDec(const UnaryOperator *E, LValue LV,
   1669                                        bool isInc, bool isPre);
   1670   ComplexPairTy EmitComplexPrePostIncDec(const UnaryOperator *E, LValue LV,
   1671                                          bool isInc, bool isPre);
   1672   //===--------------------------------------------------------------------===//
   1673   //                            Declaration Emission
   1674   //===--------------------------------------------------------------------===//
   1675 
   1676   /// EmitDecl - Emit a declaration.
   1677   ///
   1678   /// This function can be called with a null (unreachable) insert point.
   1679   void EmitDecl(const Decl &D);
   1680 
   1681   /// EmitVarDecl - Emit a local variable declaration.
   1682   ///
   1683   /// This function can be called with a null (unreachable) insert point.
   1684   void EmitVarDecl(const VarDecl &D);
   1685 
   1686   void EmitScalarInit(const Expr *init, const ValueDecl *D,
   1687                       LValue lvalue, bool capturedByInit);
   1688   void EmitScalarInit(llvm::Value *init, LValue lvalue);
   1689 
   1690   typedef void SpecialInitFn(CodeGenFunction &Init, const VarDecl &D,
   1691                              llvm::Value *Address);
   1692 
   1693   /// EmitAutoVarDecl - Emit an auto variable declaration.
   1694   ///
   1695   /// This function can be called with a null (unreachable) insert point.
   1696   void EmitAutoVarDecl(const VarDecl &D);
   1697 
   1698   class AutoVarEmission {
   1699     friend class CodeGenFunction;
   1700 
   1701     const VarDecl *Variable;
   1702 
   1703     /// The alignment of the variable.
   1704     CharUnits Alignment;
   1705 
   1706     /// The address of the alloca.  Null if the variable was emitted
   1707     /// as a global constant.
   1708     llvm::Value *Address;
   1709 
   1710     llvm::Value *NRVOFlag;
   1711 
   1712     /// True if the variable is a __block variable.
   1713     bool IsByRef;
   1714 
   1715     /// True if the variable is of aggregate type and has a constant
   1716     /// initializer.
   1717     bool IsConstantAggregate;
   1718 
   1719     /// Non-null if we should use lifetime annotations.
   1720     llvm::Value *SizeForLifetimeMarkers;
   1721 
   1722     struct Invalid {};
   1723     AutoVarEmission(Invalid) : Variable(0) {}
   1724 
   1725     AutoVarEmission(const VarDecl &variable)
   1726       : Variable(&variable), Address(0), NRVOFlag(0),
   1727         IsByRef(false), IsConstantAggregate(false),
   1728         SizeForLifetimeMarkers(0) {}
   1729 
   1730     bool wasEmittedAsGlobal() const { return Address == 0; }
   1731 
   1732   public:
   1733     static AutoVarEmission invalid() { return AutoVarEmission(Invalid()); }
   1734 
   1735     bool useLifetimeMarkers() const { return SizeForLifetimeMarkers != 0; }
   1736     llvm::Value *getSizeForLifetimeMarkers() const {
   1737       assert(useLifetimeMarkers());
   1738       return SizeForLifetimeMarkers;
   1739     }
   1740 
   1741     /// Returns the raw, allocated address, which is not necessarily
   1742     /// the address of the object itself.
   1743     llvm::Value *getAllocatedAddress() const {
   1744       return Address;
   1745     }
   1746 
   1747     /// Returns the address of the object within this declaration.
   1748     /// Note that this does not chase the forwarding pointer for
   1749     /// __block decls.
   1750     llvm::Value *getObjectAddress(CodeGenFunction &CGF) const {
   1751       if (!IsByRef) return Address;
   1752 
   1753       return CGF.Builder.CreateStructGEP(Address,
   1754                                          CGF.getByRefValueLLVMField(Variable),
   1755                                          Variable->getNameAsString());
   1756     }
   1757   };
   1758   AutoVarEmission EmitAutoVarAlloca(const VarDecl &var);
   1759   void EmitAutoVarInit(const AutoVarEmission &emission);
   1760   void EmitAutoVarCleanups(const AutoVarEmission &emission);
   1761   void emitAutoVarTypeCleanup(const AutoVarEmission &emission,
   1762                               QualType::DestructionKind dtorKind);
   1763 
   1764   void EmitStaticVarDecl(const VarDecl &D,
   1765                          llvm::GlobalValue::LinkageTypes Linkage);
   1766 
   1767   /// EmitParmDecl - Emit a ParmVarDecl or an ImplicitParamDecl.
   1768   void EmitParmDecl(const VarDecl &D, llvm::Value *Arg, unsigned ArgNo);
   1769 
   1770   /// protectFromPeepholes - Protect a value that we're intending to
   1771   /// store to the side, but which will probably be used later, from
   1772   /// aggressive peepholing optimizations that might delete it.
   1773   ///
   1774   /// Pass the result to unprotectFromPeepholes to declare that
   1775   /// protection is no longer required.
   1776   ///
   1777   /// There's no particular reason why this shouldn't apply to
   1778   /// l-values, it's just that no existing peepholes work on pointers.
   1779   PeepholeProtection protectFromPeepholes(RValue rvalue);
   1780   void unprotectFromPeepholes(PeepholeProtection protection);
   1781 
   1782   //===--------------------------------------------------------------------===//
   1783   //                             Statement Emission
   1784   //===--------------------------------------------------------------------===//
   1785 
   1786   /// EmitStopPoint - Emit a debug stoppoint if we are emitting debug info.
   1787   void EmitStopPoint(const Stmt *S);
   1788 
   1789   /// EmitStmt - Emit the code for the statement \arg S. It is legal to call
   1790   /// this function even if there is no current insertion point.
   1791   ///
   1792   /// This function may clear the current insertion point; callers should use
   1793   /// EnsureInsertPoint if they wish to subsequently generate code without first
   1794   /// calling EmitBlock, EmitBranch, or EmitStmt.
   1795   void EmitStmt(const Stmt *S);
   1796 
   1797   /// EmitSimpleStmt - Try to emit a "simple" statement which does not
   1798   /// necessarily require an insertion point or debug information; typically
   1799   /// because the statement amounts to a jump or a container of other
   1800   /// statements.
   1801   ///
   1802   /// \return True if the statement was handled.
   1803   bool EmitSimpleStmt(const Stmt *S);
   1804 
   1805   llvm::Value *EmitCompoundStmt(const CompoundStmt &S, bool GetLast = false,
   1806                                 AggValueSlot AVS = AggValueSlot::ignored());
   1807   llvm::Value *EmitCompoundStmtWithoutScope(const CompoundStmt &S,
   1808                                             bool GetLast = false,
   1809                                             AggValueSlot AVS =
   1810                                                 AggValueSlot::ignored());
   1811 
   1812   /// EmitLabel - Emit the block for the given label. It is legal to call this
   1813   /// function even if there is no current insertion point.
   1814   void EmitLabel(const LabelDecl *D); // helper for EmitLabelStmt.
   1815 
   1816   void EmitLabelStmt(const LabelStmt &S);
   1817   void EmitAttributedStmt(const AttributedStmt &S);
   1818   void EmitGotoStmt(const GotoStmt &S);
   1819   void EmitIndirectGotoStmt(const IndirectGotoStmt &S);
   1820   void EmitIfStmt(const IfStmt &S);
   1821   void EmitWhileStmt(const WhileStmt &S);
   1822   void EmitDoStmt(const DoStmt &S);
   1823   void EmitForStmt(const ForStmt &S);
   1824   void EmitReturnStmt(const ReturnStmt &S);
   1825   void EmitDeclStmt(const DeclStmt &S);
   1826   void EmitBreakStmt(const BreakStmt &S);
   1827   void EmitContinueStmt(const ContinueStmt &S);
   1828   void EmitSwitchStmt(const SwitchStmt &S);
   1829   void EmitDefaultStmt(const DefaultStmt &S);
   1830   void EmitCaseStmt(const CaseStmt &S);
   1831   void EmitCaseStmtRange(const CaseStmt &S);
   1832   void EmitAsmStmt(const AsmStmt &S);
   1833 
   1834   void EmitObjCForCollectionStmt(const ObjCForCollectionStmt &S);
   1835   void EmitObjCAtTryStmt(const ObjCAtTryStmt &S);
   1836   void EmitObjCAtThrowStmt(const ObjCAtThrowStmt &S);
   1837   void EmitObjCAtSynchronizedStmt(const ObjCAtSynchronizedStmt &S);
   1838   void EmitObjCAutoreleasePoolStmt(const ObjCAutoreleasePoolStmt &S);
   1839 
   1840   llvm::Constant *getUnwindResumeFn();
   1841   llvm::Constant *getUnwindResumeOrRethrowFn();
   1842   void EnterCXXTryStmt(const CXXTryStmt &S, bool IsFnTryBlock = false);
   1843   void ExitCXXTryStmt(const CXXTryStmt &S, bool IsFnTryBlock = false);
   1844 
   1845   void EmitCXXTryStmt(const CXXTryStmt &S);
   1846   void EmitCXXForRangeStmt(const CXXForRangeStmt &S);
   1847 
   1848   llvm::Function *EmitCapturedStmt(const CapturedStmt &S, CapturedRegionKind K);
   1849   llvm::Function *GenerateCapturedStmtFunction(const CapturedDecl *CD,
   1850                                                const RecordDecl *RD);
   1851 
   1852   //===--------------------------------------------------------------------===//
   1853   //                         LValue Expression Emission
   1854   //===--------------------------------------------------------------------===//
   1855 
   1856   /// GetUndefRValue - Get an appropriate 'undef' rvalue for the given type.
   1857   RValue GetUndefRValue(QualType Ty);
   1858 
   1859   /// EmitUnsupportedRValue - Emit a dummy r-value using the type of E
   1860   /// and issue an ErrorUnsupported style diagnostic (using the
   1861   /// provided Name).
   1862   RValue EmitUnsupportedRValue(const Expr *E,
   1863                                const char *Name);
   1864 
   1865   /// EmitUnsupportedLValue - Emit a dummy l-value using the type of E and issue
   1866   /// an ErrorUnsupported style diagnostic (using the provided Name).
   1867   LValue EmitUnsupportedLValue(const Expr *E,
   1868                                const char *Name);
   1869 
   1870   /// EmitLValue - Emit code to compute a designator that specifies the location
   1871   /// of the expression.
   1872   ///
   1873   /// This can return one of two things: a simple address or a bitfield
   1874   /// reference.  In either case, the LLVM Value* in the LValue structure is
   1875   /// guaranteed to be an LLVM pointer type.
   1876   ///
   1877   /// If this returns a bitfield reference, nothing about the pointee type of
   1878   /// the LLVM value is known: For example, it may not be a pointer to an
   1879   /// integer.
   1880   ///
   1881   /// If this returns a normal address, and if the lvalue's C type is fixed
   1882   /// size, this method guarantees that the returned pointer type will point to
   1883   /// an LLVM type of the same size of the lvalue's type.  If the lvalue has a
   1884   /// variable length type, this is not possible.
   1885   ///
   1886   LValue EmitLValue(const Expr *E);
   1887 
   1888   /// \brief Same as EmitLValue but additionally we generate checking code to
   1889   /// guard against undefined behavior.  This is only suitable when we know
   1890   /// that the address will be used to access the object.
   1891   LValue EmitCheckedLValue(const Expr *E, TypeCheckKind TCK);
   1892 
   1893   RValue convertTempToRValue(llvm::Value *addr, QualType type);
   1894 
   1895   void EmitAtomicInit(Expr *E, LValue lvalue);
   1896 
   1897   RValue EmitAtomicLoad(LValue lvalue,
   1898                         AggValueSlot slot = AggValueSlot::ignored());
   1899 
   1900   void EmitAtomicStore(RValue rvalue, LValue lvalue, bool isInit);
   1901 
   1902   /// EmitToMemory - Change a scalar value from its value
   1903   /// representation to its in-memory representation.
   1904   llvm::Value *EmitToMemory(llvm::Value *Value, QualType Ty);
   1905 
   1906   /// EmitFromMemory - Change a scalar value from its memory
   1907   /// representation to its value representation.
   1908   llvm::Value *EmitFromMemory(llvm::Value *Value, QualType Ty);
   1909 
   1910   /// EmitLoadOfScalar - Load a scalar value from an address, taking
   1911   /// care to appropriately convert from the memory representation to
   1912   /// the LLVM value representation.
   1913   llvm::Value *EmitLoadOfScalar(llvm::Value *Addr, bool Volatile,
   1914                                 unsigned Alignment, QualType Ty,
   1915                                 llvm::MDNode *TBAAInfo = 0,
   1916                                 QualType TBAABaseTy = QualType(),
   1917                                 uint64_t TBAAOffset = 0);
   1918 
   1919   /// EmitLoadOfScalar - Load a scalar value from an address, taking
   1920   /// care to appropriately convert from the memory representation to
   1921   /// the LLVM value representation.  The l-value must be a simple
   1922   /// l-value.
   1923   llvm::Value *EmitLoadOfScalar(LValue lvalue);
   1924 
   1925   /// EmitStoreOfScalar - Store a scalar value to an address, taking
   1926   /// care to appropriately convert from the memory representation to
   1927   /// the LLVM value representation.
   1928   void EmitStoreOfScalar(llvm::Value *Value, llvm::Value *Addr,
   1929                          bool Volatile, unsigned Alignment, QualType Ty,
   1930                          llvm::MDNode *TBAAInfo = 0, bool isInit = false,
   1931                          QualType TBAABaseTy = QualType(),
   1932                          uint64_t TBAAOffset = 0);
   1933 
   1934   /// EmitStoreOfScalar - Store a scalar value to an address, taking
   1935   /// care to appropriately convert from the memory representation to
   1936   /// the LLVM value representation.  The l-value must be a simple
   1937   /// l-value.  The isInit flag indicates whether this is an initialization.
   1938   /// If so, atomic qualifiers are ignored and the store is always non-atomic.
   1939   void EmitStoreOfScalar(llvm::Value *value, LValue lvalue, bool isInit=false);
   1940 
   1941   /// EmitLoadOfLValue - Given an expression that represents a value lvalue,
   1942   /// this method emits the address of the lvalue, then loads the result as an
   1943   /// rvalue, returning the rvalue.
   1944   RValue EmitLoadOfLValue(LValue V);
   1945   RValue EmitLoadOfExtVectorElementLValue(LValue V);
   1946   RValue EmitLoadOfBitfieldLValue(LValue LV);
   1947 
   1948   /// EmitStoreThroughLValue - Store the specified rvalue into the specified
   1949   /// lvalue, where both are guaranteed to the have the same type, and that type
   1950   /// is 'Ty'.
   1951   void EmitStoreThroughLValue(RValue Src, LValue Dst, bool isInit=false);
   1952   void EmitStoreThroughExtVectorComponentLValue(RValue Src, LValue Dst);
   1953 
   1954   /// EmitStoreThroughLValue - Store Src into Dst with same constraints as
   1955   /// EmitStoreThroughLValue.
   1956   ///
   1957   /// \param Result [out] - If non-null, this will be set to a Value* for the
   1958   /// bit-field contents after the store, appropriate for use as the result of
   1959   /// an assignment to the bit-field.
   1960   void EmitStoreThroughBitfieldLValue(RValue Src, LValue Dst,
   1961                                       llvm::Value **Result=0);
   1962 
   1963   /// Emit an l-value for an assignment (simple or compound) of complex type.
   1964   LValue EmitComplexAssignmentLValue(const BinaryOperator *E);
   1965   LValue EmitComplexCompoundAssignmentLValue(const CompoundAssignOperator *E);
   1966   LValue EmitScalarCompooundAssignWithComplex(const CompoundAssignOperator *E,
   1967                                               llvm::Value *&Result);
   1968 
   1969   // Note: only available for agg return types
   1970   LValue EmitBinaryOperatorLValue(const BinaryOperator *E);
   1971   LValue EmitCompoundAssignmentLValue(const CompoundAssignOperator *E);
   1972   // Note: only available for agg return types
   1973   LValue EmitCallExprLValue(const CallExpr *E);
   1974   // Note: only available for agg return types
   1975   LValue EmitVAArgExprLValue(const VAArgExpr *E);
   1976   LValue EmitDeclRefLValue(const DeclRefExpr *E);
   1977   LValue EmitStringLiteralLValue(const StringLiteral *E);
   1978   LValue EmitObjCEncodeExprLValue(const ObjCEncodeExpr *E);
   1979   LValue EmitPredefinedLValue(const PredefinedExpr *E);
   1980   LValue EmitUnaryOpLValue(const UnaryOperator *E);
   1981   LValue EmitArraySubscriptExpr(const ArraySubscriptExpr *E,
   1982                                 bool Accessed = false);
   1983   LValue EmitExtVectorElementExpr(const ExtVectorElementExpr *E);
   1984   LValue EmitMemberExpr(const MemberExpr *E);
   1985   LValue EmitObjCIsaExpr(const ObjCIsaExpr *E);
   1986   LValue EmitCompoundLiteralLValue(const CompoundLiteralExpr *E);
   1987   LValue EmitInitListLValue(const InitListExpr *E);
   1988   LValue EmitConditionalOperatorLValue(const AbstractConditionalOperator *E);
   1989   LValue EmitCastLValue(const CastExpr *E);
   1990   LValue EmitMaterializeTemporaryExpr(const MaterializeTemporaryExpr *E);
   1991   LValue EmitOpaqueValueLValue(const OpaqueValueExpr *e);
   1992 
   1993   RValue EmitRValueForField(LValue LV, const FieldDecl *FD);
   1994 
   1995   class ConstantEmission {
   1996     llvm::PointerIntPair<llvm::Constant*, 1, bool> ValueAndIsReference;
   1997     ConstantEmission(llvm::Constant *C, bool isReference)
   1998       : ValueAndIsReference(C, isReference) {}
   1999   public:
   2000     ConstantEmission() {}
   2001     static ConstantEmission forReference(llvm::Constant *C) {
   2002       return ConstantEmission(C, true);
   2003     }
   2004     static ConstantEmission forValue(llvm::Constant *C) {
   2005       return ConstantEmission(C, false);
   2006     }
   2007 
   2008     LLVM_EXPLICIT operator bool() const { return ValueAndIsReference.getOpaqueValue() != 0; }
   2009 
   2010     bool isReference() const { return ValueAndIsReference.getInt(); }
   2011     LValue getReferenceLValue(CodeGenFunction &CGF, Expr *refExpr) const {
   2012       assert(isReference());
   2013       return CGF.MakeNaturalAlignAddrLValue(ValueAndIsReference.getPointer(),
   2014                                             refExpr->getType());
   2015     }
   2016 
   2017     llvm::Constant *getValue() const {
   2018       assert(!isReference());
   2019       return ValueAndIsReference.getPointer();
   2020     }
   2021   };
   2022 
   2023   ConstantEmission tryEmitAsConstant(DeclRefExpr *refExpr);
   2024 
   2025   RValue EmitPseudoObjectRValue(const PseudoObjectExpr *e,
   2026                                 AggValueSlot slot = AggValueSlot::ignored());
   2027   LValue EmitPseudoObjectLValue(const PseudoObjectExpr *e);
   2028 
   2029   llvm::Value *EmitIvarOffset(const ObjCInterfaceDecl *Interface,
   2030                               const ObjCIvarDecl *Ivar);
   2031   LValue EmitLValueForField(LValue Base, const FieldDecl* Field);
   2032   LValue EmitLValueForLambdaField(const FieldDecl *Field);
   2033 
   2034   /// EmitLValueForFieldInitialization - Like EmitLValueForField, except that
   2035   /// if the Field is a reference, this will return the address of the reference
   2036   /// and not the address of the value stored in the reference.
   2037   LValue EmitLValueForFieldInitialization(LValue Base,
   2038                                           const FieldDecl* Field);
   2039 
   2040   LValue EmitLValueForIvar(QualType ObjectTy,
   2041                            llvm::Value* Base, const ObjCIvarDecl *Ivar,
   2042                            unsigned CVRQualifiers);
   2043 
   2044   LValue EmitCXXConstructLValue(const CXXConstructExpr *E);
   2045   LValue EmitCXXBindTemporaryLValue(const CXXBindTemporaryExpr *E);
   2046   LValue EmitLambdaLValue(const LambdaExpr *E);
   2047   LValue EmitCXXTypeidLValue(const CXXTypeidExpr *E);
   2048   LValue EmitCXXUuidofLValue(const CXXUuidofExpr *E);
   2049 
   2050   LValue EmitObjCMessageExprLValue(const ObjCMessageExpr *E);
   2051   LValue EmitObjCIvarRefLValue(const ObjCIvarRefExpr *E);
   2052   LValue EmitStmtExprLValue(const StmtExpr *E);
   2053   LValue EmitPointerToDataMemberBinaryExpr(const BinaryOperator *E);
   2054   LValue EmitObjCSelectorLValue(const ObjCSelectorExpr *E);
   2055   void   EmitDeclRefExprDbgValue(const DeclRefExpr *E, llvm::Constant *Init);
   2056 
   2057   //===--------------------------------------------------------------------===//
   2058   //                         Scalar Expression Emission
   2059   //===--------------------------------------------------------------------===//
   2060 
   2061   /// EmitCall - Generate a call of the given function, expecting the given
   2062   /// result type, and using the given argument list which specifies both the
   2063   /// LLVM arguments and the types they were derived from.
   2064   ///
   2065   /// \param TargetDecl - If given, the decl of the function in a direct call;
   2066   /// used to set attributes on the call (noreturn, etc.).
   2067   RValue EmitCall(const CGFunctionInfo &FnInfo,
   2068                   llvm::Value *Callee,
   2069                   ReturnValueSlot ReturnValue,
   2070                   const CallArgList &Args,
   2071                   const Decl *TargetDecl = 0,
   2072                   llvm::Instruction **callOrInvoke = 0);
   2073 
   2074   RValue EmitCall(QualType FnType, llvm::Value *Callee,
   2075                   ReturnValueSlot ReturnValue,
   2076                   CallExpr::const_arg_iterator ArgBeg,
   2077                   CallExpr::const_arg_iterator ArgEnd,
   2078                   const Decl *TargetDecl = 0);
   2079   RValue EmitCallExpr(const CallExpr *E,
   2080                       ReturnValueSlot ReturnValue = ReturnValueSlot());
   2081 
   2082   llvm::CallInst *EmitRuntimeCall(llvm::Value *callee,
   2083                                   const Twine &name = "");
   2084   llvm::CallInst *EmitRuntimeCall(llvm::Value *callee,
   2085                                   ArrayRef<llvm::Value*> args,
   2086                                   const Twine &name = "");
   2087   llvm::CallInst *EmitNounwindRuntimeCall(llvm::Value *callee,
   2088                                           const Twine &name = "");
   2089   llvm::CallInst *EmitNounwindRuntimeCall(llvm::Value *callee,
   2090                                           ArrayRef<llvm::Value*> args,
   2091                                           const Twine &name = "");
   2092 
   2093   llvm::CallSite EmitCallOrInvoke(llvm::Value *Callee,
   2094                                   ArrayRef<llvm::Value *> Args,
   2095                                   const Twine &Name = "");
   2096   llvm::CallSite EmitCallOrInvoke(llvm::Value *Callee,
   2097                                   const Twine &Name = "");
   2098   llvm::CallSite EmitRuntimeCallOrInvoke(llvm::Value *callee,
   2099                                          ArrayRef<llvm::Value*> args,
   2100                                          const Twine &name = "");
   2101   llvm::CallSite EmitRuntimeCallOrInvoke(llvm::Value *callee,
   2102                                          const Twine &name = "");
   2103   void EmitNoreturnRuntimeCallOrInvoke(llvm::Value *callee,
   2104                                        ArrayRef<llvm::Value*> args);
   2105 
   2106   llvm::Value *BuildVirtualCall(GlobalDecl GD, llvm::Value *This,
   2107                                 llvm::Type *Ty);
   2108   llvm::Value *BuildAppleKextVirtualCall(const CXXMethodDecl *MD,
   2109                                          NestedNameSpecifier *Qual,
   2110                                          llvm::Type *Ty);
   2111 
   2112   llvm::Value *BuildAppleKextVirtualDestructorCall(const CXXDestructorDecl *DD,
   2113                                                    CXXDtorType Type,
   2114                                                    const CXXRecordDecl *RD);
   2115 
   2116   RValue EmitCXXMemberCall(const CXXMethodDecl *MD,
   2117                            SourceLocation CallLoc,
   2118                            llvm::Value *Callee,
   2119                            ReturnValueSlot ReturnValue,
   2120                            llvm::Value *This,
   2121                            llvm::Value *ImplicitParam,
   2122                            QualType ImplicitParamTy,
   2123                            CallExpr::const_arg_iterator ArgBeg,
   2124                            CallExpr::const_arg_iterator ArgEnd);
   2125   RValue EmitCXXMemberCallExpr(const CXXMemberCallExpr *E,
   2126                                ReturnValueSlot ReturnValue);
   2127   RValue EmitCXXMemberPointerCallExpr(const CXXMemberCallExpr *E,
   2128                                       ReturnValueSlot ReturnValue);
   2129 
   2130   llvm::Value *EmitCXXOperatorMemberCallee(const CXXOperatorCallExpr *E,
   2131                                            const CXXMethodDecl *MD,
   2132                                            llvm::Value *This);
   2133   RValue EmitCXXOperatorMemberCallExpr(const CXXOperatorCallExpr *E,
   2134                                        const CXXMethodDecl *MD,
   2135                                        ReturnValueSlot ReturnValue);
   2136 
   2137   RValue EmitCUDAKernelCallExpr(const CUDAKernelCallExpr *E,
   2138                                 ReturnValueSlot ReturnValue);
   2139 
   2140 
   2141   RValue EmitBuiltinExpr(const FunctionDecl *FD,
   2142                          unsigned BuiltinID, const CallExpr *E);
   2143 
   2144   RValue EmitBlockCallExpr(const CallExpr *E, ReturnValueSlot ReturnValue);
   2145 
   2146   /// EmitTargetBuiltinExpr - Emit the given builtin call. Returns 0 if the call
   2147   /// is unhandled by the current target.
   2148   llvm::Value *EmitTargetBuiltinExpr(unsigned BuiltinID, const CallExpr *E);
   2149 
   2150   llvm::Value *EmitAArch64BuiltinExpr(unsigned BuiltinID, const CallExpr *E);
   2151   llvm::Value *EmitARMBuiltinExpr(unsigned BuiltinID, const CallExpr *E);
   2152   llvm::Value *EmitNeonCall(llvm::Function *F,
   2153                             SmallVectorImpl<llvm::Value*> &O,
   2154                             const char *name,
   2155                             unsigned shift = 0, bool rightshift = false);
   2156   llvm::Value *EmitNeonSplat(llvm::Value *V, llvm::Constant *Idx);
   2157   llvm::Value *EmitNeonShiftVector(llvm::Value *V, llvm::Type *Ty,
   2158                                    bool negateForRightShift);
   2159 
   2160   llvm::Value *BuildVector(ArrayRef<llvm::Value*> Ops);
   2161   llvm::Value *EmitX86BuiltinExpr(unsigned BuiltinID, const CallExpr *E);
   2162   llvm::Value *EmitPPCBuiltinExpr(unsigned BuiltinID, const CallExpr *E);
   2163 
   2164   llvm::Value *EmitObjCProtocolExpr(const ObjCProtocolExpr *E);
   2165   llvm::Value *EmitObjCStringLiteral(const ObjCStringLiteral *E);
   2166   llvm::Value *EmitObjCBoxedExpr(const ObjCBoxedExpr *E);
   2167   llvm::Value *EmitObjCArrayLiteral(const ObjCArrayLiteral *E);
   2168   llvm::Value *EmitObjCDictionaryLiteral(const ObjCDictionaryLiteral *E);
   2169   llvm::Value *EmitObjCCollectionLiteral(const Expr *E,
   2170                                 const ObjCMethodDecl *MethodWithObjects);
   2171   llvm::Value *EmitObjCSelectorExpr(const ObjCSelectorExpr *E);
   2172   RValue EmitObjCMessageExpr(const ObjCMessageExpr *E,
   2173                              ReturnValueSlot Return = ReturnValueSlot());
   2174 
   2175   /// Retrieves the default cleanup kind for an ARC cleanup.
   2176   /// Except under -fobjc-arc-eh, ARC cleanups are normal-only.
   2177   CleanupKind getARCCleanupKind() {
   2178     return CGM.getCodeGenOpts().ObjCAutoRefCountExceptions
   2179              ? NormalAndEHCleanup : NormalCleanup;
   2180   }
   2181 
   2182   // ARC primitives.
   2183   void EmitARCInitWeak(llvm::Value *value, llvm::Value *addr);
   2184   void EmitARCDestroyWeak(llvm::Value *addr);
   2185   llvm::Value *EmitARCLoadWeak(llvm::Value *addr);
   2186   llvm::Value *EmitARCLoadWeakRetained(llvm::Value *addr);
   2187   llvm::Value *EmitARCStoreWeak(llvm::Value *value, llvm::Value *addr,
   2188                                 bool ignored);
   2189   void EmitARCCopyWeak(llvm::Value *dst, llvm::Value *src);
   2190   void EmitARCMoveWeak(llvm::Value *dst, llvm::Value *src);
   2191   llvm::Value *EmitARCRetainAutorelease(QualType type, llvm::Value *value);
   2192   llvm::Value *EmitARCRetainAutoreleaseNonBlock(llvm::Value *value);
   2193   llvm::Value *EmitARCStoreStrong(LValue lvalue, llvm::Value *value,
   2194                                   bool resultIgnored);
   2195   llvm::Value *EmitARCStoreStrongCall(llvm::Value *addr, llvm::Value *value,
   2196                                       bool resultIgnored);
   2197   llvm::Value *EmitARCRetain(QualType type, llvm::Value *value);
   2198   llvm::Value *EmitARCRetainNonBlock(llvm::Value *value);
   2199   llvm::Value *EmitARCRetainBlock(llvm::Value *value, bool mandatory);
   2200   void EmitARCDestroyStrong(llvm::Value *addr, ARCPreciseLifetime_t precise);
   2201   void EmitARCRelease(llvm::Value *value, ARCPreciseLifetime_t precise);
   2202   llvm::Value *EmitARCAutorelease(llvm::Value *value);
   2203   llvm::Value *EmitARCAutoreleaseReturnValue(llvm::Value *value);
   2204   llvm::Value *EmitARCRetainAutoreleaseReturnValue(llvm::Value *value);
   2205   llvm::Value *EmitARCRetainAutoreleasedReturnValue(llvm::Value *value);
   2206 
   2207   std::pair<LValue,llvm::Value*>
   2208   EmitARCStoreAutoreleasing(const BinaryOperator *e);
   2209   std::pair<LValue,llvm::Value*>
   2210   EmitARCStoreStrong(const BinaryOperator *e, bool ignored);
   2211 
   2212   llvm::Value *EmitObjCThrowOperand(const Expr *expr);
   2213 
   2214   llvm::Value *EmitObjCProduceObject(QualType T, llvm::Value *Ptr);
   2215   llvm::Value *EmitObjCConsumeObject(QualType T, llvm::Value *Ptr);
   2216   llvm::Value *EmitObjCExtendObjectLifetime(QualType T, llvm::Value *Ptr);
   2217 
   2218   llvm::Value *EmitARCExtendBlockObject(const Expr *expr);
   2219   llvm::Value *EmitARCRetainScalarExpr(const Expr *expr);
   2220   llvm::Value *EmitARCRetainAutoreleaseScalarExpr(const Expr *expr);
   2221 
   2222   void EmitARCIntrinsicUse(llvm::ArrayRef<llvm::Value*> values);
   2223 
   2224   static Destroyer destroyARCStrongImprecise;
   2225   static Destroyer destroyARCStrongPrecise;
   2226   static Destroyer destroyARCWeak;
   2227 
   2228   void EmitObjCAutoreleasePoolPop(llvm::Value *Ptr);
   2229   llvm::Value *EmitObjCAutoreleasePoolPush();
   2230   llvm::Value *EmitObjCMRRAutoreleasePoolPush();
   2231   void EmitObjCAutoreleasePoolCleanup(llvm::Value *Ptr);
   2232   void EmitObjCMRRAutoreleasePoolPop(llvm::Value *Ptr);
   2233 
   2234   /// \brief Emits a reference binding to the passed in expression.
   2235   RValue EmitReferenceBindingToExpr(const Expr *E);
   2236 
   2237   //===--------------------------------------------------------------------===//
   2238   //                           Expression Emission
   2239   //===--------------------------------------------------------------------===//
   2240 
   2241   // Expressions are broken into three classes: scalar, complex, aggregate.
   2242 
   2243   /// EmitScalarExpr - Emit the computation of the specified expression of LLVM
   2244   /// scalar type, returning the result.
   2245   llvm::Value *EmitScalarExpr(const Expr *E , bool IgnoreResultAssign = false);
   2246 
   2247   /// EmitScalarConversion - Emit a conversion from the specified type to the
   2248   /// specified destination type, both of which are LLVM scalar types.
   2249   llvm::Value *EmitScalarConversion(llvm::Value *Src, QualType SrcTy,
   2250                                     QualType DstTy);
   2251 
   2252   /// EmitComplexToScalarConversion - Emit a conversion from the specified
   2253   /// complex type to the specified destination type, where the destination type
   2254   /// is an LLVM scalar type.
   2255   llvm::Value *EmitComplexToScalarConversion(ComplexPairTy Src, QualType SrcTy,
   2256                                              QualType DstTy);
   2257 
   2258 
   2259   /// EmitAggExpr - Emit the computation of the specified expression
   2260   /// of aggregate type.  The result is computed into the given slot,
   2261   /// which may be null to indicate that the value is not needed.
   2262   void EmitAggExpr(const Expr *E, AggValueSlot AS);
   2263 
   2264   /// EmitAggExprToLValue - Emit the computation of the specified expression of
   2265   /// aggregate type into a temporary LValue.
   2266   LValue EmitAggExprToLValue(const Expr *E);
   2267 
   2268   /// EmitGCMemmoveCollectable - Emit special API for structs with object
   2269   /// pointers.
   2270   void EmitGCMemmoveCollectable(llvm::Value *DestPtr, llvm::Value *SrcPtr,
   2271                                 QualType Ty);
   2272 
   2273   /// EmitExtendGCLifetime - Given a pointer to an Objective-C object,
   2274   /// make sure it survives garbage collection until this point.
   2275   void EmitExtendGCLifetime(llvm::Value *object);
   2276 
   2277   /// EmitComplexExpr - Emit the computation of the specified expression of
   2278   /// complex type, returning the result.
   2279   ComplexPairTy EmitComplexExpr(const Expr *E,
   2280                                 bool IgnoreReal = false,
   2281                                 bool IgnoreImag = false);
   2282 
   2283   /// EmitComplexExprIntoLValue - Emit the given expression of complex
   2284   /// type and place its result into the specified l-value.
   2285   void EmitComplexExprIntoLValue(const Expr *E, LValue dest, bool isInit);
   2286 
   2287   /// EmitStoreOfComplex - Store a complex number into the specified l-value.
   2288   void EmitStoreOfComplex(ComplexPairTy V, LValue dest, bool isInit);
   2289 
   2290   /// EmitLoadOfComplex - Load a complex number from the specified l-value.
   2291   ComplexPairTy EmitLoadOfComplex(LValue src);
   2292 
   2293   /// CreateStaticVarDecl - Create a zero-initialized LLVM global for
   2294   /// a static local variable.
   2295   llvm::GlobalVariable *CreateStaticVarDecl(const VarDecl &D,
   2296                                             const char *Separator,
   2297                                        llvm::GlobalValue::LinkageTypes Linkage);
   2298 
   2299   /// AddInitializerToStaticVarDecl - Add the initializer for 'D' to the
   2300   /// global variable that has already been created for it.  If the initializer
   2301   /// has a different type than GV does, this may free GV and return a different
   2302   /// one.  Otherwise it just returns GV.
   2303   llvm::GlobalVariable *
   2304   AddInitializerToStaticVarDecl(const VarDecl &D,
   2305                                 llvm::GlobalVariable *GV);
   2306 
   2307 
   2308   /// EmitCXXGlobalVarDeclInit - Create the initializer for a C++
   2309   /// variable with global storage.
   2310   void EmitCXXGlobalVarDeclInit(const VarDecl &D, llvm::Constant *DeclPtr,
   2311                                 bool PerformInit);
   2312 
   2313   /// Call atexit() with a function that passes the given argument to
   2314   /// the given function.
   2315   void registerGlobalDtorWithAtExit(llvm::Constant *fn, llvm::Constant *addr);
   2316 
   2317   /// Emit code in this function to perform a guarded variable
   2318   /// initialization.  Guarded initializations are used when it's not
   2319   /// possible to prove that an initialization will be done exactly
   2320   /// once, e.g. with a static local variable or a static data member
   2321   /// of a class template.
   2322   void EmitCXXGuardedInit(const VarDecl &D, llvm::GlobalVariable *DeclPtr,
   2323                           bool PerformInit);
   2324 
   2325   /// GenerateCXXGlobalInitFunc - Generates code for initializing global
   2326   /// variables.
   2327   void GenerateCXXGlobalInitFunc(llvm::Function *Fn,
   2328                                  ArrayRef<llvm::Constant *> Decls,
   2329                                  llvm::GlobalVariable *Guard = 0);
   2330 
   2331   /// GenerateCXXGlobalDtorsFunc - Generates code for destroying global
   2332   /// variables.
   2333   void GenerateCXXGlobalDtorsFunc(llvm::Function *Fn,
   2334                                   const std::vector<std::pair<llvm::WeakVH,
   2335                                   llvm::Constant*> > &DtorsAndObjects);
   2336 
   2337   void GenerateCXXGlobalVarDeclInitFunc(llvm::Function *Fn,
   2338                                         const VarDecl *D,
   2339                                         llvm::GlobalVariable *Addr,
   2340                                         bool PerformInit);
   2341 
   2342   void EmitCXXConstructExpr(const CXXConstructExpr *E, AggValueSlot Dest);
   2343 
   2344   void EmitSynthesizedCXXCopyCtor(llvm::Value *Dest, llvm::Value *Src,
   2345                                   const Expr *Exp);
   2346 
   2347   void enterFullExpression(const ExprWithCleanups *E) {
   2348     if (E->getNumObjects() == 0) return;
   2349     enterNonTrivialFullExpression(E);
   2350   }
   2351   void enterNonTrivialFullExpression(const ExprWithCleanups *E);
   2352 
   2353   void EmitCXXThrowExpr(const CXXThrowExpr *E, bool KeepInsertionPoint = true);
   2354 
   2355   void EmitLambdaExpr(const LambdaExpr *E, AggValueSlot Dest);
   2356 
   2357   RValue EmitAtomicExpr(AtomicExpr *E, llvm::Value *Dest = 0);
   2358 
   2359   //===--------------------------------------------------------------------===//
   2360   //                         Annotations Emission
   2361   //===--------------------------------------------------------------------===//
   2362 
   2363   /// Emit an annotation call (intrinsic or builtin).
   2364   llvm::Value *EmitAnnotationCall(llvm::Value *AnnotationFn,
   2365                                   llvm::Value *AnnotatedVal,
   2366                                   StringRef AnnotationStr,
   2367                                   SourceLocation Location);
   2368 
   2369   /// Emit local annotations for the local variable V, declared by D.
   2370   void EmitVarAnnotations(const VarDecl *D, llvm::Value *V);
   2371 
   2372   /// Emit field annotations for the given field & value. Returns the
   2373   /// annotation result.
   2374   llvm::Value *EmitFieldAnnotations(const FieldDecl *D, llvm::Value *V);
   2375 
   2376   //===--------------------------------------------------------------------===//
   2377   //                             Internal Helpers
   2378   //===--------------------------------------------------------------------===//
   2379 
   2380   /// ContainsLabel - Return true if the statement contains a label in it.  If
   2381   /// this statement is not executed normally, it not containing a label means
   2382   /// that we can just remove the code.
   2383   static bool ContainsLabel(const Stmt *S, bool IgnoreCaseStmts = false);
   2384 
   2385   /// containsBreak - Return true if the statement contains a break out of it.
   2386   /// If the statement (recursively) contains a switch or loop with a break
   2387   /// inside of it, this is fine.
   2388   static bool containsBreak(const Stmt *S);
   2389 
   2390   /// ConstantFoldsToSimpleInteger - If the specified expression does not fold
   2391   /// to a constant, or if it does but contains a label, return false.  If it
   2392   /// constant folds return true and set the boolean result in Result.
   2393   bool ConstantFoldsToSimpleInteger(const Expr *Cond, bool &Result);
   2394 
   2395   /// ConstantFoldsToSimpleInteger - If the specified expression does not fold
   2396   /// to a constant, or if it does but contains a label, return false.  If it
   2397   /// constant folds return true and set the folded value.
   2398   bool ConstantFoldsToSimpleInteger(const Expr *Cond, llvm::APSInt &Result);
   2399 
   2400   /// EmitBranchOnBoolExpr - Emit a branch on a boolean condition (e.g. for an
   2401   /// if statement) to the specified blocks.  Based on the condition, this might
   2402   /// try to simplify the codegen of the conditional based on the branch.
   2403   void EmitBranchOnBoolExpr(const Expr *Cond, llvm::BasicBlock *TrueBlock,
   2404                             llvm::BasicBlock *FalseBlock);
   2405 
   2406   /// \brief Emit a description of a type in a format suitable for passing to
   2407   /// a runtime sanitizer handler.
   2408   llvm::Constant *EmitCheckTypeDescriptor(QualType T);
   2409 
   2410   /// \brief Convert a value into a format suitable for passing to a runtime
   2411   /// sanitizer handler.
   2412   llvm::Value *EmitCheckValue(llvm::Value *V);
   2413 
   2414   /// \brief Emit a description of a source location in a format suitable for
   2415   /// passing to a runtime sanitizer handler.
   2416   llvm::Constant *EmitCheckSourceLocation(SourceLocation Loc);
   2417 
   2418   /// \brief Specify under what conditions this check can be recovered
   2419   enum CheckRecoverableKind {
   2420     /// Always terminate program execution if this check fails
   2421     CRK_Unrecoverable,
   2422     /// Check supports recovering, allows user to specify which
   2423     CRK_Recoverable,
   2424     /// Runtime conditionally aborts, always need to support recovery.
   2425     CRK_AlwaysRecoverable
   2426   };
   2427 
   2428   /// \brief Create a basic block that will call a handler function in a
   2429   /// sanitizer runtime with the provided arguments, and create a conditional
   2430   /// branch to it.
   2431   void EmitCheck(llvm::Value *Checked, StringRef CheckName,
   2432                  ArrayRef<llvm::Constant *> StaticArgs,
   2433                  ArrayRef<llvm::Value *> DynamicArgs,
   2434                  CheckRecoverableKind Recoverable);
   2435 
   2436   /// \brief Create a basic block that will call the trap intrinsic, and emit a
   2437   /// conditional branch to it, for the -ftrapv checks.
   2438   void EmitTrapCheck(llvm::Value *Checked);
   2439 
   2440   /// EmitCallArg - Emit a single call argument.
   2441   void EmitCallArg(CallArgList &args, const Expr *E, QualType ArgType);
   2442 
   2443   /// EmitDelegateCallArg - We are performing a delegate call; that
   2444   /// is, the current function is delegating to another one.  Produce
   2445   /// a r-value suitable for passing the given parameter.
   2446   void EmitDelegateCallArg(CallArgList &args, const VarDecl *param);
   2447 
   2448   /// SetFPAccuracy - Set the minimum required accuracy of the given floating
   2449   /// point operation, expressed as the maximum relative error in ulp.
   2450   void SetFPAccuracy(llvm::Value *Val, float Accuracy);
   2451 
   2452 private:
   2453   llvm::MDNode *getRangeForLoadFromType(QualType Ty);
   2454   void EmitReturnOfRValue(RValue RV, QualType Ty);
   2455 
   2456   /// ExpandTypeFromArgs - Reconstruct a structure of type \arg Ty
   2457   /// from function arguments into \arg Dst. See ABIArgInfo::Expand.
   2458   ///
   2459   /// \param AI - The first function argument of the expansion.
   2460   /// \return The argument following the last expanded function
   2461   /// argument.
   2462   llvm::Function::arg_iterator
   2463   ExpandTypeFromArgs(QualType Ty, LValue Dst,
   2464                      llvm::Function::arg_iterator AI);
   2465 
   2466   /// ExpandTypeToArgs - Expand an RValue \arg Src, with the LLVM type for \arg
   2467   /// Ty, into individual arguments on the provided vector \arg Args. See
   2468   /// ABIArgInfo::Expand.
   2469   void ExpandTypeToArgs(QualType Ty, RValue Src,
   2470                         SmallVectorImpl<llvm::Value *> &Args,
   2471                         llvm::FunctionType *IRFuncTy);
   2472 
   2473   llvm::Value* EmitAsmInput(const TargetInfo::ConstraintInfo &Info,
   2474                             const Expr *InputExpr, std::string &ConstraintStr);
   2475 
   2476   llvm::Value* EmitAsmInputLValue(const TargetInfo::ConstraintInfo &Info,
   2477                                   LValue InputValue, QualType InputType,
   2478                                   std::string &ConstraintStr);
   2479 
   2480   /// EmitCallArgs - Emit call arguments for a function.
   2481   /// The CallArgTypeInfo parameter is used for iterating over the known
   2482   /// argument types of the function being called.
   2483   template<typename T>
   2484   void EmitCallArgs(CallArgList& Args, const T* CallArgTypeInfo,
   2485                     CallExpr::const_arg_iterator ArgBeg,
   2486                     CallExpr::const_arg_iterator ArgEnd,
   2487                     bool ForceColumnInfo = false) {
   2488     CGDebugInfo *DI = getDebugInfo();
   2489     SourceLocation CallLoc;
   2490     if (DI) CallLoc = DI->getLocation();
   2491 
   2492     CallExpr::const_arg_iterator Arg = ArgBeg;
   2493 
   2494     // First, use the argument types that the type info knows about
   2495     if (CallArgTypeInfo) {
   2496       for (typename T::arg_type_iterator I = CallArgTypeInfo->arg_type_begin(),
   2497            E = CallArgTypeInfo->arg_type_end(); I != E; ++I, ++Arg) {
   2498         assert(Arg != ArgEnd && "Running over edge of argument list!");
   2499         QualType ArgType = *I;
   2500 #ifndef NDEBUG
   2501         QualType ActualArgType = Arg->getType();
   2502         if (ArgType->isPointerType() && ActualArgType->isPointerType()) {
   2503           QualType ActualBaseType =
   2504             ActualArgType->getAs<PointerType>()->getPointeeType();
   2505           QualType ArgBaseType =
   2506             ArgType->getAs<PointerType>()->getPointeeType();
   2507           if (ArgBaseType->isVariableArrayType()) {
   2508             if (const VariableArrayType *VAT =
   2509                 getContext().getAsVariableArrayType(ActualBaseType)) {
   2510               if (!VAT->getSizeExpr())
   2511                 ActualArgType = ArgType;
   2512             }
   2513           }
   2514         }
   2515         assert(getContext().getCanonicalType(ArgType.getNonReferenceType()).
   2516                getTypePtr() ==
   2517                getContext().getCanonicalType(ActualArgType).getTypePtr() &&
   2518                "type mismatch in call argument!");
   2519 #endif
   2520         EmitCallArg(Args, *Arg, ArgType);
   2521 
   2522         // Each argument expression could modify the debug
   2523         // location. Restore it.
   2524         if (DI) DI->EmitLocation(Builder, CallLoc, ForceColumnInfo);
   2525       }
   2526 
   2527       // Either we've emitted all the call args, or we have a call to a
   2528       // variadic function.
   2529       assert((Arg == ArgEnd || CallArgTypeInfo->isVariadic()) &&
   2530              "Extra arguments in non-variadic function!");
   2531 
   2532     }
   2533 
   2534     // If we still have any arguments, emit them using the type of the argument.
   2535     for (; Arg != ArgEnd; ++Arg) {
   2536       EmitCallArg(Args, *Arg, Arg->getType());
   2537 
   2538       // Restore the debug location.
   2539       if (DI) DI->EmitLocation(Builder, CallLoc, ForceColumnInfo);
   2540     }
   2541   }
   2542 
   2543   const TargetCodeGenInfo &getTargetHooks() const {
   2544     return CGM.getTargetCodeGenInfo();
   2545   }
   2546 
   2547   void EmitDeclMetadata();
   2548 
   2549   CodeGenModule::ByrefHelpers *
   2550   buildByrefHelpers(llvm::StructType &byrefType,
   2551                     const AutoVarEmission &emission);
   2552 
   2553   void AddObjCARCExceptionMetadata(llvm::Instruction *Inst);
   2554 
   2555   /// GetPointeeAlignment - Given an expression with a pointer type, emit the
   2556   /// value and compute our best estimate of the alignment of the pointee.
   2557   std::pair<llvm::Value*, unsigned> EmitPointerWithAlignment(const Expr *Addr);
   2558 };
   2559 
   2560 /// Helper class with most of the code for saving a value for a
   2561 /// conditional expression cleanup.
   2562 struct DominatingLLVMValue {
   2563   typedef llvm::PointerIntPair<llvm::Value*, 1, bool> saved_type;
   2564 
   2565   /// Answer whether the given value needs extra work to be saved.
   2566   static bool needsSaving(llvm::Value *value) {
   2567     // If it's not an instruction, we don't need to save.
   2568     if (!isa<llvm::Instruction>(value)) return false;
   2569 
   2570     // If it's an instruction in the entry block, we don't need to save.
   2571     llvm::BasicBlock *block = cast<llvm::Instruction>(value)->getParent();
   2572     return (block != &block->getParent()->getEntryBlock());
   2573   }
   2574 
   2575   /// Try to save the given value.
   2576   static saved_type save(CodeGenFunction &CGF, llvm::Value *value) {
   2577     if (!needsSaving(value)) return saved_type(value, false);
   2578 
   2579     // Otherwise we need an alloca.
   2580     llvm::Value *alloca =
   2581       CGF.CreateTempAlloca(value->getType(), "cond-cleanup.save");
   2582     CGF.Builder.CreateStore(value, alloca);
   2583 
   2584     return saved_type(alloca, true);
   2585   }
   2586 
   2587   static llvm::Value *restore(CodeGenFunction &CGF, saved_type value) {
   2588     if (!value.getInt()) return value.getPointer();
   2589     return CGF.Builder.CreateLoad(value.getPointer());
   2590   }
   2591 };
   2592 
   2593 /// A partial specialization of DominatingValue for llvm::Values that
   2594 /// might be llvm::Instructions.
   2595 template <class T> struct DominatingPointer<T,true> : DominatingLLVMValue {
   2596   typedef T *type;
   2597   static type restore(CodeGenFunction &CGF, saved_type value) {
   2598     return static_cast<T*>(DominatingLLVMValue::restore(CGF, value));
   2599   }
   2600 };
   2601 
   2602 /// A specialization of DominatingValue for RValue.
   2603 template <> struct DominatingValue<RValue> {
   2604   typedef RValue type;
   2605   class saved_type {
   2606     enum Kind { ScalarLiteral, ScalarAddress, AggregateLiteral,
   2607                 AggregateAddress, ComplexAddress };
   2608 
   2609     llvm::Value *Value;
   2610     Kind K;
   2611     saved_type(llvm::Value *v, Kind k) : Value(v), K(k) {}
   2612 
   2613   public:
   2614     static bool needsSaving(RValue value);
   2615     static saved_type save(CodeGenFunction &CGF, RValue value);
   2616     RValue restore(CodeGenFunction &CGF);
   2617 
   2618     // implementations in CGExprCXX.cpp
   2619   };
   2620 
   2621   static bool needsSaving(type value) {
   2622     return saved_type::needsSaving(value);
   2623   }
   2624   static saved_type save(CodeGenFunction &CGF, type value) {
   2625     return saved_type::save(CGF, value);
   2626   }
   2627   static type restore(CodeGenFunction &CGF, saved_type value) {
   2628     return value.restore(CGF);
   2629   }
   2630 };
   2631 
   2632 }  // end namespace CodeGen
   2633 }  // end namespace clang
   2634 
   2635 #endif
   2636