Home | History | Annotate | Download | only in CodeGen
      1 //===--- CGDebugInfo.cpp - Emit Debug Information for a Module ------------===//
      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 coordinates the debug information generation while generating code.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #include "CGDebugInfo.h"
     15 #include "CodeGenFunction.h"
     16 #include "CodeGenModule.h"
     17 #include "CGBlocks.h"
     18 #include "clang/AST/ASTContext.h"
     19 #include "clang/AST/DeclFriend.h"
     20 #include "clang/AST/DeclObjC.h"
     21 #include "clang/AST/DeclTemplate.h"
     22 #include "clang/AST/Expr.h"
     23 #include "clang/AST/RecordLayout.h"
     24 #include "clang/Basic/SourceManager.h"
     25 #include "clang/Basic/FileManager.h"
     26 #include "clang/Basic/Version.h"
     27 #include "clang/Frontend/CodeGenOptions.h"
     28 #include "llvm/Constants.h"
     29 #include "llvm/DerivedTypes.h"
     30 #include "llvm/Instructions.h"
     31 #include "llvm/Intrinsics.h"
     32 #include "llvm/Module.h"
     33 #include "llvm/ADT/StringExtras.h"
     34 #include "llvm/ADT/SmallVector.h"
     35 #include "llvm/Support/Dwarf.h"
     36 #include "llvm/Support/FileSystem.h"
     37 #include "llvm/Target/TargetData.h"
     38 using namespace clang;
     39 using namespace clang::CodeGen;
     40 
     41 CGDebugInfo::CGDebugInfo(CodeGenModule &CGM)
     42   : CGM(CGM), DBuilder(CGM.getModule()),
     43     BlockLiteralGenericSet(false) {
     44   CreateCompileUnit();
     45 }
     46 
     47 CGDebugInfo::~CGDebugInfo() {
     48   assert(LexicalBlockStack.empty() &&
     49          "Region stack mismatch, stack not empty!");
     50 }
     51 
     52 void CGDebugInfo::setLocation(SourceLocation Loc) {
     53   // If the new location isn't valid return.
     54   if (!Loc.isValid()) return;
     55 
     56   CurLoc = CGM.getContext().getSourceManager().getExpansionLoc(Loc);
     57 
     58   // If we've changed files in the middle of a lexical scope go ahead
     59   // and create a new lexical scope with file node if it's different
     60   // from the one in the scope.
     61   if (LexicalBlockStack.empty()) return;
     62 
     63   SourceManager &SM = CGM.getContext().getSourceManager();
     64   PresumedLoc PCLoc = SM.getPresumedLoc(CurLoc);
     65   PresumedLoc PPLoc = SM.getPresumedLoc(PrevLoc);
     66 
     67   if (PCLoc.isInvalid() || PPLoc.isInvalid() ||
     68       !strcmp(PPLoc.getFilename(), PCLoc.getFilename()))
     69     return;
     70 
     71   llvm::MDNode *LB = LexicalBlockStack.back();
     72   llvm::DIScope Scope = llvm::DIScope(LB);
     73   if (Scope.isLexicalBlockFile()) {
     74     llvm::DILexicalBlockFile LBF = llvm::DILexicalBlockFile(LB);
     75     llvm::DIDescriptor D
     76       = DBuilder.createLexicalBlockFile(LBF.getScope(),
     77                                         getOrCreateFile(CurLoc));
     78     llvm::MDNode *N = D;
     79     LexicalBlockStack.pop_back();
     80     LexicalBlockStack.push_back(N);
     81   } else if (Scope.isLexicalBlock()) {
     82     llvm::DIDescriptor D
     83       = DBuilder.createLexicalBlockFile(Scope, getOrCreateFile(CurLoc));
     84     llvm::MDNode *N = D;
     85     LexicalBlockStack.pop_back();
     86     LexicalBlockStack.push_back(N);
     87   }
     88 }
     89 
     90 /// getContextDescriptor - Get context info for the decl.
     91 llvm::DIDescriptor CGDebugInfo::getContextDescriptor(const Decl *Context) {
     92   if (!Context)
     93     return TheCU;
     94 
     95   llvm::DenseMap<const Decl *, llvm::WeakVH>::iterator
     96     I = RegionMap.find(Context);
     97   if (I != RegionMap.end())
     98     return llvm::DIDescriptor(dyn_cast_or_null<llvm::MDNode>(&*I->second));
     99 
    100   // Check namespace.
    101   if (const NamespaceDecl *NSDecl = dyn_cast<NamespaceDecl>(Context))
    102     return llvm::DIDescriptor(getOrCreateNameSpace(NSDecl));
    103 
    104   if (const RecordDecl *RDecl = dyn_cast<RecordDecl>(Context)) {
    105     if (!RDecl->isDependentType()) {
    106       llvm::DIType Ty = getOrCreateType(CGM.getContext().getTypeDeclType(RDecl),
    107                                         getOrCreateMainFile());
    108       return llvm::DIDescriptor(Ty);
    109     }
    110   }
    111   return TheCU;
    112 }
    113 
    114 /// getFunctionName - Get function name for the given FunctionDecl. If the
    115 /// name is constructred on demand (e.g. C++ destructor) then the name
    116 /// is stored on the side.
    117 StringRef CGDebugInfo::getFunctionName(const FunctionDecl *FD) {
    118   assert (FD && "Invalid FunctionDecl!");
    119   IdentifierInfo *FII = FD->getIdentifier();
    120   FunctionTemplateSpecializationInfo *Info
    121     = FD->getTemplateSpecializationInfo();
    122   if (!Info && FII)
    123     return FII->getName();
    124 
    125   // Otherwise construct human readable name for debug info.
    126   std::string NS = FD->getNameAsString();
    127 
    128   // Add any template specialization args.
    129   if (Info) {
    130     const TemplateArgumentList *TArgs = Info->TemplateArguments;
    131     const TemplateArgument *Args = TArgs->data();
    132     unsigned NumArgs = TArgs->size();
    133     PrintingPolicy Policy(CGM.getLangOpts());
    134     NS += TemplateSpecializationType::PrintTemplateArgumentList(Args,
    135                                                                 NumArgs,
    136                                                                 Policy);
    137   }
    138 
    139   // Copy this name on the side and use its reference.
    140   char *StrPtr = DebugInfoNames.Allocate<char>(NS.length());
    141   memcpy(StrPtr, NS.data(), NS.length());
    142   return StringRef(StrPtr, NS.length());
    143 }
    144 
    145 StringRef CGDebugInfo::getObjCMethodName(const ObjCMethodDecl *OMD) {
    146   SmallString<256> MethodName;
    147   llvm::raw_svector_ostream OS(MethodName);
    148   OS << (OMD->isInstanceMethod() ? '-' : '+') << '[';
    149   const DeclContext *DC = OMD->getDeclContext();
    150   if (const ObjCImplementationDecl *OID =
    151       dyn_cast<const ObjCImplementationDecl>(DC)) {
    152      OS << OID->getName();
    153   } else if (const ObjCInterfaceDecl *OID =
    154              dyn_cast<const ObjCInterfaceDecl>(DC)) {
    155       OS << OID->getName();
    156   } else if (const ObjCCategoryImplDecl *OCD =
    157              dyn_cast<const ObjCCategoryImplDecl>(DC)){
    158       OS << ((NamedDecl *)OCD)->getIdentifier()->getNameStart() << '(' <<
    159           OCD->getIdentifier()->getNameStart() << ')';
    160   }
    161   OS << ' ' << OMD->getSelector().getAsString() << ']';
    162 
    163   char *StrPtr = DebugInfoNames.Allocate<char>(OS.tell());
    164   memcpy(StrPtr, MethodName.begin(), OS.tell());
    165   return StringRef(StrPtr, OS.tell());
    166 }
    167 
    168 /// getSelectorName - Return selector name. This is used for debugging
    169 /// info.
    170 StringRef CGDebugInfo::getSelectorName(Selector S) {
    171   const std::string &SName = S.getAsString();
    172   char *StrPtr = DebugInfoNames.Allocate<char>(SName.size());
    173   memcpy(StrPtr, SName.data(), SName.size());
    174   return StringRef(StrPtr, SName.size());
    175 }
    176 
    177 /// getClassName - Get class name including template argument list.
    178 StringRef
    179 CGDebugInfo::getClassName(const RecordDecl *RD) {
    180   const ClassTemplateSpecializationDecl *Spec
    181     = dyn_cast<ClassTemplateSpecializationDecl>(RD);
    182   if (!Spec)
    183     return RD->getName();
    184 
    185   const TemplateArgument *Args;
    186   unsigned NumArgs;
    187   if (TypeSourceInfo *TAW = Spec->getTypeAsWritten()) {
    188     const TemplateSpecializationType *TST =
    189       cast<TemplateSpecializationType>(TAW->getType());
    190     Args = TST->getArgs();
    191     NumArgs = TST->getNumArgs();
    192   } else {
    193     const TemplateArgumentList &TemplateArgs = Spec->getTemplateArgs();
    194     Args = TemplateArgs.data();
    195     NumArgs = TemplateArgs.size();
    196   }
    197   StringRef Name = RD->getIdentifier()->getName();
    198   PrintingPolicy Policy(CGM.getLangOpts());
    199   std::string TemplateArgList =
    200     TemplateSpecializationType::PrintTemplateArgumentList(Args, NumArgs, Policy);
    201 
    202   // Copy this name on the side and use its reference.
    203   size_t Length = Name.size() + TemplateArgList.size();
    204   char *StrPtr = DebugInfoNames.Allocate<char>(Length);
    205   memcpy(StrPtr, Name.data(), Name.size());
    206   memcpy(StrPtr + Name.size(), TemplateArgList.data(), TemplateArgList.size());
    207   return StringRef(StrPtr, Length);
    208 }
    209 
    210 /// getOrCreateFile - Get the file debug info descriptor for the input location.
    211 llvm::DIFile CGDebugInfo::getOrCreateFile(SourceLocation Loc) {
    212   if (!Loc.isValid())
    213     // If Location is not valid then use main input file.
    214     return DBuilder.createFile(TheCU.getFilename(), TheCU.getDirectory());
    215 
    216   SourceManager &SM = CGM.getContext().getSourceManager();
    217   PresumedLoc PLoc = SM.getPresumedLoc(Loc);
    218 
    219   if (PLoc.isInvalid() || StringRef(PLoc.getFilename()).empty())
    220     // If the location is not valid then use main input file.
    221     return DBuilder.createFile(TheCU.getFilename(), TheCU.getDirectory());
    222 
    223   // Cache the results.
    224   const char *fname = PLoc.getFilename();
    225   llvm::DenseMap<const char *, llvm::WeakVH>::iterator it =
    226     DIFileCache.find(fname);
    227 
    228   if (it != DIFileCache.end()) {
    229     // Verify that the information still exists.
    230     if (&*it->second)
    231       return llvm::DIFile(cast<llvm::MDNode>(it->second));
    232   }
    233 
    234   llvm::DIFile F = DBuilder.createFile(PLoc.getFilename(), getCurrentDirname());
    235 
    236   DIFileCache[fname] = F;
    237   return F;
    238 }
    239 
    240 /// getOrCreateMainFile - Get the file info for main compile unit.
    241 llvm::DIFile CGDebugInfo::getOrCreateMainFile() {
    242   return DBuilder.createFile(TheCU.getFilename(), TheCU.getDirectory());
    243 }
    244 
    245 /// getLineNumber - Get line number for the location. If location is invalid
    246 /// then use current location.
    247 unsigned CGDebugInfo::getLineNumber(SourceLocation Loc) {
    248   if (Loc.isInvalid() && CurLoc.isInvalid())
    249     return 0;
    250   SourceManager &SM = CGM.getContext().getSourceManager();
    251   PresumedLoc PLoc = SM.getPresumedLoc(Loc.isValid() ? Loc : CurLoc);
    252   return PLoc.isValid()? PLoc.getLine() : 0;
    253 }
    254 
    255 /// getColumnNumber - Get column number for the location. If location is
    256 /// invalid then use current location.
    257 unsigned CGDebugInfo::getColumnNumber(SourceLocation Loc) {
    258   if (Loc.isInvalid() && CurLoc.isInvalid())
    259     return 0;
    260   SourceManager &SM = CGM.getContext().getSourceManager();
    261   PresumedLoc PLoc = SM.getPresumedLoc(Loc.isValid() ? Loc : CurLoc);
    262   return PLoc.isValid()? PLoc.getColumn() : 0;
    263 }
    264 
    265 StringRef CGDebugInfo::getCurrentDirname() {
    266   if (!CGM.getCodeGenOpts().DebugCompilationDir.empty())
    267     return CGM.getCodeGenOpts().DebugCompilationDir;
    268 
    269   if (!CWDName.empty())
    270     return CWDName;
    271   SmallString<256> CWD;
    272   llvm::sys::fs::current_path(CWD);
    273   char *CompDirnamePtr = DebugInfoNames.Allocate<char>(CWD.size());
    274   memcpy(CompDirnamePtr, CWD.data(), CWD.size());
    275   return CWDName = StringRef(CompDirnamePtr, CWD.size());
    276 }
    277 
    278 /// CreateCompileUnit - Create new compile unit.
    279 void CGDebugInfo::CreateCompileUnit() {
    280 
    281   // Get absolute path name.
    282   SourceManager &SM = CGM.getContext().getSourceManager();
    283   std::string MainFileName = CGM.getCodeGenOpts().MainFileName;
    284   if (MainFileName.empty())
    285     MainFileName = "<unknown>";
    286 
    287   // The main file name provided via the "-main-file-name" option contains just
    288   // the file name itself with no path information. This file name may have had
    289   // a relative path, so we look into the actual file entry for the main
    290   // file to determine the real absolute path for the file.
    291   std::string MainFileDir;
    292   if (const FileEntry *MainFile = SM.getFileEntryForID(SM.getMainFileID())) {
    293     MainFileDir = MainFile->getDir()->getName();
    294     if (MainFileDir != ".")
    295       MainFileName = MainFileDir + "/" + MainFileName;
    296   }
    297 
    298   // Save filename string.
    299   char *FilenamePtr = DebugInfoNames.Allocate<char>(MainFileName.length());
    300   memcpy(FilenamePtr, MainFileName.c_str(), MainFileName.length());
    301   StringRef Filename(FilenamePtr, MainFileName.length());
    302 
    303   unsigned LangTag;
    304   const LangOptions &LO = CGM.getLangOpts();
    305   if (LO.CPlusPlus) {
    306     if (LO.ObjC1)
    307       LangTag = llvm::dwarf::DW_LANG_ObjC_plus_plus;
    308     else
    309       LangTag = llvm::dwarf::DW_LANG_C_plus_plus;
    310   } else if (LO.ObjC1) {
    311     LangTag = llvm::dwarf::DW_LANG_ObjC;
    312   } else if (LO.C99) {
    313     LangTag = llvm::dwarf::DW_LANG_C99;
    314   } else {
    315     LangTag = llvm::dwarf::DW_LANG_C89;
    316   }
    317 
    318   std::string Producer = getClangFullVersion();
    319 
    320   // Figure out which version of the ObjC runtime we have.
    321   unsigned RuntimeVers = 0;
    322   if (LO.ObjC1)
    323     RuntimeVers = LO.ObjCNonFragileABI ? 2 : 1;
    324 
    325   // Create new compile unit.
    326   DBuilder.createCompileUnit(
    327     LangTag, Filename, getCurrentDirname(),
    328     Producer,
    329     LO.Optimize, CGM.getCodeGenOpts().DwarfDebugFlags, RuntimeVers);
    330   // FIXME - Eliminate TheCU.
    331   TheCU = llvm::DICompileUnit(DBuilder.getCU());
    332 }
    333 
    334 /// CreateType - Get the Basic type from the cache or create a new
    335 /// one if necessary.
    336 llvm::DIType CGDebugInfo::CreateType(const BuiltinType *BT) {
    337   unsigned Encoding = 0;
    338   const char *BTName = NULL;
    339   switch (BT->getKind()) {
    340 #define BUILTIN_TYPE(Id, SingletonId)
    341 #define PLACEHOLDER_TYPE(Id, SingletonId) \
    342   case BuiltinType::Id:
    343 #include "clang/AST/BuiltinTypes.def"
    344   case BuiltinType::Dependent:
    345     llvm_unreachable("Unexpected builtin type");
    346   case BuiltinType::NullPtr:
    347     return DBuilder.
    348       createNullPtrType(BT->getName(CGM.getContext().getLangOpts()));
    349   case BuiltinType::Void:
    350     return llvm::DIType();
    351   case BuiltinType::ObjCClass:
    352     return DBuilder.createForwardDecl(llvm::dwarf::DW_TAG_structure_type,
    353                                       "objc_class", getOrCreateMainFile(),
    354                                       0);
    355   case BuiltinType::ObjCId: {
    356     // typedef struct objc_class *Class;
    357     // typedef struct objc_object {
    358     //  Class isa;
    359     // } *id;
    360 
    361     // TODO: Cache these two types to avoid duplicates.
    362     llvm::DIType OCTy =
    363       DBuilder.createForwardDecl(llvm::dwarf::DW_TAG_structure_type,
    364                                  "objc_class", getOrCreateMainFile(),
    365                                  0);
    366     unsigned Size = CGM.getContext().getTypeSize(CGM.getContext().VoidPtrTy);
    367 
    368     llvm::DIType ISATy = DBuilder.createPointerType(OCTy, Size);
    369 
    370     SmallVector<llvm::Value *, 16> EltTys;
    371     llvm::DIType FieldTy =
    372       DBuilder.createMemberType(getOrCreateMainFile(), "isa",
    373                                 getOrCreateMainFile(), 0, Size,
    374                                 0, 0, 0, ISATy);
    375     EltTys.push_back(FieldTy);
    376     llvm::DIArray Elements = DBuilder.getOrCreateArray(EltTys);
    377 
    378     return DBuilder.createStructType(TheCU, "objc_object",
    379                                      getOrCreateMainFile(),
    380                                      0, 0, 0, 0, Elements);
    381   }
    382   case BuiltinType::ObjCSel: {
    383     return
    384       DBuilder.createForwardDecl(llvm::dwarf::DW_TAG_structure_type,
    385                                  "objc_selector", getOrCreateMainFile(),
    386                                  0);
    387   }
    388   case BuiltinType::UChar:
    389   case BuiltinType::Char_U: Encoding = llvm::dwarf::DW_ATE_unsigned_char; break;
    390   case BuiltinType::Char_S:
    391   case BuiltinType::SChar: Encoding = llvm::dwarf::DW_ATE_signed_char; break;
    392   case BuiltinType::Char16:
    393   case BuiltinType::Char32: Encoding = llvm::dwarf::DW_ATE_UTF; break;
    394   case BuiltinType::UShort:
    395   case BuiltinType::UInt:
    396   case BuiltinType::UInt128:
    397   case BuiltinType::ULong:
    398   case BuiltinType::WChar_U:
    399   case BuiltinType::ULongLong: Encoding = llvm::dwarf::DW_ATE_unsigned; break;
    400   case BuiltinType::Short:
    401   case BuiltinType::Int:
    402   case BuiltinType::Int128:
    403   case BuiltinType::Long:
    404   case BuiltinType::WChar_S:
    405   case BuiltinType::LongLong:  Encoding = llvm::dwarf::DW_ATE_signed; break;
    406   case BuiltinType::Bool:      Encoding = llvm::dwarf::DW_ATE_boolean; break;
    407   case BuiltinType::Half:
    408   case BuiltinType::Float:
    409   case BuiltinType::LongDouble:
    410   case BuiltinType::Double:    Encoding = llvm::dwarf::DW_ATE_float; break;
    411   }
    412 
    413   switch (BT->getKind()) {
    414   case BuiltinType::Long:      BTName = "long int"; break;
    415   case BuiltinType::LongLong:  BTName = "long long int"; break;
    416   case BuiltinType::ULong:     BTName = "long unsigned int"; break;
    417   case BuiltinType::ULongLong: BTName = "long long unsigned int"; break;
    418   default:
    419     BTName = BT->getName(CGM.getContext().getLangOpts());
    420     break;
    421   }
    422   // Bit size, align and offset of the type.
    423   uint64_t Size = CGM.getContext().getTypeSize(BT);
    424   uint64_t Align = CGM.getContext().getTypeAlign(BT);
    425   llvm::DIType DbgTy =
    426     DBuilder.createBasicType(BTName, Size, Align, Encoding);
    427   return DbgTy;
    428 }
    429 
    430 llvm::DIType CGDebugInfo::CreateType(const ComplexType *Ty) {
    431   // Bit size, align and offset of the type.
    432   unsigned Encoding = llvm::dwarf::DW_ATE_complex_float;
    433   if (Ty->isComplexIntegerType())
    434     Encoding = llvm::dwarf::DW_ATE_lo_user;
    435 
    436   uint64_t Size = CGM.getContext().getTypeSize(Ty);
    437   uint64_t Align = CGM.getContext().getTypeAlign(Ty);
    438   llvm::DIType DbgTy =
    439     DBuilder.createBasicType("complex", Size, Align, Encoding);
    440 
    441   return DbgTy;
    442 }
    443 
    444 /// CreateCVRType - Get the qualified type from the cache or create
    445 /// a new one if necessary.
    446 llvm::DIType CGDebugInfo::CreateQualifiedType(QualType Ty, llvm::DIFile Unit) {
    447   QualifierCollector Qc;
    448   const Type *T = Qc.strip(Ty);
    449 
    450   // Ignore these qualifiers for now.
    451   Qc.removeObjCGCAttr();
    452   Qc.removeAddressSpace();
    453   Qc.removeObjCLifetime();
    454 
    455   // We will create one Derived type for one qualifier and recurse to handle any
    456   // additional ones.
    457   unsigned Tag;
    458   if (Qc.hasConst()) {
    459     Tag = llvm::dwarf::DW_TAG_const_type;
    460     Qc.removeConst();
    461   } else if (Qc.hasVolatile()) {
    462     Tag = llvm::dwarf::DW_TAG_volatile_type;
    463     Qc.removeVolatile();
    464   } else if (Qc.hasRestrict()) {
    465     Tag = llvm::dwarf::DW_TAG_restrict_type;
    466     Qc.removeRestrict();
    467   } else {
    468     assert(Qc.empty() && "Unknown type qualifier for debug info");
    469     return getOrCreateType(QualType(T, 0), Unit);
    470   }
    471 
    472   llvm::DIType FromTy = getOrCreateType(Qc.apply(CGM.getContext(), T), Unit);
    473 
    474   // No need to fill in the Name, Line, Size, Alignment, Offset in case of
    475   // CVR derived types.
    476   llvm::DIType DbgTy = DBuilder.createQualifiedType(Tag, FromTy);
    477 
    478   return DbgTy;
    479 }
    480 
    481 llvm::DIType CGDebugInfo::CreateType(const ObjCObjectPointerType *Ty,
    482                                      llvm::DIFile Unit) {
    483   llvm::DIType DbgTy =
    484     CreatePointerLikeType(llvm::dwarf::DW_TAG_pointer_type, Ty,
    485                           Ty->getPointeeType(), Unit);
    486   return DbgTy;
    487 }
    488 
    489 llvm::DIType CGDebugInfo::CreateType(const PointerType *Ty,
    490                                      llvm::DIFile Unit) {
    491   return CreatePointerLikeType(llvm::dwarf::DW_TAG_pointer_type, Ty,
    492                                Ty->getPointeeType(), Unit);
    493 }
    494 
    495 // Creates a forward declaration for a RecordDecl in the given context.
    496 llvm::DIType CGDebugInfo::createRecordFwdDecl(const RecordDecl *RD,
    497                                               llvm::DIDescriptor Ctx) {
    498   llvm::DIFile DefUnit = getOrCreateFile(RD->getLocation());
    499   unsigned Line = getLineNumber(RD->getLocation());
    500   StringRef RDName = RD->getName();
    501 
    502   // Get the tag.
    503   const CXXRecordDecl *CXXDecl = dyn_cast<CXXRecordDecl>(RD);
    504   unsigned Tag = 0;
    505   if (CXXDecl) {
    506     RDName = getClassName(RD);
    507     Tag = llvm::dwarf::DW_TAG_class_type;
    508   }
    509   else if (RD->isStruct())
    510     Tag = llvm::dwarf::DW_TAG_structure_type;
    511   else if (RD->isUnion())
    512     Tag = llvm::dwarf::DW_TAG_union_type;
    513   else
    514     llvm_unreachable("Unknown RecordDecl type!");
    515 
    516   // Create the type.
    517   return DBuilder.createForwardDecl(Tag, RDName, DefUnit, Line);
    518 }
    519 
    520 // Walk up the context chain and create forward decls for record decls,
    521 // and normal descriptors for namespaces.
    522 llvm::DIDescriptor CGDebugInfo::createContextChain(const Decl *Context) {
    523   if (!Context)
    524     return TheCU;
    525 
    526   // See if we already have the parent.
    527   llvm::DenseMap<const Decl *, llvm::WeakVH>::iterator
    528     I = RegionMap.find(Context);
    529   if (I != RegionMap.end())
    530     return llvm::DIDescriptor(dyn_cast_or_null<llvm::MDNode>(&*I->second));
    531 
    532   // Check namespace.
    533   if (const NamespaceDecl *NSDecl = dyn_cast<NamespaceDecl>(Context))
    534     return llvm::DIDescriptor(getOrCreateNameSpace(NSDecl));
    535 
    536   if (const RecordDecl *RD = dyn_cast<RecordDecl>(Context)) {
    537     if (!RD->isDependentType()) {
    538       llvm::DIType Ty = getOrCreateLimitedType(CGM.getContext().getTypeDeclType(RD),
    539 					       getOrCreateMainFile());
    540       return llvm::DIDescriptor(Ty);
    541     }
    542   }
    543   return TheCU;
    544 }
    545 
    546 /// CreatePointeeType - Create Pointee type. If Pointee is a record
    547 /// then emit record's fwd if debug info size reduction is enabled.
    548 llvm::DIType CGDebugInfo::CreatePointeeType(QualType PointeeTy,
    549                                             llvm::DIFile Unit) {
    550   if (!CGM.getCodeGenOpts().LimitDebugInfo)
    551     return getOrCreateType(PointeeTy, Unit);
    552 
    553   // Limit debug info for the pointee type.
    554 
    555   // If we have an existing type, use that, it's still smaller than creating
    556   // a new type.
    557   llvm::DIType Ty = getTypeOrNull(PointeeTy);
    558   if (Ty.Verify()) return Ty;
    559 
    560   // Handle qualifiers.
    561   if (PointeeTy.hasLocalQualifiers())
    562     return CreateQualifiedType(PointeeTy, Unit);
    563 
    564   if (const RecordType *RTy = dyn_cast<RecordType>(PointeeTy)) {
    565     RecordDecl *RD = RTy->getDecl();
    566     llvm::DIDescriptor FDContext =
    567       getContextDescriptor(cast<Decl>(RD->getDeclContext()));
    568     llvm::DIType RetTy = createRecordFwdDecl(RD, FDContext);
    569     TypeCache[QualType(RTy, 0).getAsOpaquePtr()] = RetTy;
    570     return RetTy;
    571   }
    572   return getOrCreateType(PointeeTy, Unit);
    573 
    574 }
    575 
    576 llvm::DIType CGDebugInfo::CreatePointerLikeType(unsigned Tag,
    577                                                 const Type *Ty,
    578                                                 QualType PointeeTy,
    579                                                 llvm::DIFile Unit) {
    580   if (Tag == llvm::dwarf::DW_TAG_reference_type)
    581     return DBuilder.createReferenceType(CreatePointeeType(PointeeTy, Unit));
    582 
    583   // Bit size, align and offset of the type.
    584   // Size is always the size of a pointer. We can't use getTypeSize here
    585   // because that does not return the correct value for references.
    586   unsigned AS = CGM.getContext().getTargetAddressSpace(PointeeTy);
    587   uint64_t Size = CGM.getContext().getTargetInfo().getPointerWidth(AS);
    588   uint64_t Align = CGM.getContext().getTypeAlign(Ty);
    589 
    590   return DBuilder.createPointerType(CreatePointeeType(PointeeTy, Unit),
    591                                     Size, Align);
    592 }
    593 
    594 llvm::DIType CGDebugInfo::CreateType(const BlockPointerType *Ty,
    595                                      llvm::DIFile Unit) {
    596   if (BlockLiteralGenericSet)
    597     return BlockLiteralGeneric;
    598 
    599   SmallVector<llvm::Value *, 8> EltTys;
    600   llvm::DIType FieldTy;
    601   QualType FType;
    602   uint64_t FieldSize, FieldOffset;
    603   unsigned FieldAlign;
    604   llvm::DIArray Elements;
    605   llvm::DIType EltTy, DescTy;
    606 
    607   FieldOffset = 0;
    608   FType = CGM.getContext().UnsignedLongTy;
    609   EltTys.push_back(CreateMemberType(Unit, FType, "reserved", &FieldOffset));
    610   EltTys.push_back(CreateMemberType(Unit, FType, "Size", &FieldOffset));
    611 
    612   Elements = DBuilder.getOrCreateArray(EltTys);
    613   EltTys.clear();
    614 
    615   unsigned Flags = llvm::DIDescriptor::FlagAppleBlock;
    616   unsigned LineNo = getLineNumber(CurLoc);
    617 
    618   EltTy = DBuilder.createStructType(Unit, "__block_descriptor",
    619                                     Unit, LineNo, FieldOffset, 0,
    620                                     Flags, Elements);
    621 
    622   // Bit size, align and offset of the type.
    623   uint64_t Size = CGM.getContext().getTypeSize(Ty);
    624 
    625   DescTy = DBuilder.createPointerType(EltTy, Size);
    626 
    627   FieldOffset = 0;
    628   FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy);
    629   EltTys.push_back(CreateMemberType(Unit, FType, "__isa", &FieldOffset));
    630   FType = CGM.getContext().IntTy;
    631   EltTys.push_back(CreateMemberType(Unit, FType, "__flags", &FieldOffset));
    632   EltTys.push_back(CreateMemberType(Unit, FType, "__reserved", &FieldOffset));
    633   FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy);
    634   EltTys.push_back(CreateMemberType(Unit, FType, "__FuncPtr", &FieldOffset));
    635 
    636   FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy);
    637   FieldTy = DescTy;
    638   FieldSize = CGM.getContext().getTypeSize(Ty);
    639   FieldAlign = CGM.getContext().getTypeAlign(Ty);
    640   FieldTy = DBuilder.createMemberType(Unit, "__descriptor", Unit,
    641                                       LineNo, FieldSize, FieldAlign,
    642                                       FieldOffset, 0, FieldTy);
    643   EltTys.push_back(FieldTy);
    644 
    645   FieldOffset += FieldSize;
    646   Elements = DBuilder.getOrCreateArray(EltTys);
    647 
    648   EltTy = DBuilder.createStructType(Unit, "__block_literal_generic",
    649                                     Unit, LineNo, FieldOffset, 0,
    650                                     Flags, Elements);
    651 
    652   BlockLiteralGenericSet = true;
    653   BlockLiteralGeneric = DBuilder.createPointerType(EltTy, Size);
    654   return BlockLiteralGeneric;
    655 }
    656 
    657 llvm::DIType CGDebugInfo::CreateType(const TypedefType *Ty, llvm::DIFile Unit) {
    658   // Typedefs are derived from some other type.  If we have a typedef of a
    659   // typedef, make sure to emit the whole chain.
    660   llvm::DIType Src = getOrCreateType(Ty->getDecl()->getUnderlyingType(), Unit);
    661   if (!Src.Verify())
    662     return llvm::DIType();
    663   // We don't set size information, but do specify where the typedef was
    664   // declared.
    665   unsigned Line = getLineNumber(Ty->getDecl()->getLocation());
    666   const TypedefNameDecl *TyDecl = Ty->getDecl();
    667 
    668   llvm::DIDescriptor TypedefContext =
    669     getContextDescriptor(cast<Decl>(Ty->getDecl()->getDeclContext()));
    670 
    671   return
    672     DBuilder.createTypedef(Src, TyDecl->getName(), Unit, Line, TypedefContext);
    673 }
    674 
    675 llvm::DIType CGDebugInfo::CreateType(const FunctionType *Ty,
    676                                      llvm::DIFile Unit) {
    677   SmallVector<llvm::Value *, 16> EltTys;
    678 
    679   // Add the result type at least.
    680   EltTys.push_back(getOrCreateType(Ty->getResultType(), Unit));
    681 
    682   // Set up remainder of arguments if there is a prototype.
    683   // FIXME: IF NOT, HOW IS THIS REPRESENTED?  llvm-gcc doesn't represent '...'!
    684   if (isa<FunctionNoProtoType>(Ty))
    685     EltTys.push_back(DBuilder.createUnspecifiedParameter());
    686   else if (const FunctionProtoType *FTP = dyn_cast<FunctionProtoType>(Ty)) {
    687     for (unsigned i = 0, e = FTP->getNumArgs(); i != e; ++i)
    688       EltTys.push_back(getOrCreateType(FTP->getArgType(i), Unit));
    689   }
    690 
    691   llvm::DIArray EltTypeArray = DBuilder.getOrCreateArray(EltTys);
    692 
    693   llvm::DIType DbgTy = DBuilder.createSubroutineType(Unit, EltTypeArray);
    694   return DbgTy;
    695 }
    696 
    697 
    698 void CGDebugInfo::
    699 CollectRecordStaticVars(const RecordDecl *RD, llvm::DIType FwdDecl) {
    700 
    701   for (RecordDecl::decl_iterator I = RD->decls_begin(), E = RD->decls_end();
    702        I != E; ++I)
    703     if (const VarDecl *V = dyn_cast<VarDecl>(*I)) {
    704       if (V->getInit()) {
    705         const APValue *Value = V->evaluateValue();
    706         if (Value && Value->isInt()) {
    707           llvm::ConstantInt *CI
    708             = llvm::ConstantInt::get(CGM.getLLVMContext(), Value->getInt());
    709 
    710           // Create the descriptor for static variable.
    711           llvm::DIFile VUnit = getOrCreateFile(V->getLocation());
    712           StringRef VName = V->getName();
    713           llvm::DIType VTy = getOrCreateType(V->getType(), VUnit);
    714           // Do not use DIGlobalVariable for enums.
    715           if (VTy.getTag() != llvm::dwarf::DW_TAG_enumeration_type) {
    716             DBuilder.createStaticVariable(FwdDecl, VName, VName, VUnit,
    717                                           getLineNumber(V->getLocation()),
    718                                           VTy, true, CI);
    719           }
    720         }
    721       }
    722     }
    723 }
    724 
    725 llvm::DIType CGDebugInfo::createFieldType(StringRef name,
    726                                           QualType type,
    727                                           uint64_t sizeInBitsOverride,
    728                                           SourceLocation loc,
    729                                           AccessSpecifier AS,
    730                                           uint64_t offsetInBits,
    731                                           llvm::DIFile tunit,
    732                                           llvm::DIDescriptor scope) {
    733   llvm::DIType debugType = getOrCreateType(type, tunit);
    734 
    735   // Get the location for the field.
    736   llvm::DIFile file = getOrCreateFile(loc);
    737   unsigned line = getLineNumber(loc);
    738 
    739   uint64_t sizeInBits = 0;
    740   unsigned alignInBits = 0;
    741   if (!type->isIncompleteArrayType()) {
    742     llvm::tie(sizeInBits, alignInBits) = CGM.getContext().getTypeInfo(type);
    743 
    744     if (sizeInBitsOverride)
    745       sizeInBits = sizeInBitsOverride;
    746   }
    747 
    748   unsigned flags = 0;
    749   if (AS == clang::AS_private)
    750     flags |= llvm::DIDescriptor::FlagPrivate;
    751   else if (AS == clang::AS_protected)
    752     flags |= llvm::DIDescriptor::FlagProtected;
    753 
    754   return DBuilder.createMemberType(scope, name, file, line, sizeInBits,
    755                                    alignInBits, offsetInBits, flags, debugType);
    756 }
    757 
    758 /// CollectRecordFields - A helper function to collect debug info for
    759 /// record fields. This is used while creating debug info entry for a Record.
    760 void CGDebugInfo::
    761 CollectRecordFields(const RecordDecl *record, llvm::DIFile tunit,
    762                     SmallVectorImpl<llvm::Value *> &elements,
    763                     llvm::DIType RecordTy) {
    764   unsigned fieldNo = 0;
    765   const ASTRecordLayout &layout = CGM.getContext().getASTRecordLayout(record);
    766   const CXXRecordDecl *CXXDecl = dyn_cast<CXXRecordDecl>(record);
    767 
    768   // For C++11 Lambdas a Fields will be the same as a Capture, but the Capture
    769   // has the name and the location of the variable so we should iterate over
    770   // both concurrently.
    771   if (CXXDecl && CXXDecl->isLambda()) {
    772     RecordDecl::field_iterator Field = CXXDecl->field_begin();
    773     unsigned fieldno = 0;
    774     for (CXXRecordDecl::capture_const_iterator I = CXXDecl->captures_begin(),
    775            E = CXXDecl->captures_end(); I != E; ++I, ++Field, ++fieldno) {
    776       const LambdaExpr::Capture C = *I;
    777       // TODO: Need to handle 'this' in some way by probably renaming the
    778       // this of the lambda class and having a field member of 'this'.
    779       if (C.capturesVariable()) {
    780         VarDecl *V = C.getCapturedVar();
    781         llvm::DIFile VUnit = getOrCreateFile(C.getLocation());
    782         StringRef VName = V->getName();
    783         uint64_t SizeInBitsOverride = 0;
    784         if (Field->isBitField()) {
    785           SizeInBitsOverride = Field->getBitWidthValue(CGM.getContext());
    786           assert(SizeInBitsOverride && "found named 0-width bitfield");
    787         }
    788         llvm::DIType fieldType
    789           = createFieldType(VName, Field->getType(), SizeInBitsOverride, C.getLocation(),
    790                             Field->getAccess(), layout.getFieldOffset(fieldno),
    791                             VUnit, RecordTy);
    792         elements.push_back(fieldType);
    793       }
    794     }
    795   } else {
    796     bool IsMsStruct = record->hasAttr<MsStructAttr>();
    797     const FieldDecl *LastFD = 0;
    798     for (RecordDecl::field_iterator I = record->field_begin(),
    799            E = record->field_end();
    800          I != E; ++I, ++fieldNo) {
    801       FieldDecl *field = *I;
    802 
    803       if (IsMsStruct) {
    804         // Zero-length bitfields following non-bitfield members are ignored
    805         if (CGM.getContext().ZeroBitfieldFollowsNonBitfield((field), LastFD)) {
    806           --fieldNo;
    807           continue;
    808         }
    809         LastFD = field;
    810       }
    811 
    812       StringRef name = field->getName();
    813       QualType type = field->getType();
    814 
    815       // Ignore unnamed fields unless they're anonymous structs/unions.
    816       if (name.empty() && !type->isRecordType()) {
    817         LastFD = field;
    818         continue;
    819       }
    820 
    821       uint64_t SizeInBitsOverride = 0;
    822       if (field->isBitField()) {
    823         SizeInBitsOverride = field->getBitWidthValue(CGM.getContext());
    824         assert(SizeInBitsOverride && "found named 0-width bitfield");
    825       }
    826 
    827       llvm::DIType fieldType
    828         = createFieldType(name, type, SizeInBitsOverride,
    829                           field->getLocation(), field->getAccess(),
    830                           layout.getFieldOffset(fieldNo), tunit, RecordTy);
    831 
    832       elements.push_back(fieldType);
    833     }
    834   }
    835 }
    836 
    837 /// getOrCreateMethodType - CXXMethodDecl's type is a FunctionType. This
    838 /// function type is not updated to include implicit "this" pointer. Use this
    839 /// routine to get a method type which includes "this" pointer.
    840 llvm::DIType
    841 CGDebugInfo::getOrCreateMethodType(const CXXMethodDecl *Method,
    842                                    llvm::DIFile Unit) {
    843   llvm::DIType FnTy
    844     = getOrCreateType(QualType(Method->getType()->getAs<FunctionProtoType>(),
    845                                0),
    846                       Unit);
    847 
    848   // Add "this" pointer.
    849   llvm::DIArray Args = llvm::DICompositeType(FnTy).getTypeArray();
    850   assert (Args.getNumElements() && "Invalid number of arguments!");
    851 
    852   SmallVector<llvm::Value *, 16> Elts;
    853 
    854   // First element is always return type. For 'void' functions it is NULL.
    855   Elts.push_back(Args.getElement(0));
    856 
    857   if (!Method->isStatic()) {
    858     // "this" pointer is always first argument.
    859     QualType ThisPtr = Method->getThisType(CGM.getContext());
    860 
    861     const CXXRecordDecl *RD = Method->getParent();
    862     if (isa<ClassTemplateSpecializationDecl>(RD)) {
    863       // Create pointer type directly in this case.
    864       const PointerType *ThisPtrTy = cast<PointerType>(ThisPtr);
    865       QualType PointeeTy = ThisPtrTy->getPointeeType();
    866       unsigned AS = CGM.getContext().getTargetAddressSpace(PointeeTy);
    867       uint64_t Size = CGM.getContext().getTargetInfo().getPointerWidth(AS);
    868       uint64_t Align = CGM.getContext().getTypeAlign(ThisPtrTy);
    869       llvm::DIType PointeeType = getOrCreateType(PointeeTy, Unit);
    870       llvm::DIType ThisPtrType = DBuilder.createPointerType(PointeeType, Size, Align);
    871       TypeCache[ThisPtr.getAsOpaquePtr()] = ThisPtrType;
    872       // TODO: This and the artificial type below are misleading, the
    873       // types aren't artificial the argument is, but the current
    874       // metadata doesn't represent that.
    875       ThisPtrType = DBuilder.createArtificialType(ThisPtrType);
    876       Elts.push_back(ThisPtrType);
    877     } else {
    878       llvm::DIType ThisPtrType = getOrCreateType(ThisPtr, Unit);
    879       TypeCache[ThisPtr.getAsOpaquePtr()] = ThisPtrType;
    880       ThisPtrType = DBuilder.createArtificialType(ThisPtrType);
    881       Elts.push_back(ThisPtrType);
    882     }
    883   }
    884 
    885   // Copy rest of the arguments.
    886   for (unsigned i = 1, e = Args.getNumElements(); i != e; ++i)
    887     Elts.push_back(Args.getElement(i));
    888 
    889   llvm::DIArray EltTypeArray = DBuilder.getOrCreateArray(Elts);
    890 
    891   return DBuilder.createSubroutineType(Unit, EltTypeArray);
    892 }
    893 
    894 /// isFunctionLocalClass - Return true if CXXRecordDecl is defined
    895 /// inside a function.
    896 static bool isFunctionLocalClass(const CXXRecordDecl *RD) {
    897   if (const CXXRecordDecl *NRD = dyn_cast<CXXRecordDecl>(RD->getDeclContext()))
    898     return isFunctionLocalClass(NRD);
    899   if (isa<FunctionDecl>(RD->getDeclContext()))
    900     return true;
    901   return false;
    902 }
    903 
    904 /// CreateCXXMemberFunction - A helper function to create a DISubprogram for
    905 /// a single member function GlobalDecl.
    906 llvm::DISubprogram
    907 CGDebugInfo::CreateCXXMemberFunction(const CXXMethodDecl *Method,
    908                                      llvm::DIFile Unit,
    909                                      llvm::DIType RecordTy) {
    910   bool IsCtorOrDtor =
    911     isa<CXXConstructorDecl>(Method) || isa<CXXDestructorDecl>(Method);
    912 
    913   StringRef MethodName = getFunctionName(Method);
    914   llvm::DIType MethodTy = getOrCreateMethodType(Method, Unit);
    915 
    916   // Since a single ctor/dtor corresponds to multiple functions, it doesn't
    917   // make sense to give a single ctor/dtor a linkage name.
    918   StringRef MethodLinkageName;
    919   if (!IsCtorOrDtor && !isFunctionLocalClass(Method->getParent()))
    920     MethodLinkageName = CGM.getMangledName(Method);
    921 
    922   // Get the location for the method.
    923   llvm::DIFile MethodDefUnit = getOrCreateFile(Method->getLocation());
    924   unsigned MethodLine = getLineNumber(Method->getLocation());
    925 
    926   // Collect virtual method info.
    927   llvm::DIType ContainingType;
    928   unsigned Virtuality = 0;
    929   unsigned VIndex = 0;
    930 
    931   if (Method->isVirtual()) {
    932     if (Method->isPure())
    933       Virtuality = llvm::dwarf::DW_VIRTUALITY_pure_virtual;
    934     else
    935       Virtuality = llvm::dwarf::DW_VIRTUALITY_virtual;
    936 
    937     // It doesn't make sense to give a virtual destructor a vtable index,
    938     // since a single destructor has two entries in the vtable.
    939     if (!isa<CXXDestructorDecl>(Method))
    940       VIndex = CGM.getVTableContext().getMethodVTableIndex(Method);
    941     ContainingType = RecordTy;
    942   }
    943 
    944   unsigned Flags = 0;
    945   if (Method->isImplicit())
    946     Flags |= llvm::DIDescriptor::FlagArtificial;
    947   AccessSpecifier Access = Method->getAccess();
    948   if (Access == clang::AS_private)
    949     Flags |= llvm::DIDescriptor::FlagPrivate;
    950   else if (Access == clang::AS_protected)
    951     Flags |= llvm::DIDescriptor::FlagProtected;
    952   if (const CXXConstructorDecl *CXXC = dyn_cast<CXXConstructorDecl>(Method)) {
    953     if (CXXC->isExplicit())
    954       Flags |= llvm::DIDescriptor::FlagExplicit;
    955   } else if (const CXXConversionDecl *CXXC =
    956              dyn_cast<CXXConversionDecl>(Method)) {
    957     if (CXXC->isExplicit())
    958       Flags |= llvm::DIDescriptor::FlagExplicit;
    959   }
    960   if (Method->hasPrototype())
    961     Flags |= llvm::DIDescriptor::FlagPrototyped;
    962 
    963   llvm::DIArray TParamsArray = CollectFunctionTemplateParams(Method, Unit);
    964   llvm::DISubprogram SP =
    965     DBuilder.createMethod(RecordTy, MethodName, MethodLinkageName,
    966                           MethodDefUnit, MethodLine,
    967                           MethodTy, /*isLocalToUnit=*/false,
    968                           /* isDefinition=*/ false,
    969                           Virtuality, VIndex, ContainingType,
    970                           Flags, CGM.getLangOpts().Optimize, NULL,
    971                           TParamsArray);
    972 
    973   SPCache[Method->getCanonicalDecl()] = llvm::WeakVH(SP);
    974 
    975   return SP;
    976 }
    977 
    978 /// CollectCXXMemberFunctions - A helper function to collect debug info for
    979 /// C++ member functions. This is used while creating debug info entry for
    980 /// a Record.
    981 void CGDebugInfo::
    982 CollectCXXMemberFunctions(const CXXRecordDecl *RD, llvm::DIFile Unit,
    983                           SmallVectorImpl<llvm::Value *> &EltTys,
    984                           llvm::DIType RecordTy) {
    985 
    986   // Since we want more than just the individual member decls if we
    987   // have templated functions iterate over every declaration to gather
    988   // the functions.
    989   for(DeclContext::decl_iterator I = RD->decls_begin(),
    990         E = RD->decls_end(); I != E; ++I) {
    991     Decl *D = *I;
    992     if (D->isImplicit() && !D->isUsed())
    993       continue;
    994 
    995     if (const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D))
    996       EltTys.push_back(CreateCXXMemberFunction(Method, Unit, RecordTy));
    997     else if (FunctionTemplateDecl *FTD = dyn_cast<FunctionTemplateDecl>(D))
    998       for (FunctionTemplateDecl::spec_iterator SI = FTD->spec_begin(),
    999             SE = FTD->spec_end(); SI != SE; ++SI) {
   1000         FunctionDecl *FD = *SI;
   1001         if (CXXMethodDecl *M = dyn_cast<CXXMethodDecl>(FD))
   1002           EltTys.push_back(CreateCXXMemberFunction(M, Unit, RecordTy));
   1003       }
   1004   }
   1005 }
   1006 
   1007 /// CollectCXXFriends - A helper function to collect debug info for
   1008 /// C++ base classes. This is used while creating debug info entry for
   1009 /// a Record.
   1010 void CGDebugInfo::
   1011 CollectCXXFriends(const CXXRecordDecl *RD, llvm::DIFile Unit,
   1012                 SmallVectorImpl<llvm::Value *> &EltTys,
   1013                 llvm::DIType RecordTy) {
   1014   for (CXXRecordDecl::friend_iterator BI = RD->friend_begin(),
   1015          BE = RD->friend_end(); BI != BE; ++BI) {
   1016     if ((*BI)->isUnsupportedFriend())
   1017       continue;
   1018     if (TypeSourceInfo *TInfo = (*BI)->getFriendType())
   1019       EltTys.push_back(DBuilder.createFriend(RecordTy,
   1020                                              getOrCreateType(TInfo->getType(),
   1021                                                              Unit)));
   1022   }
   1023 }
   1024 
   1025 /// CollectCXXBases - A helper function to collect debug info for
   1026 /// C++ base classes. This is used while creating debug info entry for
   1027 /// a Record.
   1028 void CGDebugInfo::
   1029 CollectCXXBases(const CXXRecordDecl *RD, llvm::DIFile Unit,
   1030                 SmallVectorImpl<llvm::Value *> &EltTys,
   1031                 llvm::DIType RecordTy) {
   1032 
   1033   const ASTRecordLayout &RL = CGM.getContext().getASTRecordLayout(RD);
   1034   for (CXXRecordDecl::base_class_const_iterator BI = RD->bases_begin(),
   1035          BE = RD->bases_end(); BI != BE; ++BI) {
   1036     unsigned BFlags = 0;
   1037     uint64_t BaseOffset;
   1038 
   1039     const CXXRecordDecl *Base =
   1040       cast<CXXRecordDecl>(BI->getType()->getAs<RecordType>()->getDecl());
   1041 
   1042     if (BI->isVirtual()) {
   1043       // virtual base offset offset is -ve. The code generator emits dwarf
   1044       // expression where it expects +ve number.
   1045       BaseOffset =
   1046         0 - CGM.getVTableContext()
   1047                .getVirtualBaseOffsetOffset(RD, Base).getQuantity();
   1048       BFlags = llvm::DIDescriptor::FlagVirtual;
   1049     } else
   1050       BaseOffset = RL.getBaseClassOffsetInBits(Base);
   1051     // FIXME: Inconsistent units for BaseOffset. It is in bytes when
   1052     // BI->isVirtual() and bits when not.
   1053 
   1054     AccessSpecifier Access = BI->getAccessSpecifier();
   1055     if (Access == clang::AS_private)
   1056       BFlags |= llvm::DIDescriptor::FlagPrivate;
   1057     else if (Access == clang::AS_protected)
   1058       BFlags |= llvm::DIDescriptor::FlagProtected;
   1059 
   1060     llvm::DIType DTy =
   1061       DBuilder.createInheritance(RecordTy,
   1062                                  getOrCreateType(BI->getType(), Unit),
   1063                                  BaseOffset, BFlags);
   1064     EltTys.push_back(DTy);
   1065   }
   1066 }
   1067 
   1068 /// CollectTemplateParams - A helper function to collect template parameters.
   1069 llvm::DIArray CGDebugInfo::
   1070 CollectTemplateParams(const TemplateParameterList *TPList,
   1071                       const TemplateArgumentList &TAList,
   1072                       llvm::DIFile Unit) {
   1073   SmallVector<llvm::Value *, 16> TemplateParams;
   1074   for (unsigned i = 0, e = TAList.size(); i != e; ++i) {
   1075     const TemplateArgument &TA = TAList[i];
   1076     const NamedDecl *ND = TPList->getParam(i);
   1077     if (TA.getKind() == TemplateArgument::Type) {
   1078       llvm::DIType TTy = getOrCreateType(TA.getAsType(), Unit);
   1079       llvm::DITemplateTypeParameter TTP =
   1080         DBuilder.createTemplateTypeParameter(TheCU, ND->getName(), TTy);
   1081       TemplateParams.push_back(TTP);
   1082     } else if (TA.getKind() == TemplateArgument::Integral) {
   1083       llvm::DIType TTy = getOrCreateType(TA.getIntegralType(), Unit);
   1084       llvm::DITemplateValueParameter TVP =
   1085         DBuilder.createTemplateValueParameter(TheCU, ND->getName(), TTy,
   1086                                           TA.getAsIntegral()->getZExtValue());
   1087       TemplateParams.push_back(TVP);
   1088     }
   1089   }
   1090   return DBuilder.getOrCreateArray(TemplateParams);
   1091 }
   1092 
   1093 /// CollectFunctionTemplateParams - A helper function to collect debug
   1094 /// info for function template parameters.
   1095 llvm::DIArray CGDebugInfo::
   1096 CollectFunctionTemplateParams(const FunctionDecl *FD, llvm::DIFile Unit) {
   1097   if (FD->getTemplatedKind() ==
   1098       FunctionDecl::TK_FunctionTemplateSpecialization) {
   1099     const TemplateParameterList *TList =
   1100       FD->getTemplateSpecializationInfo()->getTemplate()
   1101       ->getTemplateParameters();
   1102     return
   1103       CollectTemplateParams(TList, *FD->getTemplateSpecializationArgs(), Unit);
   1104   }
   1105   return llvm::DIArray();
   1106 }
   1107 
   1108 /// CollectCXXTemplateParams - A helper function to collect debug info for
   1109 /// template parameters.
   1110 llvm::DIArray CGDebugInfo::
   1111 CollectCXXTemplateParams(const ClassTemplateSpecializationDecl *TSpecial,
   1112                          llvm::DIFile Unit) {
   1113   llvm::PointerUnion<ClassTemplateDecl *,
   1114                      ClassTemplatePartialSpecializationDecl *>
   1115     PU = TSpecial->getSpecializedTemplateOrPartial();
   1116 
   1117   TemplateParameterList *TPList = PU.is<ClassTemplateDecl *>() ?
   1118     PU.get<ClassTemplateDecl *>()->getTemplateParameters() :
   1119     PU.get<ClassTemplatePartialSpecializationDecl *>()->getTemplateParameters();
   1120   const TemplateArgumentList &TAList = TSpecial->getTemplateInstantiationArgs();
   1121   return CollectTemplateParams(TPList, TAList, Unit);
   1122 }
   1123 
   1124 /// getOrCreateVTablePtrType - Return debug info descriptor for vtable.
   1125 llvm::DIType CGDebugInfo::getOrCreateVTablePtrType(llvm::DIFile Unit) {
   1126   if (VTablePtrType.isValid())
   1127     return VTablePtrType;
   1128 
   1129   ASTContext &Context = CGM.getContext();
   1130 
   1131   /* Function type */
   1132   llvm::Value *STy = getOrCreateType(Context.IntTy, Unit);
   1133   llvm::DIArray SElements = DBuilder.getOrCreateArray(STy);
   1134   llvm::DIType SubTy = DBuilder.createSubroutineType(Unit, SElements);
   1135   unsigned Size = Context.getTypeSize(Context.VoidPtrTy);
   1136   llvm::DIType vtbl_ptr_type = DBuilder.createPointerType(SubTy, Size, 0,
   1137                                                           "__vtbl_ptr_type");
   1138   VTablePtrType = DBuilder.createPointerType(vtbl_ptr_type, Size);
   1139   return VTablePtrType;
   1140 }
   1141 
   1142 /// getVTableName - Get vtable name for the given Class.
   1143 StringRef CGDebugInfo::getVTableName(const CXXRecordDecl *RD) {
   1144   // Construct gdb compatible name name.
   1145   std::string Name = "_vptr$" + RD->getNameAsString();
   1146 
   1147   // Copy this name on the side and use its reference.
   1148   char *StrPtr = DebugInfoNames.Allocate<char>(Name.length());
   1149   memcpy(StrPtr, Name.data(), Name.length());
   1150   return StringRef(StrPtr, Name.length());
   1151 }
   1152 
   1153 
   1154 /// CollectVTableInfo - If the C++ class has vtable info then insert appropriate
   1155 /// debug info entry in EltTys vector.
   1156 void CGDebugInfo::
   1157 CollectVTableInfo(const CXXRecordDecl *RD, llvm::DIFile Unit,
   1158                   SmallVectorImpl<llvm::Value *> &EltTys) {
   1159   const ASTRecordLayout &RL = CGM.getContext().getASTRecordLayout(RD);
   1160 
   1161   // If there is a primary base then it will hold vtable info.
   1162   if (RL.getPrimaryBase())
   1163     return;
   1164 
   1165   // If this class is not dynamic then there is not any vtable info to collect.
   1166   if (!RD->isDynamicClass())
   1167     return;
   1168 
   1169   unsigned Size = CGM.getContext().getTypeSize(CGM.getContext().VoidPtrTy);
   1170   llvm::DIType VPTR
   1171     = DBuilder.createMemberType(Unit, getVTableName(RD), Unit,
   1172                                 0, Size, 0, 0, 0,
   1173                                 getOrCreateVTablePtrType(Unit));
   1174   EltTys.push_back(VPTR);
   1175 }
   1176 
   1177 /// getOrCreateRecordType - Emit record type's standalone debug info.
   1178 llvm::DIType CGDebugInfo::getOrCreateRecordType(QualType RTy,
   1179                                                 SourceLocation Loc) {
   1180   llvm::DIType T = getOrCreateType(RTy, getOrCreateFile(Loc));
   1181   return T;
   1182 }
   1183 
   1184 /// getOrCreateInterfaceType - Emit an objective c interface type standalone
   1185 /// debug info.
   1186 llvm::DIType CGDebugInfo::getOrCreateInterfaceType(QualType D,
   1187 						   SourceLocation Loc) {
   1188   llvm::DIType T = getOrCreateType(D, getOrCreateFile(Loc));
   1189   DBuilder.retainType(T);
   1190   return T;
   1191 }
   1192 
   1193 /// CreateType - get structure or union type.
   1194 llvm::DIType CGDebugInfo::CreateType(const RecordType *Ty) {
   1195   RecordDecl *RD = Ty->getDecl();
   1196 
   1197   // Get overall information about the record type for the debug info.
   1198   llvm::DIFile DefUnit = getOrCreateFile(RD->getLocation());
   1199 
   1200   // Records and classes and unions can all be recursive.  To handle them, we
   1201   // first generate a debug descriptor for the struct as a forward declaration.
   1202   // Then (if it is a definition) we go through and get debug info for all of
   1203   // its members.  Finally, we create a descriptor for the complete type (which
   1204   // may refer to the forward decl if the struct is recursive) and replace all
   1205   // uses of the forward declaration with the final definition.
   1206 
   1207   llvm::DIType FwdDecl = getOrCreateLimitedType(QualType(Ty, 0), DefUnit);
   1208 
   1209   if (FwdDecl.isForwardDecl())
   1210     return FwdDecl;
   1211 
   1212   llvm::TrackingVH<llvm::MDNode> FwdDeclNode(FwdDecl);
   1213 
   1214   // Push the struct on region stack.
   1215   LexicalBlockStack.push_back(FwdDeclNode);
   1216   RegionMap[Ty->getDecl()] = llvm::WeakVH(FwdDecl);
   1217 
   1218   // Add this to the completed types cache since we're completing it.
   1219   CompletedTypeCache[QualType(Ty, 0).getAsOpaquePtr()] = FwdDecl;
   1220 
   1221   // Convert all the elements.
   1222   SmallVector<llvm::Value *, 16> EltTys;
   1223 
   1224   // Note: The split of CXXDecl information here is intentional, the
   1225   // gdb tests will depend on a certain ordering at printout. The debug
   1226   // information offsets are still correct if we merge them all together
   1227   // though.
   1228   const CXXRecordDecl *CXXDecl = dyn_cast<CXXRecordDecl>(RD);
   1229   if (CXXDecl) {
   1230     CollectCXXBases(CXXDecl, DefUnit, EltTys, FwdDecl);
   1231     CollectVTableInfo(CXXDecl, DefUnit, EltTys);
   1232   }
   1233 
   1234   // Collect static variables with initializers and other fields.
   1235   CollectRecordStaticVars(RD, FwdDecl);
   1236   CollectRecordFields(RD, DefUnit, EltTys, FwdDecl);
   1237   llvm::DIArray TParamsArray;
   1238   if (CXXDecl) {
   1239     CollectCXXMemberFunctions(CXXDecl, DefUnit, EltTys, FwdDecl);
   1240     CollectCXXFriends(CXXDecl, DefUnit, EltTys, FwdDecl);
   1241     if (const ClassTemplateSpecializationDecl *TSpecial
   1242         = dyn_cast<ClassTemplateSpecializationDecl>(RD))
   1243       TParamsArray = CollectCXXTemplateParams(TSpecial, DefUnit);
   1244   }
   1245 
   1246   LexicalBlockStack.pop_back();
   1247   RegionMap.erase(Ty->getDecl());
   1248 
   1249   llvm::DIArray Elements = DBuilder.getOrCreateArray(EltTys);
   1250   // FIXME: Magic numbers ahoy! These should be changed when we
   1251   // get some enums in llvm/Analysis/DebugInfo.h to refer to
   1252   // them.
   1253   if (RD->isUnion())
   1254     FwdDeclNode->replaceOperandWith(10, Elements);
   1255   else if (CXXDecl) {
   1256     FwdDeclNode->replaceOperandWith(10, Elements);
   1257     FwdDeclNode->replaceOperandWith(13, TParamsArray);
   1258   } else
   1259     FwdDeclNode->replaceOperandWith(10, Elements);
   1260 
   1261   RegionMap[Ty->getDecl()] = llvm::WeakVH(FwdDeclNode);
   1262   return llvm::DIType(FwdDeclNode);
   1263 }
   1264 
   1265 /// CreateType - get objective-c object type.
   1266 llvm::DIType CGDebugInfo::CreateType(const ObjCObjectType *Ty,
   1267                                      llvm::DIFile Unit) {
   1268   // Ignore protocols.
   1269   return getOrCreateType(Ty->getBaseType(), Unit);
   1270 }
   1271 
   1272 /// CreateType - get objective-c interface type.
   1273 llvm::DIType CGDebugInfo::CreateType(const ObjCInterfaceType *Ty,
   1274                                      llvm::DIFile Unit) {
   1275   ObjCInterfaceDecl *ID = Ty->getDecl();
   1276   if (!ID)
   1277     return llvm::DIType();
   1278 
   1279   // Get overall information about the record type for the debug info.
   1280   llvm::DIFile DefUnit = getOrCreateFile(ID->getLocation());
   1281   unsigned Line = getLineNumber(ID->getLocation());
   1282   unsigned RuntimeLang = TheCU.getLanguage();
   1283 
   1284   // If this is just a forward declaration return a special forward-declaration
   1285   // debug type since we won't be able to lay out the entire type.
   1286   ObjCInterfaceDecl *Def = ID->getDefinition();
   1287   if (!Def) {
   1288     llvm::DIType FwdDecl =
   1289       DBuilder.createForwardDecl(llvm::dwarf::DW_TAG_structure_type,
   1290 				 ID->getName(), DefUnit, Line,
   1291 				 RuntimeLang);
   1292     return FwdDecl;
   1293   }
   1294 
   1295   ID = Def;
   1296 
   1297   // Bit size, align and offset of the type.
   1298   uint64_t Size = CGM.getContext().getTypeSize(Ty);
   1299   uint64_t Align = CGM.getContext().getTypeAlign(Ty);
   1300 
   1301   unsigned Flags = 0;
   1302   if (ID->getImplementation())
   1303     Flags |= llvm::DIDescriptor::FlagObjcClassComplete;
   1304 
   1305   llvm::DIType RealDecl =
   1306     DBuilder.createStructType(Unit, ID->getName(), DefUnit,
   1307                               Line, Size, Align, Flags,
   1308                               llvm::DIArray(), RuntimeLang);
   1309 
   1310   // Otherwise, insert it into the CompletedTypeCache so that recursive uses
   1311   // will find it and we're emitting the complete type.
   1312   CompletedTypeCache[QualType(Ty, 0).getAsOpaquePtr()] = RealDecl;
   1313   // Push the struct on region stack.
   1314   llvm::TrackingVH<llvm::MDNode> FwdDeclNode(RealDecl);
   1315 
   1316   LexicalBlockStack.push_back(FwdDeclNode);
   1317   RegionMap[Ty->getDecl()] = llvm::WeakVH(RealDecl);
   1318 
   1319   // Convert all the elements.
   1320   SmallVector<llvm::Value *, 16> EltTys;
   1321 
   1322   ObjCInterfaceDecl *SClass = ID->getSuperClass();
   1323   if (SClass) {
   1324     llvm::DIType SClassTy =
   1325       getOrCreateType(CGM.getContext().getObjCInterfaceType(SClass), Unit);
   1326     if (!SClassTy.isValid())
   1327       return llvm::DIType();
   1328 
   1329     llvm::DIType InhTag =
   1330       DBuilder.createInheritance(RealDecl, SClassTy, 0, 0);
   1331     EltTys.push_back(InhTag);
   1332   }
   1333 
   1334   for (ObjCContainerDecl::prop_iterator I = ID->prop_begin(),
   1335          E = ID->prop_end(); I != E; ++I) {
   1336     const ObjCPropertyDecl *PD = *I;
   1337     SourceLocation Loc = PD->getLocation();
   1338     llvm::DIFile PUnit = getOrCreateFile(Loc);
   1339     unsigned PLine = getLineNumber(Loc);
   1340     ObjCMethodDecl *Getter = PD->getGetterMethodDecl();
   1341     ObjCMethodDecl *Setter = PD->getSetterMethodDecl();
   1342     llvm::MDNode *PropertyNode =
   1343       DBuilder.createObjCProperty(PD->getName(),
   1344 				  PUnit, PLine,
   1345                                   (Getter && Getter->isImplicit()) ? "" :
   1346                                   getSelectorName(PD->getGetterName()),
   1347                                   (Setter && Setter->isImplicit()) ? "" :
   1348                                   getSelectorName(PD->getSetterName()),
   1349                                   PD->getPropertyAttributes(),
   1350 				  getOrCreateType(PD->getType(), PUnit));
   1351     EltTys.push_back(PropertyNode);
   1352   }
   1353 
   1354   const ASTRecordLayout &RL = CGM.getContext().getASTObjCInterfaceLayout(ID);
   1355   unsigned FieldNo = 0;
   1356   for (ObjCIvarDecl *Field = ID->all_declared_ivar_begin(); Field;
   1357        Field = Field->getNextIvar(), ++FieldNo) {
   1358     llvm::DIType FieldTy = getOrCreateType(Field->getType(), Unit);
   1359     if (!FieldTy.isValid())
   1360       return llvm::DIType();
   1361 
   1362     StringRef FieldName = Field->getName();
   1363 
   1364     // Ignore unnamed fields.
   1365     if (FieldName.empty())
   1366       continue;
   1367 
   1368     // Get the location for the field.
   1369     llvm::DIFile FieldDefUnit = getOrCreateFile(Field->getLocation());
   1370     unsigned FieldLine = getLineNumber(Field->getLocation());
   1371     QualType FType = Field->getType();
   1372     uint64_t FieldSize = 0;
   1373     unsigned FieldAlign = 0;
   1374 
   1375     if (!FType->isIncompleteArrayType()) {
   1376 
   1377       // Bit size, align and offset of the type.
   1378       FieldSize = Field->isBitField()
   1379         ? Field->getBitWidthValue(CGM.getContext())
   1380         : CGM.getContext().getTypeSize(FType);
   1381       FieldAlign = CGM.getContext().getTypeAlign(FType);
   1382     }
   1383 
   1384     // We can't know the offset of our ivar in the structure if we're using
   1385     // the non-fragile abi and the debugger should ignore the value anyways.
   1386     // Call it the FieldNo+1 due to how debuggers use the information,
   1387     // e.g. negating the value when it needs a lookup in the dynamic table.
   1388     uint64_t FieldOffset = CGM.getLangOpts().ObjCNonFragileABI ? FieldNo+1
   1389       : RL.getFieldOffset(FieldNo);
   1390 
   1391     unsigned Flags = 0;
   1392     if (Field->getAccessControl() == ObjCIvarDecl::Protected)
   1393       Flags = llvm::DIDescriptor::FlagProtected;
   1394     else if (Field->getAccessControl() == ObjCIvarDecl::Private)
   1395       Flags = llvm::DIDescriptor::FlagPrivate;
   1396 
   1397     llvm::MDNode *PropertyNode = NULL;
   1398     if (ObjCImplementationDecl *ImpD = ID->getImplementation()) {
   1399       if (ObjCPropertyImplDecl *PImpD =
   1400           ImpD->FindPropertyImplIvarDecl(Field->getIdentifier())) {
   1401         if (ObjCPropertyDecl *PD = PImpD->getPropertyDecl()) {
   1402 	  SourceLocation Loc = PD->getLocation();
   1403 	  llvm::DIFile PUnit = getOrCreateFile(Loc);
   1404 	  unsigned PLine = getLineNumber(Loc);
   1405           ObjCMethodDecl *Getter = PD->getGetterMethodDecl();
   1406           ObjCMethodDecl *Setter = PD->getSetterMethodDecl();
   1407           PropertyNode =
   1408             DBuilder.createObjCProperty(PD->getName(),
   1409                                         PUnit, PLine,
   1410                                         (Getter && Getter->isImplicit()) ? "" :
   1411                                         getSelectorName(PD->getGetterName()),
   1412                                         (Setter && Setter->isImplicit()) ? "" :
   1413                                         getSelectorName(PD->getSetterName()),
   1414                                         PD->getPropertyAttributes(),
   1415                                         getOrCreateType(PD->getType(), PUnit));
   1416         }
   1417       }
   1418     }
   1419     FieldTy = DBuilder.createObjCIVar(FieldName, FieldDefUnit,
   1420                                       FieldLine, FieldSize, FieldAlign,
   1421                                       FieldOffset, Flags, FieldTy,
   1422                                       PropertyNode);
   1423     EltTys.push_back(FieldTy);
   1424   }
   1425 
   1426   llvm::DIArray Elements = DBuilder.getOrCreateArray(EltTys);
   1427   FwdDeclNode->replaceOperandWith(10, Elements);
   1428 
   1429   LexicalBlockStack.pop_back();
   1430   return llvm::DIType(FwdDeclNode);
   1431 }
   1432 
   1433 llvm::DIType CGDebugInfo::CreateType(const VectorType *Ty, llvm::DIFile Unit) {
   1434   llvm::DIType ElementTy = getOrCreateType(Ty->getElementType(), Unit);
   1435   int64_t NumElems = Ty->getNumElements();
   1436   int64_t LowerBound = 0;
   1437   if (NumElems == 0)
   1438     // If number of elements are not known then this is an unbounded array.
   1439     // Use Low = 1, Hi = 0 to express such arrays.
   1440     LowerBound = 1;
   1441   else
   1442     --NumElems;
   1443 
   1444   llvm::Value *Subscript = DBuilder.getOrCreateSubrange(LowerBound, NumElems);
   1445   llvm::DIArray SubscriptArray = DBuilder.getOrCreateArray(Subscript);
   1446 
   1447   uint64_t Size = CGM.getContext().getTypeSize(Ty);
   1448   uint64_t Align = CGM.getContext().getTypeAlign(Ty);
   1449 
   1450   return
   1451     DBuilder.createVectorType(Size, Align, ElementTy, SubscriptArray);
   1452 }
   1453 
   1454 llvm::DIType CGDebugInfo::CreateType(const ArrayType *Ty,
   1455                                      llvm::DIFile Unit) {
   1456   uint64_t Size;
   1457   uint64_t Align;
   1458 
   1459 
   1460   // FIXME: make getTypeAlign() aware of VLAs and incomplete array types
   1461   if (const VariableArrayType *VAT = dyn_cast<VariableArrayType>(Ty)) {
   1462     Size = 0;
   1463     Align =
   1464       CGM.getContext().getTypeAlign(CGM.getContext().getBaseElementType(VAT));
   1465   } else if (Ty->isIncompleteArrayType()) {
   1466     Size = 0;
   1467     Align = CGM.getContext().getTypeAlign(Ty->getElementType());
   1468   } else if (Ty->isDependentSizedArrayType() || Ty->isIncompleteType()) {
   1469     Size = 0;
   1470     Align = 0;
   1471   } else {
   1472     // Size and align of the whole array, not the element type.
   1473     Size = CGM.getContext().getTypeSize(Ty);
   1474     Align = CGM.getContext().getTypeAlign(Ty);
   1475   }
   1476 
   1477   // Add the dimensions of the array.  FIXME: This loses CV qualifiers from
   1478   // interior arrays, do we care?  Why aren't nested arrays represented the
   1479   // obvious/recursive way?
   1480   SmallVector<llvm::Value *, 8> Subscripts;
   1481   QualType EltTy(Ty, 0);
   1482   if (Ty->isIncompleteArrayType())
   1483     EltTy = Ty->getElementType();
   1484   else {
   1485     while ((Ty = dyn_cast<ArrayType>(EltTy))) {
   1486       int64_t UpperBound = 0;
   1487       int64_t LowerBound = 0;
   1488       if (const ConstantArrayType *CAT = dyn_cast<ConstantArrayType>(Ty)) {
   1489         if (CAT->getSize().getZExtValue())
   1490           UpperBound = CAT->getSize().getZExtValue() - 1;
   1491       } else
   1492         // This is an unbounded array. Use Low = 1, Hi = 0 to express such
   1493         // arrays.
   1494         LowerBound = 1;
   1495 
   1496       // FIXME: Verify this is right for VLAs.
   1497       Subscripts.push_back(DBuilder.getOrCreateSubrange(LowerBound,
   1498                                                         UpperBound));
   1499       EltTy = Ty->getElementType();
   1500     }
   1501   }
   1502 
   1503   llvm::DIArray SubscriptArray = DBuilder.getOrCreateArray(Subscripts);
   1504 
   1505   llvm::DIType DbgTy =
   1506     DBuilder.createArrayType(Size, Align, getOrCreateType(EltTy, Unit),
   1507                              SubscriptArray);
   1508   return DbgTy;
   1509 }
   1510 
   1511 llvm::DIType CGDebugInfo::CreateType(const LValueReferenceType *Ty,
   1512                                      llvm::DIFile Unit) {
   1513   return CreatePointerLikeType(llvm::dwarf::DW_TAG_reference_type,
   1514                                Ty, Ty->getPointeeType(), Unit);
   1515 }
   1516 
   1517 llvm::DIType CGDebugInfo::CreateType(const RValueReferenceType *Ty,
   1518                                      llvm::DIFile Unit) {
   1519   return CreatePointerLikeType(llvm::dwarf::DW_TAG_rvalue_reference_type,
   1520                                Ty, Ty->getPointeeType(), Unit);
   1521 }
   1522 
   1523 llvm::DIType CGDebugInfo::CreateType(const MemberPointerType *Ty,
   1524                                      llvm::DIFile U) {
   1525   QualType PointerDiffTy = CGM.getContext().getPointerDiffType();
   1526   llvm::DIType PointerDiffDITy = getOrCreateType(PointerDiffTy, U);
   1527 
   1528   if (!Ty->getPointeeType()->isFunctionType()) {
   1529     // We have a data member pointer type.
   1530     return PointerDiffDITy;
   1531   }
   1532 
   1533   // We have a member function pointer type. Treat it as a struct with two
   1534   // ptrdiff_t members.
   1535   std::pair<uint64_t, unsigned> Info = CGM.getContext().getTypeInfo(Ty);
   1536 
   1537   uint64_t FieldOffset = 0;
   1538   llvm::Value *ElementTypes[2];
   1539 
   1540   // FIXME: This should probably be a function type instead.
   1541   ElementTypes[0] =
   1542     DBuilder.createMemberType(U, "ptr", U, 0,
   1543                               Info.first, Info.second, FieldOffset, 0,
   1544                               PointerDiffDITy);
   1545   FieldOffset += Info.first;
   1546 
   1547   ElementTypes[1] =
   1548     DBuilder.createMemberType(U, "ptr", U, 0,
   1549                               Info.first, Info.second, FieldOffset, 0,
   1550                               PointerDiffDITy);
   1551 
   1552   llvm::DIArray Elements = DBuilder.getOrCreateArray(ElementTypes);
   1553 
   1554   return DBuilder.createStructType(U, StringRef("test"),
   1555                                    U, 0, FieldOffset,
   1556                                    0, 0, Elements);
   1557 }
   1558 
   1559 llvm::DIType CGDebugInfo::CreateType(const AtomicType *Ty,
   1560                                      llvm::DIFile U) {
   1561   // Ignore the atomic wrapping
   1562   // FIXME: What is the correct representation?
   1563   return getOrCreateType(Ty->getValueType(), U);
   1564 }
   1565 
   1566 /// CreateEnumType - get enumeration type.
   1567 llvm::DIType CGDebugInfo::CreateEnumType(const EnumDecl *ED) {
   1568   llvm::DIFile Unit = getOrCreateFile(ED->getLocation());
   1569   SmallVector<llvm::Value *, 16> Enumerators;
   1570 
   1571   // Create DIEnumerator elements for each enumerator.
   1572   for (EnumDecl::enumerator_iterator
   1573          Enum = ED->enumerator_begin(), EnumEnd = ED->enumerator_end();
   1574        Enum != EnumEnd; ++Enum) {
   1575     Enumerators.push_back(
   1576       DBuilder.createEnumerator(Enum->getName(),
   1577                                 Enum->getInitVal().getZExtValue()));
   1578   }
   1579 
   1580   // Return a CompositeType for the enum itself.
   1581   llvm::DIArray EltArray = DBuilder.getOrCreateArray(Enumerators);
   1582 
   1583   llvm::DIFile DefUnit = getOrCreateFile(ED->getLocation());
   1584   unsigned Line = getLineNumber(ED->getLocation());
   1585   uint64_t Size = 0;
   1586   uint64_t Align = 0;
   1587   if (!ED->getTypeForDecl()->isIncompleteType()) {
   1588     Size = CGM.getContext().getTypeSize(ED->getTypeForDecl());
   1589     Align = CGM.getContext().getTypeAlign(ED->getTypeForDecl());
   1590   }
   1591   llvm::DIDescriptor EnumContext =
   1592     getContextDescriptor(cast<Decl>(ED->getDeclContext()));
   1593   llvm::DIType DbgTy =
   1594     DBuilder.createEnumerationType(EnumContext, ED->getName(), DefUnit, Line,
   1595                                    Size, Align, EltArray);
   1596   return DbgTy;
   1597 }
   1598 
   1599 static QualType UnwrapTypeForDebugInfo(QualType T) {
   1600   do {
   1601     QualType LastT = T;
   1602     switch (T->getTypeClass()) {
   1603     default:
   1604       return T;
   1605     case Type::TemplateSpecialization:
   1606       T = cast<TemplateSpecializationType>(T)->desugar();
   1607       break;
   1608     case Type::TypeOfExpr:
   1609       T = cast<TypeOfExprType>(T)->getUnderlyingExpr()->getType();
   1610       break;
   1611     case Type::TypeOf:
   1612       T = cast<TypeOfType>(T)->getUnderlyingType();
   1613       break;
   1614     case Type::Decltype:
   1615       T = cast<DecltypeType>(T)->getUnderlyingType();
   1616       break;
   1617     case Type::UnaryTransform:
   1618       T = cast<UnaryTransformType>(T)->getUnderlyingType();
   1619       break;
   1620     case Type::Attributed:
   1621       T = cast<AttributedType>(T)->getEquivalentType();
   1622       break;
   1623     case Type::Elaborated:
   1624       T = cast<ElaboratedType>(T)->getNamedType();
   1625       break;
   1626     case Type::Paren:
   1627       T = cast<ParenType>(T)->getInnerType();
   1628       break;
   1629     case Type::SubstTemplateTypeParm:
   1630       T = cast<SubstTemplateTypeParmType>(T)->getReplacementType();
   1631       break;
   1632     case Type::Auto:
   1633       T = cast<AutoType>(T)->getDeducedType();
   1634       break;
   1635     }
   1636 
   1637     assert(T != LastT && "Type unwrapping failed to unwrap!");
   1638     if (T == LastT)
   1639       return T;
   1640   } while (true);
   1641 }
   1642 
   1643 /// getType - Get the type from the cache or return null type if it doesn't exist.
   1644 llvm::DIType CGDebugInfo::getTypeOrNull(QualType Ty) {
   1645 
   1646   // Unwrap the type as needed for debug information.
   1647   Ty = UnwrapTypeForDebugInfo(Ty);
   1648 
   1649   // Check for existing entry.
   1650   llvm::DenseMap<void *, llvm::WeakVH>::iterator it =
   1651     TypeCache.find(Ty.getAsOpaquePtr());
   1652   if (it != TypeCache.end()) {
   1653     // Verify that the debug info still exists.
   1654     if (&*it->second)
   1655       return llvm::DIType(cast<llvm::MDNode>(it->second));
   1656   }
   1657 
   1658   return llvm::DIType();
   1659 }
   1660 
   1661 /// getCompletedTypeOrNull - Get the type from the cache or return null if it
   1662 /// doesn't exist.
   1663 llvm::DIType CGDebugInfo::getCompletedTypeOrNull(QualType Ty) {
   1664 
   1665   // Unwrap the type as needed for debug information.
   1666   Ty = UnwrapTypeForDebugInfo(Ty);
   1667 
   1668   // Check for existing entry.
   1669   llvm::DenseMap<void *, llvm::WeakVH>::iterator it =
   1670     CompletedTypeCache.find(Ty.getAsOpaquePtr());
   1671   if (it != CompletedTypeCache.end()) {
   1672     // Verify that the debug info still exists.
   1673     if (&*it->second)
   1674       return llvm::DIType(cast<llvm::MDNode>(it->second));
   1675   }
   1676 
   1677   return llvm::DIType();
   1678 }
   1679 
   1680 
   1681 /// getOrCreateType - Get the type from the cache or create a new
   1682 /// one if necessary.
   1683 llvm::DIType CGDebugInfo::getOrCreateType(QualType Ty, llvm::DIFile Unit) {
   1684   if (Ty.isNull())
   1685     return llvm::DIType();
   1686 
   1687   // Unwrap the type as needed for debug information.
   1688   Ty = UnwrapTypeForDebugInfo(Ty);
   1689 
   1690   llvm::DIType T = getCompletedTypeOrNull(Ty);
   1691 
   1692   if (T.Verify()) return T;
   1693 
   1694   // Otherwise create the type.
   1695   llvm::DIType Res = CreateTypeNode(Ty, Unit);
   1696 
   1697   llvm::DIType TC = getTypeOrNull(Ty);
   1698   if (TC.Verify() && TC.isForwardDecl())
   1699     ReplaceMap.push_back(std::make_pair(Ty.getAsOpaquePtr(), TC));
   1700 
   1701   // And update the type cache.
   1702   TypeCache[Ty.getAsOpaquePtr()] = Res;
   1703 
   1704   if (!Res.isForwardDecl())
   1705     CompletedTypeCache[Ty.getAsOpaquePtr()] = Res;
   1706   return Res;
   1707 }
   1708 
   1709 /// CreateTypeNode - Create a new debug type node.
   1710 llvm::DIType CGDebugInfo::CreateTypeNode(QualType Ty, llvm::DIFile Unit) {
   1711   // Handle qualifiers, which recursively handles what they refer to.
   1712   if (Ty.hasLocalQualifiers())
   1713     return CreateQualifiedType(Ty, Unit);
   1714 
   1715   const char *Diag = 0;
   1716 
   1717   // Work out details of type.
   1718   switch (Ty->getTypeClass()) {
   1719 #define TYPE(Class, Base)
   1720 #define ABSTRACT_TYPE(Class, Base)
   1721 #define NON_CANONICAL_TYPE(Class, Base)
   1722 #define DEPENDENT_TYPE(Class, Base) case Type::Class:
   1723 #include "clang/AST/TypeNodes.def"
   1724     llvm_unreachable("Dependent types cannot show up in debug information");
   1725 
   1726   case Type::ExtVector:
   1727   case Type::Vector:
   1728     return CreateType(cast<VectorType>(Ty), Unit);
   1729   case Type::ObjCObjectPointer:
   1730     return CreateType(cast<ObjCObjectPointerType>(Ty), Unit);
   1731   case Type::ObjCObject:
   1732     return CreateType(cast<ObjCObjectType>(Ty), Unit);
   1733   case Type::ObjCInterface:
   1734     return CreateType(cast<ObjCInterfaceType>(Ty), Unit);
   1735   case Type::Builtin:
   1736     return CreateType(cast<BuiltinType>(Ty));
   1737   case Type::Complex:
   1738     return CreateType(cast<ComplexType>(Ty));
   1739   case Type::Pointer:
   1740     return CreateType(cast<PointerType>(Ty), Unit);
   1741   case Type::BlockPointer:
   1742     return CreateType(cast<BlockPointerType>(Ty), Unit);
   1743   case Type::Typedef:
   1744     return CreateType(cast<TypedefType>(Ty), Unit);
   1745   case Type::Record:
   1746     return CreateType(cast<RecordType>(Ty));
   1747   case Type::Enum:
   1748     return CreateEnumType(cast<EnumType>(Ty)->getDecl());
   1749   case Type::FunctionProto:
   1750   case Type::FunctionNoProto:
   1751     return CreateType(cast<FunctionType>(Ty), Unit);
   1752   case Type::ConstantArray:
   1753   case Type::VariableArray:
   1754   case Type::IncompleteArray:
   1755     return CreateType(cast<ArrayType>(Ty), Unit);
   1756 
   1757   case Type::LValueReference:
   1758     return CreateType(cast<LValueReferenceType>(Ty), Unit);
   1759   case Type::RValueReference:
   1760     return CreateType(cast<RValueReferenceType>(Ty), Unit);
   1761 
   1762   case Type::MemberPointer:
   1763     return CreateType(cast<MemberPointerType>(Ty), Unit);
   1764 
   1765   case Type::Atomic:
   1766     return CreateType(cast<AtomicType>(Ty), Unit);
   1767 
   1768   case Type::Attributed:
   1769   case Type::TemplateSpecialization:
   1770   case Type::Elaborated:
   1771   case Type::Paren:
   1772   case Type::SubstTemplateTypeParm:
   1773   case Type::TypeOfExpr:
   1774   case Type::TypeOf:
   1775   case Type::Decltype:
   1776   case Type::UnaryTransform:
   1777   case Type::Auto:
   1778     llvm_unreachable("type should have been unwrapped!");
   1779   }
   1780 
   1781   assert(Diag && "Fall through without a diagnostic?");
   1782   unsigned DiagID = CGM.getDiags().getCustomDiagID(DiagnosticsEngine::Error,
   1783                                "debug information for %0 is not yet supported");
   1784   CGM.getDiags().Report(DiagID)
   1785     << Diag;
   1786   return llvm::DIType();
   1787 }
   1788 
   1789 /// getOrCreateLimitedType - Get the type from the cache or create a new
   1790 /// limited type if necessary.
   1791 llvm::DIType CGDebugInfo::getOrCreateLimitedType(QualType Ty,
   1792 						 llvm::DIFile Unit) {
   1793   if (Ty.isNull())
   1794     return llvm::DIType();
   1795 
   1796   // Unwrap the type as needed for debug information.
   1797   Ty = UnwrapTypeForDebugInfo(Ty);
   1798 
   1799   llvm::DIType T = getTypeOrNull(Ty);
   1800 
   1801   // We may have cached a forward decl when we could have created
   1802   // a non-forward decl. Go ahead and create a non-forward decl
   1803   // now.
   1804   if (T.Verify() && !T.isForwardDecl()) return T;
   1805 
   1806   // Otherwise create the type.
   1807   llvm::DIType Res = CreateLimitedTypeNode(Ty, Unit);
   1808 
   1809   if (T.Verify() && T.isForwardDecl())
   1810     ReplaceMap.push_back(std::make_pair(Ty.getAsOpaquePtr(), T));
   1811 
   1812   // And update the type cache.
   1813   TypeCache[Ty.getAsOpaquePtr()] = Res;
   1814   return Res;
   1815 }
   1816 
   1817 // TODO: Currently used for context chains when limiting debug info.
   1818 llvm::DIType CGDebugInfo::CreateLimitedType(const RecordType *Ty) {
   1819   RecordDecl *RD = Ty->getDecl();
   1820 
   1821   // Get overall information about the record type for the debug info.
   1822   llvm::DIFile DefUnit = getOrCreateFile(RD->getLocation());
   1823   unsigned Line = getLineNumber(RD->getLocation());
   1824   StringRef RDName = RD->getName();
   1825 
   1826   llvm::DIDescriptor RDContext;
   1827   if (CGM.getCodeGenOpts().LimitDebugInfo)
   1828     RDContext = createContextChain(cast<Decl>(RD->getDeclContext()));
   1829   else
   1830     RDContext = getContextDescriptor(cast<Decl>(RD->getDeclContext()));
   1831 
   1832   // If this is just a forward declaration, construct an appropriately
   1833   // marked node and just return it.
   1834   if (!RD->getDefinition())
   1835     return createRecordFwdDecl(RD, RDContext);
   1836 
   1837   uint64_t Size = CGM.getContext().getTypeSize(Ty);
   1838   uint64_t Align = CGM.getContext().getTypeAlign(Ty);
   1839   const CXXRecordDecl *CXXDecl = dyn_cast<CXXRecordDecl>(RD);
   1840   llvm::TrackingVH<llvm::MDNode> RealDecl;
   1841 
   1842   if (RD->isUnion())
   1843     RealDecl = DBuilder.createUnionType(RDContext, RDName, DefUnit, Line,
   1844 					Size, Align, 0, llvm::DIArray());
   1845   else if (CXXDecl) {
   1846     RDName = getClassName(RD);
   1847 
   1848     // FIXME: This could be a struct type giving a default visibility different
   1849     // than C++ class type, but needs llvm metadata changes first.
   1850     RealDecl = DBuilder.createClassType(RDContext, RDName, DefUnit, Line,
   1851 					Size, Align, 0, 0, llvm::DIType(),
   1852 					llvm::DIArray(), llvm::DIType(),
   1853 					llvm::DIArray());
   1854   } else
   1855     RealDecl = DBuilder.createStructType(RDContext, RDName, DefUnit, Line,
   1856 					 Size, Align, 0, llvm::DIArray());
   1857 
   1858   RegionMap[Ty->getDecl()] = llvm::WeakVH(RealDecl);
   1859   TypeCache[QualType(Ty, 0).getAsOpaquePtr()] = llvm::DIType(RealDecl);
   1860 
   1861   if (CXXDecl) {
   1862     // A class's primary base or the class itself contains the vtable.
   1863     llvm::MDNode *ContainingType = NULL;
   1864     const ASTRecordLayout &RL = CGM.getContext().getASTRecordLayout(RD);
   1865     if (const CXXRecordDecl *PBase = RL.getPrimaryBase()) {
   1866       // Seek non virtual primary base root.
   1867       while (1) {
   1868 	const ASTRecordLayout &BRL = CGM.getContext().getASTRecordLayout(PBase);
   1869 	const CXXRecordDecl *PBT = BRL.getPrimaryBase();
   1870 	if (PBT && !BRL.isPrimaryBaseVirtual())
   1871 	  PBase = PBT;
   1872 	else
   1873 	  break;
   1874       }
   1875       ContainingType =
   1876 	getOrCreateType(QualType(PBase->getTypeForDecl(), 0), DefUnit);
   1877     }
   1878     else if (CXXDecl->isDynamicClass())
   1879       ContainingType = RealDecl;
   1880 
   1881     RealDecl->replaceOperandWith(12, ContainingType);
   1882   }
   1883   return llvm::DIType(RealDecl);
   1884 }
   1885 
   1886 /// CreateLimitedTypeNode - Create a new debug type node, but only forward
   1887 /// declare composite types that haven't been processed yet.
   1888 llvm::DIType CGDebugInfo::CreateLimitedTypeNode(QualType Ty,llvm::DIFile Unit) {
   1889 
   1890   // Work out details of type.
   1891   switch (Ty->getTypeClass()) {
   1892 #define TYPE(Class, Base)
   1893 #define ABSTRACT_TYPE(Class, Base)
   1894 #define NON_CANONICAL_TYPE(Class, Base)
   1895 #define DEPENDENT_TYPE(Class, Base) case Type::Class:
   1896         #include "clang/AST/TypeNodes.def"
   1897     llvm_unreachable("Dependent types cannot show up in debug information");
   1898 
   1899   case Type::Record:
   1900     return CreateLimitedType(cast<RecordType>(Ty));
   1901   default:
   1902     return CreateTypeNode(Ty, Unit);
   1903   }
   1904 }
   1905 
   1906 /// CreateMemberType - Create new member and increase Offset by FType's size.
   1907 llvm::DIType CGDebugInfo::CreateMemberType(llvm::DIFile Unit, QualType FType,
   1908                                            StringRef Name,
   1909                                            uint64_t *Offset) {
   1910   llvm::DIType FieldTy = CGDebugInfo::getOrCreateType(FType, Unit);
   1911   uint64_t FieldSize = CGM.getContext().getTypeSize(FType);
   1912   unsigned FieldAlign = CGM.getContext().getTypeAlign(FType);
   1913   llvm::DIType Ty = DBuilder.createMemberType(Unit, Name, Unit, 0,
   1914                                               FieldSize, FieldAlign,
   1915                                               *Offset, 0, FieldTy);
   1916   *Offset += FieldSize;
   1917   return Ty;
   1918 }
   1919 
   1920 /// getFunctionDeclaration - Return debug info descriptor to describe method
   1921 /// declaration for the given method definition.
   1922 llvm::DISubprogram CGDebugInfo::getFunctionDeclaration(const Decl *D) {
   1923   const FunctionDecl *FD = dyn_cast<FunctionDecl>(D);
   1924   if (!FD) return llvm::DISubprogram();
   1925 
   1926   // Setup context.
   1927   getContextDescriptor(cast<Decl>(D->getDeclContext()));
   1928 
   1929   llvm::DenseMap<const FunctionDecl *, llvm::WeakVH>::iterator
   1930     MI = SPCache.find(FD->getCanonicalDecl());
   1931   if (MI != SPCache.end()) {
   1932     llvm::DISubprogram SP(dyn_cast_or_null<llvm::MDNode>(&*MI->second));
   1933     if (SP.isSubprogram() && !llvm::DISubprogram(SP).isDefinition())
   1934       return SP;
   1935   }
   1936 
   1937   for (FunctionDecl::redecl_iterator I = FD->redecls_begin(),
   1938          E = FD->redecls_end(); I != E; ++I) {
   1939     const FunctionDecl *NextFD = *I;
   1940     llvm::DenseMap<const FunctionDecl *, llvm::WeakVH>::iterator
   1941       MI = SPCache.find(NextFD->getCanonicalDecl());
   1942     if (MI != SPCache.end()) {
   1943       llvm::DISubprogram SP(dyn_cast_or_null<llvm::MDNode>(&*MI->second));
   1944       if (SP.isSubprogram() && !llvm::DISubprogram(SP).isDefinition())
   1945         return SP;
   1946     }
   1947   }
   1948   return llvm::DISubprogram();
   1949 }
   1950 
   1951 // getOrCreateFunctionType - Construct DIType. If it is a c++ method, include
   1952 // implicit parameter "this".
   1953 llvm::DIType CGDebugInfo::getOrCreateFunctionType(const Decl * D,
   1954                                                   QualType FnType,
   1955                                                   llvm::DIFile F) {
   1956   if (const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D))
   1957     return getOrCreateMethodType(Method, F);
   1958   if (const ObjCMethodDecl *OMethod = dyn_cast<ObjCMethodDecl>(D)) {
   1959     // Add "self" and "_cmd"
   1960     SmallVector<llvm::Value *, 16> Elts;
   1961 
   1962     // First element is always return type. For 'void' functions it is NULL.
   1963     Elts.push_back(getOrCreateType(OMethod->getResultType(), F));
   1964     // "self" pointer is always first argument.
   1965     Elts.push_back(getOrCreateType(OMethod->getSelfDecl()->getType(), F));
   1966     // "cmd" pointer is always second argument.
   1967     Elts.push_back(getOrCreateType(OMethod->getCmdDecl()->getType(), F));
   1968     // Get rest of the arguments.
   1969     for (ObjCMethodDecl::param_const_iterator PI = OMethod->param_begin(),
   1970            PE = OMethod->param_end(); PI != PE; ++PI)
   1971       Elts.push_back(getOrCreateType((*PI)->getType(), F));
   1972 
   1973     llvm::DIArray EltTypeArray = DBuilder.getOrCreateArray(Elts);
   1974     return DBuilder.createSubroutineType(F, EltTypeArray);
   1975   }
   1976   return getOrCreateType(FnType, F);
   1977 }
   1978 
   1979 /// EmitFunctionStart - Constructs the debug code for entering a function.
   1980 void CGDebugInfo::EmitFunctionStart(GlobalDecl GD, QualType FnType,
   1981                                     llvm::Function *Fn,
   1982                                     CGBuilderTy &Builder) {
   1983 
   1984   StringRef Name;
   1985   StringRef LinkageName;
   1986 
   1987   FnBeginRegionCount.push_back(LexicalBlockStack.size());
   1988 
   1989   const Decl *D = GD.getDecl();
   1990   // Use the location of the declaration.
   1991   SourceLocation Loc = D->getLocation();
   1992 
   1993   unsigned Flags = 0;
   1994   llvm::DIFile Unit = getOrCreateFile(Loc);
   1995   llvm::DIDescriptor FDContext(Unit);
   1996   llvm::DIArray TParamsArray;
   1997   if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
   1998     // If there is a DISubprogram for this function available then use it.
   1999     llvm::DenseMap<const FunctionDecl *, llvm::WeakVH>::iterator
   2000       FI = SPCache.find(FD->getCanonicalDecl());
   2001     if (FI != SPCache.end()) {
   2002       llvm::DIDescriptor SP(dyn_cast_or_null<llvm::MDNode>(&*FI->second));
   2003       if (SP.isSubprogram() && llvm::DISubprogram(SP).isDefinition()) {
   2004         llvm::MDNode *SPN = SP;
   2005         LexicalBlockStack.push_back(SPN);
   2006         RegionMap[D] = llvm::WeakVH(SP);
   2007         return;
   2008       }
   2009     }
   2010     Name = getFunctionName(FD);
   2011     // Use mangled name as linkage name for c/c++ functions.
   2012     if (FD->hasPrototype()) {
   2013       LinkageName = CGM.getMangledName(GD);
   2014       Flags |= llvm::DIDescriptor::FlagPrototyped;
   2015     }
   2016     if (LinkageName == Name)
   2017       LinkageName = StringRef();
   2018 
   2019     if (const NamespaceDecl *NSDecl =
   2020         dyn_cast_or_null<NamespaceDecl>(FD->getDeclContext()))
   2021       FDContext = getOrCreateNameSpace(NSDecl);
   2022     else if (const RecordDecl *RDecl =
   2023              dyn_cast_or_null<RecordDecl>(FD->getDeclContext()))
   2024       FDContext = getContextDescriptor(cast<Decl>(RDecl->getDeclContext()));
   2025 
   2026     // Collect template parameters.
   2027     TParamsArray = CollectFunctionTemplateParams(FD, Unit);
   2028   } else if (const ObjCMethodDecl *OMD = dyn_cast<ObjCMethodDecl>(D)) {
   2029     Name = getObjCMethodName(OMD);
   2030     Flags |= llvm::DIDescriptor::FlagPrototyped;
   2031   } else {
   2032     // Use llvm function name.
   2033     Name = Fn->getName();
   2034     Flags |= llvm::DIDescriptor::FlagPrototyped;
   2035   }
   2036   if (!Name.empty() && Name[0] == '\01')
   2037     Name = Name.substr(1);
   2038 
   2039   unsigned LineNo = getLineNumber(Loc);
   2040   if (D->isImplicit())
   2041     Flags |= llvm::DIDescriptor::FlagArtificial;
   2042 
   2043   llvm::DISubprogram SPDecl = getFunctionDeclaration(D);
   2044   llvm::DISubprogram SP =
   2045     DBuilder.createFunction(FDContext, Name, LinkageName, Unit,
   2046                             LineNo, getOrCreateFunctionType(D, FnType, Unit),
   2047                             Fn->hasInternalLinkage(), true/*definition*/,
   2048                             getLineNumber(CurLoc),
   2049                             Flags, CGM.getLangOpts().Optimize, Fn,
   2050                             TParamsArray, SPDecl);
   2051 
   2052   // Push function on region stack.
   2053   llvm::MDNode *SPN = SP;
   2054   LexicalBlockStack.push_back(SPN);
   2055   RegionMap[D] = llvm::WeakVH(SP);
   2056 }
   2057 
   2058 /// EmitLocation - Emit metadata to indicate a change in line/column
   2059 /// information in the source file.
   2060 void CGDebugInfo::EmitLocation(CGBuilderTy &Builder, SourceLocation Loc) {
   2061 
   2062   // Update our current location
   2063   setLocation(Loc);
   2064 
   2065   if (CurLoc.isInvalid() || CurLoc.isMacroID()) return;
   2066 
   2067   // Don't bother if things are the same as last time.
   2068   SourceManager &SM = CGM.getContext().getSourceManager();
   2069   if (CurLoc == PrevLoc ||
   2070       SM.getExpansionLoc(CurLoc) == SM.getExpansionLoc(PrevLoc))
   2071     // New Builder may not be in sync with CGDebugInfo.
   2072     if (!Builder.getCurrentDebugLocation().isUnknown())
   2073       return;
   2074 
   2075   // Update last state.
   2076   PrevLoc = CurLoc;
   2077 
   2078   llvm::MDNode *Scope = LexicalBlockStack.back();
   2079   Builder.SetCurrentDebugLocation(llvm::DebugLoc::get(getLineNumber(CurLoc),
   2080                                                       getColumnNumber(CurLoc),
   2081                                                       Scope));
   2082 }
   2083 
   2084 /// CreateLexicalBlock - Creates a new lexical block node and pushes it on
   2085 /// the stack.
   2086 void CGDebugInfo::CreateLexicalBlock(SourceLocation Loc) {
   2087   llvm::DIDescriptor D =
   2088     DBuilder.createLexicalBlock(LexicalBlockStack.empty() ?
   2089                                 llvm::DIDescriptor() :
   2090                                 llvm::DIDescriptor(LexicalBlockStack.back()),
   2091                                 getOrCreateFile(CurLoc),
   2092                                 getLineNumber(CurLoc),
   2093                                 getColumnNumber(CurLoc));
   2094   llvm::MDNode *DN = D;
   2095   LexicalBlockStack.push_back(DN);
   2096 }
   2097 
   2098 /// EmitLexicalBlockStart - Constructs the debug code for entering a declarative
   2099 /// region - beginning of a DW_TAG_lexical_block.
   2100 void CGDebugInfo::EmitLexicalBlockStart(CGBuilderTy &Builder, SourceLocation Loc) {
   2101   // Set our current location.
   2102   setLocation(Loc);
   2103 
   2104   // Create a new lexical block and push it on the stack.
   2105   CreateLexicalBlock(Loc);
   2106 
   2107   // Emit a line table change for the current location inside the new scope.
   2108   Builder.SetCurrentDebugLocation(llvm::DebugLoc::get(getLineNumber(Loc),
   2109                                   getColumnNumber(Loc),
   2110                                   LexicalBlockStack.back()));
   2111 }
   2112 
   2113 /// EmitLexicalBlockEnd - Constructs the debug code for exiting a declarative
   2114 /// region - end of a DW_TAG_lexical_block.
   2115 void CGDebugInfo::EmitLexicalBlockEnd(CGBuilderTy &Builder, SourceLocation Loc) {
   2116   assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
   2117 
   2118   // Provide an entry in the line table for the end of the block.
   2119   EmitLocation(Builder, Loc);
   2120 
   2121   LexicalBlockStack.pop_back();
   2122 }
   2123 
   2124 /// EmitFunctionEnd - Constructs the debug code for exiting a function.
   2125 void CGDebugInfo::EmitFunctionEnd(CGBuilderTy &Builder) {
   2126   assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
   2127   unsigned RCount = FnBeginRegionCount.back();
   2128   assert(RCount <= LexicalBlockStack.size() && "Region stack mismatch");
   2129 
   2130   // Pop all regions for this function.
   2131   while (LexicalBlockStack.size() != RCount)
   2132     EmitLexicalBlockEnd(Builder, CurLoc);
   2133   FnBeginRegionCount.pop_back();
   2134 }
   2135 
   2136 // EmitTypeForVarWithBlocksAttr - Build up structure info for the byref.
   2137 // See BuildByRefType.
   2138 llvm::DIType CGDebugInfo::EmitTypeForVarWithBlocksAttr(const ValueDecl *VD,
   2139                                                        uint64_t *XOffset) {
   2140 
   2141   SmallVector<llvm::Value *, 5> EltTys;
   2142   QualType FType;
   2143   uint64_t FieldSize, FieldOffset;
   2144   unsigned FieldAlign;
   2145 
   2146   llvm::DIFile Unit = getOrCreateFile(VD->getLocation());
   2147   QualType Type = VD->getType();
   2148 
   2149   FieldOffset = 0;
   2150   FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy);
   2151   EltTys.push_back(CreateMemberType(Unit, FType, "__isa", &FieldOffset));
   2152   EltTys.push_back(CreateMemberType(Unit, FType, "__forwarding", &FieldOffset));
   2153   FType = CGM.getContext().IntTy;
   2154   EltTys.push_back(CreateMemberType(Unit, FType, "__flags", &FieldOffset));
   2155   EltTys.push_back(CreateMemberType(Unit, FType, "__size", &FieldOffset));
   2156 
   2157   bool HasCopyAndDispose = CGM.getContext().BlockRequiresCopying(Type);
   2158   if (HasCopyAndDispose) {
   2159     FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy);
   2160     EltTys.push_back(CreateMemberType(Unit, FType, "__copy_helper",
   2161                                       &FieldOffset));
   2162     EltTys.push_back(CreateMemberType(Unit, FType, "__destroy_helper",
   2163                                       &FieldOffset));
   2164   }
   2165 
   2166   CharUnits Align = CGM.getContext().getDeclAlign(VD);
   2167   if (Align > CGM.getContext().toCharUnitsFromBits(
   2168         CGM.getContext().getTargetInfo().getPointerAlign(0))) {
   2169     CharUnits FieldOffsetInBytes
   2170       = CGM.getContext().toCharUnitsFromBits(FieldOffset);
   2171     CharUnits AlignedOffsetInBytes
   2172       = FieldOffsetInBytes.RoundUpToAlignment(Align);
   2173     CharUnits NumPaddingBytes
   2174       = AlignedOffsetInBytes - FieldOffsetInBytes;
   2175 
   2176     if (NumPaddingBytes.isPositive()) {
   2177       llvm::APInt pad(32, NumPaddingBytes.getQuantity());
   2178       FType = CGM.getContext().getConstantArrayType(CGM.getContext().CharTy,
   2179                                                     pad, ArrayType::Normal, 0);
   2180       EltTys.push_back(CreateMemberType(Unit, FType, "", &FieldOffset));
   2181     }
   2182   }
   2183 
   2184   FType = Type;
   2185   llvm::DIType FieldTy = CGDebugInfo::getOrCreateType(FType, Unit);
   2186   FieldSize = CGM.getContext().getTypeSize(FType);
   2187   FieldAlign = CGM.getContext().toBits(Align);
   2188 
   2189   *XOffset = FieldOffset;
   2190   FieldTy = DBuilder.createMemberType(Unit, VD->getName(), Unit,
   2191                                       0, FieldSize, FieldAlign,
   2192                                       FieldOffset, 0, FieldTy);
   2193   EltTys.push_back(FieldTy);
   2194   FieldOffset += FieldSize;
   2195 
   2196   llvm::DIArray Elements = DBuilder.getOrCreateArray(EltTys);
   2197 
   2198   unsigned Flags = llvm::DIDescriptor::FlagBlockByrefStruct;
   2199 
   2200   return DBuilder.createStructType(Unit, "", Unit, 0, FieldOffset, 0, Flags,
   2201                                    Elements);
   2202 }
   2203 
   2204 /// EmitDeclare - Emit local variable declaration debug info.
   2205 void CGDebugInfo::EmitDeclare(const VarDecl *VD, unsigned Tag,
   2206                               llvm::Value *Storage,
   2207                               unsigned ArgNo, CGBuilderTy &Builder) {
   2208   assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
   2209 
   2210   llvm::DIFile Unit = getOrCreateFile(VD->getLocation());
   2211   llvm::DIType Ty;
   2212   uint64_t XOffset = 0;
   2213   if (VD->hasAttr<BlocksAttr>())
   2214     Ty = EmitTypeForVarWithBlocksAttr(VD, &XOffset);
   2215   else
   2216     Ty = getOrCreateType(VD->getType(), Unit);
   2217 
   2218   // If there is not any debug info for type then do not emit debug info
   2219   // for this variable.
   2220   if (!Ty)
   2221     return;
   2222 
   2223   if (llvm::Argument *Arg = dyn_cast<llvm::Argument>(Storage)) {
   2224     // If Storage is an aggregate returned as 'sret' then let debugger know
   2225     // about this.
   2226     if (Arg->hasStructRetAttr())
   2227       Ty = DBuilder.createReferenceType(Ty);
   2228     else if (CXXRecordDecl *Record = VD->getType()->getAsCXXRecordDecl()) {
   2229       // If an aggregate variable has non trivial destructor or non trivial copy
   2230       // constructor than it is pass indirectly. Let debug info know about this
   2231       // by using reference of the aggregate type as a argument type.
   2232       if (!Record->hasTrivialCopyConstructor() ||
   2233           !Record->hasTrivialDestructor())
   2234         Ty = DBuilder.createReferenceType(Ty);
   2235     }
   2236   }
   2237 
   2238   // Get location information.
   2239   unsigned Line = getLineNumber(VD->getLocation());
   2240   unsigned Column = getColumnNumber(VD->getLocation());
   2241   unsigned Flags = 0;
   2242   if (VD->isImplicit())
   2243     Flags |= llvm::DIDescriptor::FlagArtificial;
   2244   llvm::MDNode *Scope = LexicalBlockStack.back();
   2245 
   2246   StringRef Name = VD->getName();
   2247   if (!Name.empty()) {
   2248     if (VD->hasAttr<BlocksAttr>()) {
   2249       CharUnits offset = CharUnits::fromQuantity(32);
   2250       SmallVector<llvm::Value *, 9> addr;
   2251       llvm::Type *Int64Ty = CGM.Int64Ty;
   2252       addr.push_back(llvm::ConstantInt::get(Int64Ty, llvm::DIBuilder::OpPlus));
   2253       // offset of __forwarding field
   2254       offset = CGM.getContext().toCharUnitsFromBits(
   2255         CGM.getContext().getTargetInfo().getPointerWidth(0));
   2256       addr.push_back(llvm::ConstantInt::get(Int64Ty, offset.getQuantity()));
   2257       addr.push_back(llvm::ConstantInt::get(Int64Ty, llvm::DIBuilder::OpDeref));
   2258       addr.push_back(llvm::ConstantInt::get(Int64Ty, llvm::DIBuilder::OpPlus));
   2259       // offset of x field
   2260       offset = CGM.getContext().toCharUnitsFromBits(XOffset);
   2261       addr.push_back(llvm::ConstantInt::get(Int64Ty, offset.getQuantity()));
   2262 
   2263       // Create the descriptor for the variable.
   2264       llvm::DIVariable D =
   2265         DBuilder.createComplexVariable(Tag,
   2266                                        llvm::DIDescriptor(Scope),
   2267                                        VD->getName(), Unit, Line, Ty,
   2268                                        addr, ArgNo);
   2269 
   2270       // Insert an llvm.dbg.declare into the current block.
   2271       llvm::Instruction *Call =
   2272         DBuilder.insertDeclare(Storage, D, Builder.GetInsertBlock());
   2273       Call->setDebugLoc(llvm::DebugLoc::get(Line, Column, Scope));
   2274       return;
   2275     }
   2276       // Create the descriptor for the variable.
   2277     llvm::DIVariable D =
   2278       DBuilder.createLocalVariable(Tag, llvm::DIDescriptor(Scope),
   2279                                    Name, Unit, Line, Ty,
   2280                                    CGM.getLangOpts().Optimize, Flags, ArgNo);
   2281 
   2282     // Insert an llvm.dbg.declare into the current block.
   2283     llvm::Instruction *Call =
   2284       DBuilder.insertDeclare(Storage, D, Builder.GetInsertBlock());
   2285     Call->setDebugLoc(llvm::DebugLoc::get(Line, Column, Scope));
   2286     return;
   2287   }
   2288 
   2289   // If VD is an anonymous union then Storage represents value for
   2290   // all union fields.
   2291   if (const RecordType *RT = dyn_cast<RecordType>(VD->getType())) {
   2292     const RecordDecl *RD = cast<RecordDecl>(RT->getDecl());
   2293     if (RD->isUnion()) {
   2294       for (RecordDecl::field_iterator I = RD->field_begin(),
   2295              E = RD->field_end();
   2296            I != E; ++I) {
   2297         FieldDecl *Field = *I;
   2298         llvm::DIType FieldTy = getOrCreateType(Field->getType(), Unit);
   2299         StringRef FieldName = Field->getName();
   2300 
   2301         // Ignore unnamed fields. Do not ignore unnamed records.
   2302         if (FieldName.empty() && !isa<RecordType>(Field->getType()))
   2303           continue;
   2304 
   2305         // Use VarDecl's Tag, Scope and Line number.
   2306         llvm::DIVariable D =
   2307           DBuilder.createLocalVariable(Tag, llvm::DIDescriptor(Scope),
   2308                                        FieldName, Unit, Line, FieldTy,
   2309                                        CGM.getLangOpts().Optimize, Flags,
   2310                                        ArgNo);
   2311 
   2312         // Insert an llvm.dbg.declare into the current block.
   2313         llvm::Instruction *Call =
   2314           DBuilder.insertDeclare(Storage, D, Builder.GetInsertBlock());
   2315         Call->setDebugLoc(llvm::DebugLoc::get(Line, Column, Scope));
   2316       }
   2317     }
   2318   }
   2319 }
   2320 
   2321 void CGDebugInfo::EmitDeclareOfAutoVariable(const VarDecl *VD,
   2322                                             llvm::Value *Storage,
   2323                                             CGBuilderTy &Builder) {
   2324   EmitDeclare(VD, llvm::dwarf::DW_TAG_auto_variable, Storage, 0, Builder);
   2325 }
   2326 
   2327 void CGDebugInfo::EmitDeclareOfBlockDeclRefVariable(
   2328   const VarDecl *VD, llvm::Value *Storage, CGBuilderTy &Builder,
   2329   const CGBlockInfo &blockInfo) {
   2330   assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
   2331 
   2332   if (Builder.GetInsertBlock() == 0)
   2333     return;
   2334 
   2335   bool isByRef = VD->hasAttr<BlocksAttr>();
   2336 
   2337   uint64_t XOffset = 0;
   2338   llvm::DIFile Unit = getOrCreateFile(VD->getLocation());
   2339   llvm::DIType Ty;
   2340   if (isByRef)
   2341     Ty = EmitTypeForVarWithBlocksAttr(VD, &XOffset);
   2342   else
   2343     Ty = getOrCreateType(VD->getType(), Unit);
   2344 
   2345   // Get location information.
   2346   unsigned Line = getLineNumber(VD->getLocation());
   2347   unsigned Column = getColumnNumber(VD->getLocation());
   2348 
   2349   const llvm::TargetData &target = CGM.getTargetData();
   2350 
   2351   CharUnits offset = CharUnits::fromQuantity(
   2352     target.getStructLayout(blockInfo.StructureType)
   2353           ->getElementOffset(blockInfo.getCapture(VD).getIndex()));
   2354 
   2355   SmallVector<llvm::Value *, 9> addr;
   2356   llvm::Type *Int64Ty = CGM.Int64Ty;
   2357   addr.push_back(llvm::ConstantInt::get(Int64Ty, llvm::DIBuilder::OpPlus));
   2358   addr.push_back(llvm::ConstantInt::get(Int64Ty, offset.getQuantity()));
   2359   if (isByRef) {
   2360     addr.push_back(llvm::ConstantInt::get(Int64Ty, llvm::DIBuilder::OpDeref));
   2361     addr.push_back(llvm::ConstantInt::get(Int64Ty, llvm::DIBuilder::OpPlus));
   2362     // offset of __forwarding field
   2363     offset = CGM.getContext()
   2364                 .toCharUnitsFromBits(target.getPointerSizeInBits());
   2365     addr.push_back(llvm::ConstantInt::get(Int64Ty, offset.getQuantity()));
   2366     addr.push_back(llvm::ConstantInt::get(Int64Ty, llvm::DIBuilder::OpDeref));
   2367     addr.push_back(llvm::ConstantInt::get(Int64Ty, llvm::DIBuilder::OpPlus));
   2368     // offset of x field
   2369     offset = CGM.getContext().toCharUnitsFromBits(XOffset);
   2370     addr.push_back(llvm::ConstantInt::get(Int64Ty, offset.getQuantity()));
   2371   }
   2372 
   2373   // Create the descriptor for the variable.
   2374   llvm::DIVariable D =
   2375     DBuilder.createComplexVariable(llvm::dwarf::DW_TAG_auto_variable,
   2376                                    llvm::DIDescriptor(LexicalBlockStack.back()),
   2377                                    VD->getName(), Unit, Line, Ty, addr);
   2378   // Insert an llvm.dbg.declare into the current block.
   2379   llvm::Instruction *Call =
   2380     DBuilder.insertDeclare(Storage, D, Builder.GetInsertPoint());
   2381   Call->setDebugLoc(llvm::DebugLoc::get(Line, Column,
   2382                                         LexicalBlockStack.back()));
   2383 }
   2384 
   2385 /// EmitDeclareOfArgVariable - Emit call to llvm.dbg.declare for an argument
   2386 /// variable declaration.
   2387 void CGDebugInfo::EmitDeclareOfArgVariable(const VarDecl *VD, llvm::Value *AI,
   2388                                            unsigned ArgNo,
   2389                                            CGBuilderTy &Builder) {
   2390   EmitDeclare(VD, llvm::dwarf::DW_TAG_arg_variable, AI, ArgNo, Builder);
   2391 }
   2392 
   2393 namespace {
   2394   struct BlockLayoutChunk {
   2395     uint64_t OffsetInBits;
   2396     const BlockDecl::Capture *Capture;
   2397   };
   2398   bool operator<(const BlockLayoutChunk &l, const BlockLayoutChunk &r) {
   2399     return l.OffsetInBits < r.OffsetInBits;
   2400   }
   2401 }
   2402 
   2403 void CGDebugInfo::EmitDeclareOfBlockLiteralArgVariable(const CGBlockInfo &block,
   2404                                                        llvm::Value *addr,
   2405                                                        CGBuilderTy &Builder) {
   2406   ASTContext &C = CGM.getContext();
   2407   const BlockDecl *blockDecl = block.getBlockDecl();
   2408 
   2409   // Collect some general information about the block's location.
   2410   SourceLocation loc = blockDecl->getCaretLocation();
   2411   llvm::DIFile tunit = getOrCreateFile(loc);
   2412   unsigned line = getLineNumber(loc);
   2413   unsigned column = getColumnNumber(loc);
   2414 
   2415   // Build the debug-info type for the block literal.
   2416   getContextDescriptor(cast<Decl>(blockDecl->getDeclContext()));
   2417 
   2418   const llvm::StructLayout *blockLayout =
   2419     CGM.getTargetData().getStructLayout(block.StructureType);
   2420 
   2421   SmallVector<llvm::Value*, 16> fields;
   2422   fields.push_back(createFieldType("__isa", C.VoidPtrTy, 0, loc, AS_public,
   2423                                    blockLayout->getElementOffsetInBits(0),
   2424                                    tunit, tunit));
   2425   fields.push_back(createFieldType("__flags", C.IntTy, 0, loc, AS_public,
   2426                                    blockLayout->getElementOffsetInBits(1),
   2427                                    tunit, tunit));
   2428   fields.push_back(createFieldType("__reserved", C.IntTy, 0, loc, AS_public,
   2429                                    blockLayout->getElementOffsetInBits(2),
   2430                                    tunit, tunit));
   2431   fields.push_back(createFieldType("__FuncPtr", C.VoidPtrTy, 0, loc, AS_public,
   2432                                    blockLayout->getElementOffsetInBits(3),
   2433                                    tunit, tunit));
   2434   fields.push_back(createFieldType("__descriptor",
   2435                                    C.getPointerType(block.NeedsCopyDispose ?
   2436                                         C.getBlockDescriptorExtendedType() :
   2437                                         C.getBlockDescriptorType()),
   2438                                    0, loc, AS_public,
   2439                                    blockLayout->getElementOffsetInBits(4),
   2440                                    tunit, tunit));
   2441 
   2442   // We want to sort the captures by offset, not because DWARF
   2443   // requires this, but because we're paranoid about debuggers.
   2444   SmallVector<BlockLayoutChunk, 8> chunks;
   2445 
   2446   // 'this' capture.
   2447   if (blockDecl->capturesCXXThis()) {
   2448     BlockLayoutChunk chunk;
   2449     chunk.OffsetInBits =
   2450       blockLayout->getElementOffsetInBits(block.CXXThisIndex);
   2451     chunk.Capture = 0;
   2452     chunks.push_back(chunk);
   2453   }
   2454 
   2455   // Variable captures.
   2456   for (BlockDecl::capture_const_iterator
   2457          i = blockDecl->capture_begin(), e = blockDecl->capture_end();
   2458        i != e; ++i) {
   2459     const BlockDecl::Capture &capture = *i;
   2460     const VarDecl *variable = capture.getVariable();
   2461     const CGBlockInfo::Capture &captureInfo = block.getCapture(variable);
   2462 
   2463     // Ignore constant captures.
   2464     if (captureInfo.isConstant())
   2465       continue;
   2466 
   2467     BlockLayoutChunk chunk;
   2468     chunk.OffsetInBits =
   2469       blockLayout->getElementOffsetInBits(captureInfo.getIndex());
   2470     chunk.Capture = &capture;
   2471     chunks.push_back(chunk);
   2472   }
   2473 
   2474   // Sort by offset.
   2475   llvm::array_pod_sort(chunks.begin(), chunks.end());
   2476 
   2477   for (SmallVectorImpl<BlockLayoutChunk>::iterator
   2478          i = chunks.begin(), e = chunks.end(); i != e; ++i) {
   2479     uint64_t offsetInBits = i->OffsetInBits;
   2480     const BlockDecl::Capture *capture = i->Capture;
   2481 
   2482     // If we have a null capture, this must be the C++ 'this' capture.
   2483     if (!capture) {
   2484       const CXXMethodDecl *method =
   2485         cast<CXXMethodDecl>(blockDecl->getNonClosureContext());
   2486       QualType type = method->getThisType(C);
   2487 
   2488       fields.push_back(createFieldType("this", type, 0, loc, AS_public,
   2489                                        offsetInBits, tunit, tunit));
   2490       continue;
   2491     }
   2492 
   2493     const VarDecl *variable = capture->getVariable();
   2494     StringRef name = variable->getName();
   2495 
   2496     llvm::DIType fieldType;
   2497     if (capture->isByRef()) {
   2498       std::pair<uint64_t,unsigned> ptrInfo = C.getTypeInfo(C.VoidPtrTy);
   2499 
   2500       // FIXME: this creates a second copy of this type!
   2501       uint64_t xoffset;
   2502       fieldType = EmitTypeForVarWithBlocksAttr(variable, &xoffset);
   2503       fieldType = DBuilder.createPointerType(fieldType, ptrInfo.first);
   2504       fieldType = DBuilder.createMemberType(tunit, name, tunit, line,
   2505                                             ptrInfo.first, ptrInfo.second,
   2506                                             offsetInBits, 0, fieldType);
   2507     } else {
   2508       fieldType = createFieldType(name, variable->getType(), 0,
   2509                                   loc, AS_public, offsetInBits, tunit, tunit);
   2510     }
   2511     fields.push_back(fieldType);
   2512   }
   2513 
   2514   SmallString<36> typeName;
   2515   llvm::raw_svector_ostream(typeName)
   2516     << "__block_literal_" << CGM.getUniqueBlockCount();
   2517 
   2518   llvm::DIArray fieldsArray = DBuilder.getOrCreateArray(fields);
   2519 
   2520   llvm::DIType type =
   2521     DBuilder.createStructType(tunit, typeName.str(), tunit, line,
   2522                               CGM.getContext().toBits(block.BlockSize),
   2523                               CGM.getContext().toBits(block.BlockAlign),
   2524                               0, fieldsArray);
   2525   type = DBuilder.createPointerType(type, CGM.PointerWidthInBits);
   2526 
   2527   // Get overall information about the block.
   2528   unsigned flags = llvm::DIDescriptor::FlagArtificial;
   2529   llvm::MDNode *scope = LexicalBlockStack.back();
   2530   StringRef name = ".block_descriptor";
   2531 
   2532   // Create the descriptor for the parameter.
   2533   llvm::DIVariable debugVar =
   2534     DBuilder.createLocalVariable(llvm::dwarf::DW_TAG_arg_variable,
   2535                                  llvm::DIDescriptor(scope),
   2536                                  name, tunit, line, type,
   2537                                  CGM.getLangOpts().Optimize, flags,
   2538                                  cast<llvm::Argument>(addr)->getArgNo() + 1);
   2539 
   2540   // Insert an llvm.dbg.value into the current block.
   2541   llvm::Instruction *declare =
   2542     DBuilder.insertDbgValueIntrinsic(addr, 0, debugVar,
   2543                                      Builder.GetInsertBlock());
   2544   declare->setDebugLoc(llvm::DebugLoc::get(line, column, scope));
   2545 }
   2546 
   2547 /// EmitGlobalVariable - Emit information about a global variable.
   2548 void CGDebugInfo::EmitGlobalVariable(llvm::GlobalVariable *Var,
   2549                                      const VarDecl *D) {
   2550   // Create global variable debug descriptor.
   2551   llvm::DIFile Unit = getOrCreateFile(D->getLocation());
   2552   unsigned LineNo = getLineNumber(D->getLocation());
   2553 
   2554   setLocation(D->getLocation());
   2555 
   2556   QualType T = D->getType();
   2557   if (T->isIncompleteArrayType()) {
   2558 
   2559     // CodeGen turns int[] into int[1] so we'll do the same here.
   2560     llvm::APSInt ConstVal(32);
   2561 
   2562     ConstVal = 1;
   2563     QualType ET = CGM.getContext().getAsArrayType(T)->getElementType();
   2564 
   2565     T = CGM.getContext().getConstantArrayType(ET, ConstVal,
   2566                                               ArrayType::Normal, 0);
   2567   }
   2568   StringRef DeclName = D->getName();
   2569   StringRef LinkageName;
   2570   if (D->getDeclContext() && !isa<FunctionDecl>(D->getDeclContext())
   2571       && !isa<ObjCMethodDecl>(D->getDeclContext()))
   2572     LinkageName = Var->getName();
   2573   if (LinkageName == DeclName)
   2574     LinkageName = StringRef();
   2575   llvm::DIDescriptor DContext =
   2576     getContextDescriptor(dyn_cast<Decl>(D->getDeclContext()));
   2577   DBuilder.createStaticVariable(DContext, DeclName, LinkageName,
   2578                                 Unit, LineNo, getOrCreateType(T, Unit),
   2579                                 Var->hasInternalLinkage(), Var);
   2580 }
   2581 
   2582 /// EmitGlobalVariable - Emit information about an objective-c interface.
   2583 void CGDebugInfo::EmitGlobalVariable(llvm::GlobalVariable *Var,
   2584                                      ObjCInterfaceDecl *ID) {
   2585   // Create global variable debug descriptor.
   2586   llvm::DIFile Unit = getOrCreateFile(ID->getLocation());
   2587   unsigned LineNo = getLineNumber(ID->getLocation());
   2588 
   2589   StringRef Name = ID->getName();
   2590 
   2591   QualType T = CGM.getContext().getObjCInterfaceType(ID);
   2592   if (T->isIncompleteArrayType()) {
   2593 
   2594     // CodeGen turns int[] into int[1] so we'll do the same here.
   2595     llvm::APSInt ConstVal(32);
   2596 
   2597     ConstVal = 1;
   2598     QualType ET = CGM.getContext().getAsArrayType(T)->getElementType();
   2599 
   2600     T = CGM.getContext().getConstantArrayType(ET, ConstVal,
   2601                                            ArrayType::Normal, 0);
   2602   }
   2603 
   2604   DBuilder.createGlobalVariable(Name, Unit, LineNo,
   2605                                 getOrCreateType(T, Unit),
   2606                                 Var->hasInternalLinkage(), Var);
   2607 }
   2608 
   2609 /// EmitGlobalVariable - Emit global variable's debug info.
   2610 void CGDebugInfo::EmitGlobalVariable(const ValueDecl *VD,
   2611                                      llvm::Constant *Init) {
   2612   // Create the descriptor for the variable.
   2613   llvm::DIFile Unit = getOrCreateFile(VD->getLocation());
   2614   StringRef Name = VD->getName();
   2615   llvm::DIType Ty = getOrCreateType(VD->getType(), Unit);
   2616   if (const EnumConstantDecl *ECD = dyn_cast<EnumConstantDecl>(VD)) {
   2617     if (const EnumDecl *ED = dyn_cast<EnumDecl>(ECD->getDeclContext()))
   2618       Ty = CreateEnumType(ED);
   2619   }
   2620   // Do not use DIGlobalVariable for enums.
   2621   if (Ty.getTag() == llvm::dwarf::DW_TAG_enumeration_type)
   2622     return;
   2623   DBuilder.createStaticVariable(Unit, Name, Name, Unit,
   2624                                 getLineNumber(VD->getLocation()),
   2625                                 Ty, true, Init);
   2626 }
   2627 
   2628 /// getOrCreateNamesSpace - Return namespace descriptor for the given
   2629 /// namespace decl.
   2630 llvm::DINameSpace
   2631 CGDebugInfo::getOrCreateNameSpace(const NamespaceDecl *NSDecl) {
   2632   llvm::DenseMap<const NamespaceDecl *, llvm::WeakVH>::iterator I =
   2633     NameSpaceCache.find(NSDecl);
   2634   if (I != NameSpaceCache.end())
   2635     return llvm::DINameSpace(cast<llvm::MDNode>(I->second));
   2636 
   2637   unsigned LineNo = getLineNumber(NSDecl->getLocation());
   2638   llvm::DIFile FileD = getOrCreateFile(NSDecl->getLocation());
   2639   llvm::DIDescriptor Context =
   2640     getContextDescriptor(dyn_cast<Decl>(NSDecl->getDeclContext()));
   2641   llvm::DINameSpace NS =
   2642     DBuilder.createNameSpace(Context, NSDecl->getName(), FileD, LineNo);
   2643   NameSpaceCache[NSDecl] = llvm::WeakVH(NS);
   2644   return NS;
   2645 }
   2646 
   2647 void CGDebugInfo::finalize(void) {
   2648   for (std::vector<std::pair<void *, llvm::WeakVH> >::const_iterator VI
   2649          = ReplaceMap.begin(), VE = ReplaceMap.end(); VI != VE; ++VI) {
   2650     llvm::DIType Ty, RepTy;
   2651     // Verify that the debug info still exists.
   2652     if (&*VI->second)
   2653       Ty = llvm::DIType(cast<llvm::MDNode>(VI->second));
   2654 
   2655     llvm::DenseMap<void *, llvm::WeakVH>::iterator it =
   2656       TypeCache.find(VI->first);
   2657     if (it != TypeCache.end()) {
   2658       // Verify that the debug info still exists.
   2659       if (&*it->second)
   2660         RepTy = llvm::DIType(cast<llvm::MDNode>(it->second));
   2661     }
   2662 
   2663     if (Ty.Verify() && Ty.isForwardDecl() && RepTy.Verify()) {
   2664       Ty.replaceAllUsesWith(RepTy);
   2665     }
   2666   }
   2667   DBuilder.finalize();
   2668 }
   2669