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 "CGBlocks.h"
16#include "CGRecordLayout.h"
17#include "CGCXXABI.h"
18#include "CGObjCRuntime.h"
19#include "CodeGenFunction.h"
20#include "CodeGenModule.h"
21#include "clang/AST/ASTContext.h"
22#include "clang/AST/DeclFriend.h"
23#include "clang/AST/DeclObjC.h"
24#include "clang/AST/DeclTemplate.h"
25#include "clang/AST/Expr.h"
26#include "clang/AST/RecordLayout.h"
27#include "clang/Basic/FileManager.h"
28#include "clang/Basic/SourceManager.h"
29#include "clang/Basic/Version.h"
30#include "clang/Frontend/CodeGenOptions.h"
31#include "clang/Lex/HeaderSearchOptions.h"
32#include "clang/Lex/ModuleMap.h"
33#include "clang/Lex/PreprocessorOptions.h"
34#include "llvm/ADT/SmallVector.h"
35#include "llvm/ADT/StringExtras.h"
36#include "llvm/IR/Constants.h"
37#include "llvm/IR/DataLayout.h"
38#include "llvm/IR/DerivedTypes.h"
39#include "llvm/IR/Instructions.h"
40#include "llvm/IR/Intrinsics.h"
41#include "llvm/IR/Module.h"
42#include "llvm/Support/FileSystem.h"
43#include "llvm/Support/Path.h"
44using namespace clang;
45using namespace clang::CodeGen;
46
47CGDebugInfo::CGDebugInfo(CodeGenModule &CGM)
48    : CGM(CGM), DebugKind(CGM.getCodeGenOpts().getDebugInfo()),
49      DebugTypeExtRefs(CGM.getCodeGenOpts().DebugTypeExtRefs),
50      DBuilder(CGM.getModule()) {
51  for (const auto &KV : CGM.getCodeGenOpts().DebugPrefixMap)
52    DebugPrefixMap[KV.first] = KV.second;
53  CreateCompileUnit();
54}
55
56CGDebugInfo::~CGDebugInfo() {
57  assert(LexicalBlockStack.empty() &&
58         "Region stack mismatch, stack not empty!");
59}
60
61ApplyDebugLocation::ApplyDebugLocation(CodeGenFunction &CGF,
62                                       SourceLocation TemporaryLocation)
63    : CGF(&CGF) {
64  init(TemporaryLocation);
65}
66
67ApplyDebugLocation::ApplyDebugLocation(CodeGenFunction &CGF,
68                                       bool DefaultToEmpty,
69                                       SourceLocation TemporaryLocation)
70    : CGF(&CGF) {
71  init(TemporaryLocation, DefaultToEmpty);
72}
73
74void ApplyDebugLocation::init(SourceLocation TemporaryLocation,
75                              bool DefaultToEmpty) {
76  auto *DI = CGF->getDebugInfo();
77  if (!DI) {
78    CGF = nullptr;
79    return;
80  }
81
82  OriginalLocation = CGF->Builder.getCurrentDebugLocation();
83  if (TemporaryLocation.isValid()) {
84    DI->EmitLocation(CGF->Builder, TemporaryLocation);
85    return;
86  }
87
88  if (DefaultToEmpty) {
89    CGF->Builder.SetCurrentDebugLocation(llvm::DebugLoc());
90    return;
91  }
92
93  // Construct a location that has a valid scope, but no line info.
94  assert(!DI->LexicalBlockStack.empty());
95  CGF->Builder.SetCurrentDebugLocation(
96      llvm::DebugLoc::get(0, 0, DI->LexicalBlockStack.back()));
97}
98
99ApplyDebugLocation::ApplyDebugLocation(CodeGenFunction &CGF, const Expr *E)
100    : CGF(&CGF) {
101  init(E->getExprLoc());
102}
103
104ApplyDebugLocation::ApplyDebugLocation(CodeGenFunction &CGF, llvm::DebugLoc Loc)
105    : CGF(&CGF) {
106  if (!CGF.getDebugInfo()) {
107    this->CGF = nullptr;
108    return;
109  }
110  OriginalLocation = CGF.Builder.getCurrentDebugLocation();
111  if (Loc)
112    CGF.Builder.SetCurrentDebugLocation(std::move(Loc));
113}
114
115ApplyDebugLocation::~ApplyDebugLocation() {
116  // Query CGF so the location isn't overwritten when location updates are
117  // temporarily disabled (for C++ default function arguments)
118  if (CGF)
119    CGF->Builder.SetCurrentDebugLocation(std::move(OriginalLocation));
120}
121
122void CGDebugInfo::setLocation(SourceLocation Loc) {
123  // If the new location isn't valid return.
124  if (Loc.isInvalid())
125    return;
126
127  CurLoc = CGM.getContext().getSourceManager().getExpansionLoc(Loc);
128
129  // If we've changed files in the middle of a lexical scope go ahead
130  // and create a new lexical scope with file node if it's different
131  // from the one in the scope.
132  if (LexicalBlockStack.empty())
133    return;
134
135  SourceManager &SM = CGM.getContext().getSourceManager();
136  auto *Scope = cast<llvm::DIScope>(LexicalBlockStack.back());
137  PresumedLoc PCLoc = SM.getPresumedLoc(CurLoc);
138
139  if (PCLoc.isInvalid() || Scope->getFilename() == PCLoc.getFilename())
140    return;
141
142  if (auto *LBF = dyn_cast<llvm::DILexicalBlockFile>(Scope)) {
143    LexicalBlockStack.pop_back();
144    LexicalBlockStack.emplace_back(DBuilder.createLexicalBlockFile(
145        LBF->getScope(), getOrCreateFile(CurLoc)));
146  } else if (isa<llvm::DILexicalBlock>(Scope) ||
147             isa<llvm::DISubprogram>(Scope)) {
148    LexicalBlockStack.pop_back();
149    LexicalBlockStack.emplace_back(
150        DBuilder.createLexicalBlockFile(Scope, getOrCreateFile(CurLoc)));
151  }
152}
153
154llvm::DIScope *CGDebugInfo::getDeclContextDescriptor(const Decl *D) {
155  llvm::DIScope *Mod = getParentModuleOrNull(D);
156  return getContextDescriptor(cast<Decl>(D->getDeclContext()),
157                              Mod ? Mod : TheCU);
158}
159
160llvm::DIScope *CGDebugInfo::getContextDescriptor(const Decl *Context,
161                                                 llvm::DIScope *Default) {
162  if (!Context)
163    return Default;
164
165  auto I = RegionMap.find(Context);
166  if (I != RegionMap.end()) {
167    llvm::Metadata *V = I->second;
168    return dyn_cast_or_null<llvm::DIScope>(V);
169  }
170
171  // Check namespace.
172  if (const NamespaceDecl *NSDecl = dyn_cast<NamespaceDecl>(Context))
173    return getOrCreateNameSpace(NSDecl);
174
175  if (const RecordDecl *RDecl = dyn_cast<RecordDecl>(Context))
176    if (!RDecl->isDependentType())
177      return getOrCreateType(CGM.getContext().getTypeDeclType(RDecl),
178                             getOrCreateMainFile());
179  return Default;
180}
181
182StringRef CGDebugInfo::getFunctionName(const FunctionDecl *FD) {
183  assert(FD && "Invalid FunctionDecl!");
184  IdentifierInfo *FII = FD->getIdentifier();
185  FunctionTemplateSpecializationInfo *Info =
186      FD->getTemplateSpecializationInfo();
187
188  // Emit the unqualified name in normal operation. LLVM and the debugger can
189  // compute the fully qualified name from the scope chain. If we're only
190  // emitting line table info, there won't be any scope chains, so emit the
191  // fully qualified name here so that stack traces are more accurate.
192  // FIXME: Do this when emitting DWARF as well as when emitting CodeView after
193  // evaluating the size impact.
194  bool UseQualifiedName = DebugKind == codegenoptions::DebugLineTablesOnly &&
195                          CGM.getCodeGenOpts().EmitCodeView;
196
197  if (!Info && FII && !UseQualifiedName)
198    return FII->getName();
199
200  SmallString<128> NS;
201  llvm::raw_svector_ostream OS(NS);
202  PrintingPolicy Policy(CGM.getLangOpts());
203  Policy.MSVCFormatting = CGM.getCodeGenOpts().EmitCodeView;
204  if (!UseQualifiedName)
205    FD->printName(OS);
206  else
207    FD->printQualifiedName(OS, Policy);
208
209  // Add any template specialization args.
210  if (Info) {
211    const TemplateArgumentList *TArgs = Info->TemplateArguments;
212    TemplateSpecializationType::PrintTemplateArgumentList(OS, TArgs->asArray(),
213                                                          Policy);
214  }
215
216  // Copy this name on the side and use its reference.
217  return internString(OS.str());
218}
219
220StringRef CGDebugInfo::getObjCMethodName(const ObjCMethodDecl *OMD) {
221  SmallString<256> MethodName;
222  llvm::raw_svector_ostream OS(MethodName);
223  OS << (OMD->isInstanceMethod() ? '-' : '+') << '[';
224  const DeclContext *DC = OMD->getDeclContext();
225  if (const ObjCImplementationDecl *OID =
226          dyn_cast<const ObjCImplementationDecl>(DC)) {
227    OS << OID->getName();
228  } else if (const ObjCInterfaceDecl *OID =
229                 dyn_cast<const ObjCInterfaceDecl>(DC)) {
230    OS << OID->getName();
231  } else if (const ObjCCategoryDecl *OC = dyn_cast<ObjCCategoryDecl>(DC)) {
232    if (OC->IsClassExtension()) {
233      OS << OC->getClassInterface()->getName();
234    } else {
235      OS << ((const NamedDecl *)OC)->getIdentifier()->getNameStart() << '('
236         << OC->getIdentifier()->getNameStart() << ')';
237    }
238  } else if (const ObjCCategoryImplDecl *OCD =
239                 dyn_cast<const ObjCCategoryImplDecl>(DC)) {
240    OS << ((const NamedDecl *)OCD)->getIdentifier()->getNameStart() << '('
241       << OCD->getIdentifier()->getNameStart() << ')';
242  } else if (isa<ObjCProtocolDecl>(DC)) {
243    // We can extract the type of the class from the self pointer.
244    if (ImplicitParamDecl *SelfDecl = OMD->getSelfDecl()) {
245      QualType ClassTy =
246          cast<ObjCObjectPointerType>(SelfDecl->getType())->getPointeeType();
247      ClassTy.print(OS, PrintingPolicy(LangOptions()));
248    }
249  }
250  OS << ' ' << OMD->getSelector().getAsString() << ']';
251
252  return internString(OS.str());
253}
254
255StringRef CGDebugInfo::getSelectorName(Selector S) {
256  return internString(S.getAsString());
257}
258
259StringRef CGDebugInfo::getClassName(const RecordDecl *RD) {
260  if (isa<ClassTemplateSpecializationDecl>(RD)) {
261    SmallString<128> Name;
262    llvm::raw_svector_ostream OS(Name);
263    RD->getNameForDiagnostic(OS, CGM.getContext().getPrintingPolicy(),
264                             /*Qualified*/ false);
265
266    // Copy this name on the side and use its reference.
267    return internString(Name);
268  }
269
270  // quick optimization to avoid having to intern strings that are already
271  // stored reliably elsewhere
272  if (const IdentifierInfo *II = RD->getIdentifier())
273    return II->getName();
274
275  // The CodeView printer in LLVM wants to see the names of unnamed types: it is
276  // used to reconstruct the fully qualified type names.
277  if (CGM.getCodeGenOpts().EmitCodeView) {
278    if (const TypedefNameDecl *D = RD->getTypedefNameForAnonDecl()) {
279      assert(RD->getDeclContext() == D->getDeclContext() &&
280             "Typedef should not be in another decl context!");
281      assert(D->getDeclName().getAsIdentifierInfo() &&
282             "Typedef was not named!");
283      return D->getDeclName().getAsIdentifierInfo()->getName();
284    }
285
286    if (CGM.getLangOpts().CPlusPlus) {
287      StringRef Name;
288
289      ASTContext &Context = CGM.getContext();
290      if (const DeclaratorDecl *DD = Context.getDeclaratorForUnnamedTagDecl(RD))
291        // Anonymous types without a name for linkage purposes have their
292        // declarator mangled in if they have one.
293        Name = DD->getName();
294      else if (const TypedefNameDecl *TND =
295                   Context.getTypedefNameForUnnamedTagDecl(RD))
296        // Anonymous types without a name for linkage purposes have their
297        // associate typedef mangled in if they have one.
298        Name = TND->getName();
299
300      if (!Name.empty()) {
301        SmallString<256> UnnamedType("<unnamed-type-");
302        UnnamedType += Name;
303        UnnamedType += '>';
304        return internString(UnnamedType);
305      }
306    }
307  }
308
309  return StringRef();
310}
311
312llvm::DIFile *CGDebugInfo::getOrCreateFile(SourceLocation Loc) {
313  if (!Loc.isValid())
314    // If Location is not valid then use main input file.
315    return DBuilder.createFile(remapDIPath(TheCU->getFilename()),
316                               remapDIPath(TheCU->getDirectory()));
317
318  SourceManager &SM = CGM.getContext().getSourceManager();
319  PresumedLoc PLoc = SM.getPresumedLoc(Loc);
320
321  if (PLoc.isInvalid() || StringRef(PLoc.getFilename()).empty())
322    // If the location is not valid then use main input file.
323    return DBuilder.createFile(remapDIPath(TheCU->getFilename()),
324                               remapDIPath(TheCU->getDirectory()));
325
326  // Cache the results.
327  const char *fname = PLoc.getFilename();
328  auto it = DIFileCache.find(fname);
329
330  if (it != DIFileCache.end()) {
331    // Verify that the information still exists.
332    if (llvm::Metadata *V = it->second)
333      return cast<llvm::DIFile>(V);
334  }
335
336  llvm::DIFile *F = DBuilder.createFile(remapDIPath(PLoc.getFilename()),
337                                        remapDIPath(getCurrentDirname()));
338
339  DIFileCache[fname].reset(F);
340  return F;
341}
342
343llvm::DIFile *CGDebugInfo::getOrCreateMainFile() {
344  return DBuilder.createFile(remapDIPath(TheCU->getFilename()),
345                             remapDIPath(TheCU->getDirectory()));
346}
347
348std::string CGDebugInfo::remapDIPath(StringRef Path) const {
349  for (const auto &Entry : DebugPrefixMap)
350    if (Path.startswith(Entry.first))
351      return (Twine(Entry.second) + Path.substr(Entry.first.size())).str();
352  return Path.str();
353}
354
355unsigned CGDebugInfo::getLineNumber(SourceLocation Loc) {
356  if (Loc.isInvalid() && CurLoc.isInvalid())
357    return 0;
358  SourceManager &SM = CGM.getContext().getSourceManager();
359  PresumedLoc PLoc = SM.getPresumedLoc(Loc.isValid() ? Loc : CurLoc);
360  return PLoc.isValid() ? PLoc.getLine() : 0;
361}
362
363unsigned CGDebugInfo::getColumnNumber(SourceLocation Loc, bool Force) {
364  // We may not want column information at all.
365  if (!Force && !CGM.getCodeGenOpts().DebugColumnInfo)
366    return 0;
367
368  // If the location is invalid then use the current column.
369  if (Loc.isInvalid() && CurLoc.isInvalid())
370    return 0;
371  SourceManager &SM = CGM.getContext().getSourceManager();
372  PresumedLoc PLoc = SM.getPresumedLoc(Loc.isValid() ? Loc : CurLoc);
373  return PLoc.isValid() ? PLoc.getColumn() : 0;
374}
375
376StringRef CGDebugInfo::getCurrentDirname() {
377  if (!CGM.getCodeGenOpts().DebugCompilationDir.empty())
378    return CGM.getCodeGenOpts().DebugCompilationDir;
379
380  if (!CWDName.empty())
381    return CWDName;
382  SmallString<256> CWD;
383  llvm::sys::fs::current_path(CWD);
384  return CWDName = internString(CWD);
385}
386
387void CGDebugInfo::CreateCompileUnit() {
388
389  // Should we be asking the SourceManager for the main file name, instead of
390  // accepting it as an argument? This just causes the main file name to
391  // mismatch with source locations and create extra lexical scopes or
392  // mismatched debug info (a CU with a DW_AT_file of "-", because that's what
393  // the driver passed, but functions/other things have DW_AT_file of "<stdin>"
394  // because that's what the SourceManager says)
395
396  // Get absolute path name.
397  SourceManager &SM = CGM.getContext().getSourceManager();
398  std::string MainFileName = CGM.getCodeGenOpts().MainFileName;
399  if (MainFileName.empty())
400    MainFileName = "<stdin>";
401
402  // The main file name provided via the "-main-file-name" option contains just
403  // the file name itself with no path information. This file name may have had
404  // a relative path, so we look into the actual file entry for the main
405  // file to determine the real absolute path for the file.
406  std::string MainFileDir;
407  if (const FileEntry *MainFile = SM.getFileEntryForID(SM.getMainFileID())) {
408    MainFileDir = remapDIPath(MainFile->getDir()->getName());
409    if (MainFileDir != ".") {
410      llvm::SmallString<1024> MainFileDirSS(MainFileDir);
411      llvm::sys::path::append(MainFileDirSS, MainFileName);
412      MainFileName = MainFileDirSS.str();
413    }
414  }
415
416  llvm::dwarf::SourceLanguage LangTag;
417  const LangOptions &LO = CGM.getLangOpts();
418  if (LO.CPlusPlus) {
419    if (LO.ObjC1)
420      LangTag = llvm::dwarf::DW_LANG_ObjC_plus_plus;
421    else
422      LangTag = llvm::dwarf::DW_LANG_C_plus_plus;
423  } else if (LO.ObjC1) {
424    LangTag = llvm::dwarf::DW_LANG_ObjC;
425  } else if (LO.RenderScript) {
426    LangTag = llvm::dwarf::DW_LANG_GOOGLE_RenderScript;
427  } else if (LO.C99) {
428    LangTag = llvm::dwarf::DW_LANG_C99;
429  } else {
430    LangTag = llvm::dwarf::DW_LANG_C89;
431  }
432
433  std::string Producer = getClangFullVersion();
434
435  // Figure out which version of the ObjC runtime we have.
436  unsigned RuntimeVers = 0;
437  if (LO.ObjC1)
438    RuntimeVers = LO.ObjCRuntime.isNonFragile() ? 2 : 1;
439
440  llvm::DICompileUnit::DebugEmissionKind EmissionKind;
441  switch (DebugKind) {
442  case codegenoptions::NoDebugInfo:
443  case codegenoptions::LocTrackingOnly:
444    EmissionKind = llvm::DICompileUnit::NoDebug;
445    break;
446  case codegenoptions::DebugLineTablesOnly:
447    EmissionKind = llvm::DICompileUnit::LineTablesOnly;
448    break;
449  case codegenoptions::LimitedDebugInfo:
450  case codegenoptions::FullDebugInfo:
451    EmissionKind = llvm::DICompileUnit::FullDebug;
452    break;
453  }
454
455  // Create new compile unit.
456  // FIXME - Eliminate TheCU.
457  TheCU = DBuilder.createCompileUnit(
458      LangTag, remapDIPath(MainFileName), remapDIPath(getCurrentDirname()),
459      Producer, LO.Optimize, CGM.getCodeGenOpts().DwarfDebugFlags, RuntimeVers,
460      CGM.getCodeGenOpts().SplitDwarfFile, EmissionKind, 0 /* DWOid */);
461}
462
463llvm::DIType *CGDebugInfo::CreateType(const BuiltinType *BT) {
464  llvm::dwarf::TypeKind Encoding;
465  StringRef BTName;
466  switch (BT->getKind()) {
467#define BUILTIN_TYPE(Id, SingletonId)
468#define PLACEHOLDER_TYPE(Id, SingletonId) case BuiltinType::Id:
469#include "clang/AST/BuiltinTypes.def"
470  case BuiltinType::Dependent:
471    llvm_unreachable("Unexpected builtin type");
472  case BuiltinType::NullPtr:
473    return DBuilder.createNullPtrType();
474  case BuiltinType::Void:
475    return nullptr;
476  case BuiltinType::ObjCClass:
477    if (!ClassTy)
478      ClassTy = DBuilder.createForwardDecl(llvm::dwarf::DW_TAG_structure_type,
479                                           "objc_class", TheCU,
480                                           getOrCreateMainFile(), 0);
481    return ClassTy;
482  case BuiltinType::ObjCId: {
483    // typedef struct objc_class *Class;
484    // typedef struct objc_object {
485    //  Class isa;
486    // } *id;
487
488    if (ObjTy)
489      return ObjTy;
490
491    if (!ClassTy)
492      ClassTy = DBuilder.createForwardDecl(llvm::dwarf::DW_TAG_structure_type,
493                                           "objc_class", TheCU,
494                                           getOrCreateMainFile(), 0);
495
496    unsigned Size = CGM.getContext().getTypeSize(CGM.getContext().VoidPtrTy);
497
498    auto *ISATy = DBuilder.createPointerType(ClassTy, Size);
499
500    ObjTy =
501        DBuilder.createStructType(TheCU, "objc_object", getOrCreateMainFile(),
502                                  0, 0, 0, 0, nullptr, llvm::DINodeArray());
503
504    DBuilder.replaceArrays(
505        ObjTy,
506        DBuilder.getOrCreateArray(&*DBuilder.createMemberType(
507            ObjTy, "isa", getOrCreateMainFile(), 0, Size, 0, 0, 0, ISATy)));
508    return ObjTy;
509  }
510  case BuiltinType::ObjCSel: {
511    if (!SelTy)
512      SelTy = DBuilder.createForwardDecl(llvm::dwarf::DW_TAG_structure_type,
513                                         "objc_selector", TheCU,
514                                         getOrCreateMainFile(), 0);
515    return SelTy;
516  }
517
518#define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
519  case BuiltinType::Id: \
520    return getOrCreateStructPtrType("opencl_" #ImgType "_" #Suffix "_t", \
521                                    SingletonId);
522#include "clang/Basic/OpenCLImageTypes.def"
523  case BuiltinType::OCLSampler:
524    return DBuilder.createBasicType(
525        "opencl_sampler_t", CGM.getContext().getTypeSize(BT),
526        CGM.getContext().getTypeAlign(BT), llvm::dwarf::DW_ATE_unsigned);
527  case BuiltinType::OCLEvent:
528    return getOrCreateStructPtrType("opencl_event_t", OCLEventDITy);
529  case BuiltinType::OCLClkEvent:
530    return getOrCreateStructPtrType("opencl_clk_event_t", OCLClkEventDITy);
531  case BuiltinType::OCLQueue:
532    return getOrCreateStructPtrType("opencl_queue_t", OCLQueueDITy);
533  case BuiltinType::OCLNDRange:
534    return getOrCreateStructPtrType("opencl_ndrange_t", OCLNDRangeDITy);
535  case BuiltinType::OCLReserveID:
536    return getOrCreateStructPtrType("opencl_reserve_id_t", OCLReserveIDDITy);
537
538  case BuiltinType::UChar:
539  case BuiltinType::Char_U:
540    Encoding = llvm::dwarf::DW_ATE_unsigned_char;
541    break;
542  case BuiltinType::Char_S:
543  case BuiltinType::SChar:
544    Encoding = llvm::dwarf::DW_ATE_signed_char;
545    break;
546  case BuiltinType::Char16:
547  case BuiltinType::Char32:
548    Encoding = llvm::dwarf::DW_ATE_UTF;
549    break;
550  case BuiltinType::UShort:
551  case BuiltinType::UInt:
552  case BuiltinType::UInt128:
553  case BuiltinType::ULong:
554  case BuiltinType::WChar_U:
555  case BuiltinType::ULongLong:
556    Encoding = llvm::dwarf::DW_ATE_unsigned;
557    break;
558  case BuiltinType::Short:
559  case BuiltinType::Int:
560  case BuiltinType::Int128:
561  case BuiltinType::Long:
562  case BuiltinType::WChar_S:
563  case BuiltinType::LongLong:
564    Encoding = llvm::dwarf::DW_ATE_signed;
565    break;
566  case BuiltinType::Bool:
567    Encoding = llvm::dwarf::DW_ATE_boolean;
568    break;
569  case BuiltinType::Half:
570  case BuiltinType::Float:
571  case BuiltinType::LongDouble:
572  case BuiltinType::Float128:
573  case BuiltinType::Double:
574    // FIXME: For targets where long double and __float128 have the same size,
575    // they are currently indistinguishable in the debugger without some
576    // special treatment. However, there is currently no consensus on encoding
577    // and this should be updated once a DWARF encoding exists for distinct
578    // floating point types of the same size.
579    Encoding = llvm::dwarf::DW_ATE_float;
580    break;
581  }
582
583  switch (BT->getKind()) {
584  case BuiltinType::Long:
585    BTName = "long int";
586    break;
587  case BuiltinType::LongLong:
588    BTName = "long long int";
589    break;
590  case BuiltinType::ULong:
591    BTName = "long unsigned int";
592    break;
593  case BuiltinType::ULongLong:
594    BTName = "long long unsigned int";
595    break;
596  default:
597    BTName = BT->getName(CGM.getLangOpts());
598    break;
599  }
600  // Bit size, align and offset of the type.
601  uint64_t Size = CGM.getContext().getTypeSize(BT);
602  uint64_t Align = CGM.getContext().getTypeAlign(BT);
603  return DBuilder.createBasicType(BTName, Size, Align, Encoding);
604}
605
606llvm::DIType *CGDebugInfo::CreateType(const ComplexType *Ty) {
607  // Bit size, align and offset of the type.
608  llvm::dwarf::TypeKind Encoding = llvm::dwarf::DW_ATE_complex_float;
609  if (Ty->isComplexIntegerType())
610    Encoding = llvm::dwarf::DW_ATE_lo_user;
611
612  uint64_t Size = CGM.getContext().getTypeSize(Ty);
613  uint64_t Align = CGM.getContext().getTypeAlign(Ty);
614  return DBuilder.createBasicType("complex", Size, Align, Encoding);
615}
616
617llvm::DIType *CGDebugInfo::CreateQualifiedType(QualType Ty,
618                                               llvm::DIFile *Unit) {
619  QualifierCollector Qc;
620  const Type *T = Qc.strip(Ty);
621
622  // Ignore these qualifiers for now.
623  Qc.removeObjCGCAttr();
624  Qc.removeAddressSpace();
625  Qc.removeObjCLifetime();
626
627  // We will create one Derived type for one qualifier and recurse to handle any
628  // additional ones.
629  llvm::dwarf::Tag Tag;
630  if (Qc.hasConst()) {
631    Tag = llvm::dwarf::DW_TAG_const_type;
632    Qc.removeConst();
633  } else if (Qc.hasVolatile()) {
634    Tag = llvm::dwarf::DW_TAG_volatile_type;
635    Qc.removeVolatile();
636  } else if (Qc.hasRestrict()) {
637    Tag = llvm::dwarf::DW_TAG_restrict_type;
638    Qc.removeRestrict();
639  } else {
640    assert(Qc.empty() && "Unknown type qualifier for debug info");
641    return getOrCreateType(QualType(T, 0), Unit);
642  }
643
644  auto *FromTy = getOrCreateType(Qc.apply(CGM.getContext(), T), Unit);
645
646  // No need to fill in the Name, Line, Size, Alignment, Offset in case of
647  // CVR derived types.
648  return DBuilder.createQualifiedType(Tag, FromTy);
649}
650
651llvm::DIType *CGDebugInfo::CreateType(const ObjCObjectPointerType *Ty,
652                                      llvm::DIFile *Unit) {
653
654  // The frontend treats 'id' as a typedef to an ObjCObjectType,
655  // whereas 'id<protocol>' is treated as an ObjCPointerType. For the
656  // debug info, we want to emit 'id' in both cases.
657  if (Ty->isObjCQualifiedIdType())
658    return getOrCreateType(CGM.getContext().getObjCIdType(), Unit);
659
660  return CreatePointerLikeType(llvm::dwarf::DW_TAG_pointer_type, Ty,
661                               Ty->getPointeeType(), Unit);
662}
663
664llvm::DIType *CGDebugInfo::CreateType(const PointerType *Ty,
665                                      llvm::DIFile *Unit) {
666  return CreatePointerLikeType(llvm::dwarf::DW_TAG_pointer_type, Ty,
667                               Ty->getPointeeType(), Unit);
668}
669
670/// \return whether a C++ mangling exists for the type defined by TD.
671static bool hasCXXMangling(const TagDecl *TD, llvm::DICompileUnit *TheCU) {
672  switch (TheCU->getSourceLanguage()) {
673  case llvm::dwarf::DW_LANG_C_plus_plus:
674    return true;
675  case llvm::dwarf::DW_LANG_ObjC_plus_plus:
676    return isa<CXXRecordDecl>(TD) || isa<EnumDecl>(TD);
677  default:
678    return false;
679  }
680}
681
682/// In C++ mode, types have linkage, so we can rely on the ODR and
683/// on their mangled names, if they're external.
684static SmallString<256> getUniqueTagTypeName(const TagType *Ty,
685                                             CodeGenModule &CGM,
686                                             llvm::DICompileUnit *TheCU) {
687  SmallString<256> FullName;
688  const TagDecl *TD = Ty->getDecl();
689
690  if (!hasCXXMangling(TD, TheCU) || !TD->isExternallyVisible())
691    return FullName;
692
693  // TODO: This is using the RTTI name. Is there a better way to get
694  // a unique string for a type?
695  llvm::raw_svector_ostream Out(FullName);
696  CGM.getCXXABI().getMangleContext().mangleCXXRTTIName(QualType(Ty, 0), Out);
697  return FullName;
698}
699
700/// \return the approproate DWARF tag for a composite type.
701static llvm::dwarf::Tag getTagForRecord(const RecordDecl *RD) {
702   llvm::dwarf::Tag Tag;
703  if (RD->isStruct() || RD->isInterface())
704    Tag = llvm::dwarf::DW_TAG_structure_type;
705  else if (RD->isUnion())
706    Tag = llvm::dwarf::DW_TAG_union_type;
707  else {
708    // FIXME: This could be a struct type giving a default visibility different
709    // than C++ class type, but needs llvm metadata changes first.
710    assert(RD->isClass());
711    Tag = llvm::dwarf::DW_TAG_class_type;
712  }
713  return Tag;
714}
715
716llvm::DICompositeType *
717CGDebugInfo::getOrCreateRecordFwdDecl(const RecordType *Ty,
718                                      llvm::DIScope *Ctx) {
719  const RecordDecl *RD = Ty->getDecl();
720  if (llvm::DIType *T = getTypeOrNull(CGM.getContext().getRecordType(RD)))
721    return cast<llvm::DICompositeType>(T);
722  llvm::DIFile *DefUnit = getOrCreateFile(RD->getLocation());
723  unsigned Line = getLineNumber(RD->getLocation());
724  StringRef RDName = getClassName(RD);
725
726  uint64_t Size = 0;
727  uint64_t Align = 0;
728
729  const RecordDecl *D = RD->getDefinition();
730  if (D && D->isCompleteDefinition()) {
731    Size = CGM.getContext().getTypeSize(Ty);
732    Align = CGM.getContext().getTypeAlign(Ty);
733  }
734
735  // Create the type.
736  SmallString<256> FullName = getUniqueTagTypeName(Ty, CGM, TheCU);
737  llvm::DICompositeType *RetTy = DBuilder.createReplaceableCompositeType(
738      getTagForRecord(RD), RDName, Ctx, DefUnit, Line, 0, Size, Align,
739      llvm::DINode::FlagFwdDecl, FullName);
740  ReplaceMap.emplace_back(
741      std::piecewise_construct, std::make_tuple(Ty),
742      std::make_tuple(static_cast<llvm::Metadata *>(RetTy)));
743  return RetTy;
744}
745
746llvm::DIType *CGDebugInfo::CreatePointerLikeType(llvm::dwarf::Tag Tag,
747                                                 const Type *Ty,
748                                                 QualType PointeeTy,
749                                                 llvm::DIFile *Unit) {
750  // Bit size, align and offset of the type.
751  // Size is always the size of a pointer. We can't use getTypeSize here
752  // because that does not return the correct value for references.
753  unsigned AS = CGM.getContext().getTargetAddressSpace(PointeeTy);
754  uint64_t Size = CGM.getTarget().getPointerWidth(AS);
755  uint64_t Align = CGM.getContext().getTypeAlign(Ty);
756
757  if (Tag == llvm::dwarf::DW_TAG_reference_type ||
758      Tag == llvm::dwarf::DW_TAG_rvalue_reference_type)
759    return DBuilder.createReferenceType(Tag, getOrCreateType(PointeeTy, Unit),
760                                        Size, Align);
761  else
762    return DBuilder.createPointerType(getOrCreateType(PointeeTy, Unit), Size,
763                                      Align);
764}
765
766llvm::DIType *CGDebugInfo::getOrCreateStructPtrType(StringRef Name,
767                                                    llvm::DIType *&Cache) {
768  if (Cache)
769    return Cache;
770  Cache = DBuilder.createForwardDecl(llvm::dwarf::DW_TAG_structure_type, Name,
771                                     TheCU, getOrCreateMainFile(), 0);
772  unsigned Size = CGM.getContext().getTypeSize(CGM.getContext().VoidPtrTy);
773  Cache = DBuilder.createPointerType(Cache, Size);
774  return Cache;
775}
776
777llvm::DIType *CGDebugInfo::CreateType(const BlockPointerType *Ty,
778                                      llvm::DIFile *Unit) {
779  SmallVector<llvm::Metadata *, 8> EltTys;
780  QualType FType;
781  uint64_t FieldSize, FieldOffset;
782  unsigned FieldAlign;
783  llvm::DINodeArray Elements;
784
785  FieldOffset = 0;
786  FType = CGM.getContext().UnsignedLongTy;
787  EltTys.push_back(CreateMemberType(Unit, FType, "reserved", &FieldOffset));
788  EltTys.push_back(CreateMemberType(Unit, FType, "Size", &FieldOffset));
789
790  Elements = DBuilder.getOrCreateArray(EltTys);
791  EltTys.clear();
792
793  unsigned Flags = llvm::DINode::FlagAppleBlock;
794  unsigned LineNo = 0;
795
796  auto *EltTy =
797      DBuilder.createStructType(Unit, "__block_descriptor", nullptr, LineNo,
798                                FieldOffset, 0, Flags, nullptr, Elements);
799
800  // Bit size, align and offset of the type.
801  uint64_t Size = CGM.getContext().getTypeSize(Ty);
802
803  auto *DescTy = DBuilder.createPointerType(EltTy, Size);
804
805  FieldOffset = 0;
806  FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy);
807  EltTys.push_back(CreateMemberType(Unit, FType, "__isa", &FieldOffset));
808  FType = CGM.getContext().IntTy;
809  EltTys.push_back(CreateMemberType(Unit, FType, "__flags", &FieldOffset));
810  EltTys.push_back(CreateMemberType(Unit, FType, "__reserved", &FieldOffset));
811  FType = CGM.getContext().getPointerType(Ty->getPointeeType());
812  EltTys.push_back(CreateMemberType(Unit, FType, "__FuncPtr", &FieldOffset));
813
814  FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy);
815  FieldSize = CGM.getContext().getTypeSize(Ty);
816  FieldAlign = CGM.getContext().getTypeAlign(Ty);
817  EltTys.push_back(DBuilder.createMemberType(Unit, "__descriptor", nullptr, LineNo,
818                                             FieldSize, FieldAlign, FieldOffset,
819                                             0, DescTy));
820
821  FieldOffset += FieldSize;
822  Elements = DBuilder.getOrCreateArray(EltTys);
823
824  // The __block_literal_generic structs are marked with a special
825  // DW_AT_APPLE_BLOCK attribute and are an implementation detail only
826  // the debugger needs to know about. To allow type uniquing, emit
827  // them without a name or a location.
828  EltTy =
829      DBuilder.createStructType(Unit, "", nullptr, LineNo,
830                                FieldOffset, 0, Flags, nullptr, Elements);
831
832  return DBuilder.createPointerType(EltTy, Size);
833}
834
835llvm::DIType *CGDebugInfo::CreateType(const TemplateSpecializationType *Ty,
836                                      llvm::DIFile *Unit) {
837  assert(Ty->isTypeAlias());
838  llvm::DIType *Src = getOrCreateType(Ty->getAliasedType(), Unit);
839
840  SmallString<128> NS;
841  llvm::raw_svector_ostream OS(NS);
842  Ty->getTemplateName().print(OS, CGM.getContext().getPrintingPolicy(),
843                              /*qualified*/ false);
844
845  TemplateSpecializationType::PrintTemplateArgumentList(
846      OS, Ty->template_arguments(),
847      CGM.getContext().getPrintingPolicy());
848
849  TypeAliasDecl *AliasDecl = cast<TypeAliasTemplateDecl>(
850      Ty->getTemplateName().getAsTemplateDecl())->getTemplatedDecl();
851
852  SourceLocation Loc = AliasDecl->getLocation();
853  return DBuilder.createTypedef(Src, OS.str(), getOrCreateFile(Loc),
854                                getLineNumber(Loc),
855                                getDeclContextDescriptor(AliasDecl));
856}
857
858llvm::DIType *CGDebugInfo::CreateType(const TypedefType *Ty,
859                                      llvm::DIFile *Unit) {
860  // We don't set size information, but do specify where the typedef was
861  // declared.
862  SourceLocation Loc = Ty->getDecl()->getLocation();
863
864  // Typedefs are derived from some other type.
865  return DBuilder.createTypedef(
866      getOrCreateType(Ty->getDecl()->getUnderlyingType(), Unit),
867      Ty->getDecl()->getName(), getOrCreateFile(Loc), getLineNumber(Loc),
868      getDeclContextDescriptor(Ty->getDecl()));
869}
870
871static unsigned getDwarfCC(CallingConv CC) {
872  switch (CC) {
873  case CC_C:
874    // Avoid emitting DW_AT_calling_convention if the C convention was used.
875    return 0;
876
877  case CC_X86StdCall:
878    return llvm::dwarf::DW_CC_BORLAND_stdcall;
879  case CC_X86FastCall:
880    return llvm::dwarf::DW_CC_BORLAND_msfastcall;
881  case CC_X86ThisCall:
882    return llvm::dwarf::DW_CC_BORLAND_thiscall;
883  case CC_X86VectorCall:
884    return llvm::dwarf::DW_CC_LLVM_vectorcall;
885  case CC_X86Pascal:
886    return llvm::dwarf::DW_CC_BORLAND_pascal;
887
888  // FIXME: Create new DW_CC_ codes for these calling conventions.
889  case CC_X86_64Win64:
890  case CC_X86_64SysV:
891  case CC_AAPCS:
892  case CC_AAPCS_VFP:
893  case CC_IntelOclBicc:
894  case CC_SpirFunction:
895  case CC_OpenCLKernel:
896  case CC_Swift:
897  case CC_PreserveMost:
898  case CC_PreserveAll:
899    return 0;
900  }
901  return 0;
902}
903
904llvm::DIType *CGDebugInfo::CreateType(const FunctionType *Ty,
905                                      llvm::DIFile *Unit) {
906  SmallVector<llvm::Metadata *, 16> EltTys;
907
908  // Add the result type at least.
909  EltTys.push_back(getOrCreateType(Ty->getReturnType(), Unit));
910
911  // Set up remainder of arguments if there is a prototype.
912  // otherwise emit it as a variadic function.
913  if (isa<FunctionNoProtoType>(Ty))
914    EltTys.push_back(DBuilder.createUnspecifiedParameter());
915  else if (const FunctionProtoType *FPT = dyn_cast<FunctionProtoType>(Ty)) {
916    for (unsigned i = 0, e = FPT->getNumParams(); i != e; ++i)
917      EltTys.push_back(getOrCreateType(FPT->getParamType(i), Unit));
918    if (FPT->isVariadic())
919      EltTys.push_back(DBuilder.createUnspecifiedParameter());
920  }
921
922  llvm::DITypeRefArray EltTypeArray = DBuilder.getOrCreateTypeArray(EltTys);
923  return DBuilder.createSubroutineType(EltTypeArray, 0,
924                                       getDwarfCC(Ty->getCallConv()));
925}
926
927/// Convert an AccessSpecifier into the corresponding DINode flag.
928/// As an optimization, return 0 if the access specifier equals the
929/// default for the containing type.
930static unsigned getAccessFlag(AccessSpecifier Access, const RecordDecl *RD) {
931  AccessSpecifier Default = clang::AS_none;
932  if (RD && RD->isClass())
933    Default = clang::AS_private;
934  else if (RD && (RD->isStruct() || RD->isUnion()))
935    Default = clang::AS_public;
936
937  if (Access == Default)
938    return 0;
939
940  switch (Access) {
941  case clang::AS_private:
942    return llvm::DINode::FlagPrivate;
943  case clang::AS_protected:
944    return llvm::DINode::FlagProtected;
945  case clang::AS_public:
946    return llvm::DINode::FlagPublic;
947  case clang::AS_none:
948    return 0;
949  }
950  llvm_unreachable("unexpected access enumerator");
951}
952
953llvm::DIType *CGDebugInfo::createBitFieldType(const FieldDecl *BitFieldDecl,
954                                              llvm::DIScope *RecordTy,
955                                              const RecordDecl *RD) {
956  StringRef Name = BitFieldDecl->getName();
957  QualType Ty = BitFieldDecl->getType();
958  SourceLocation Loc = BitFieldDecl->getLocation();
959  llvm::DIFile *VUnit = getOrCreateFile(Loc);
960  llvm::DIType *DebugType = getOrCreateType(Ty, VUnit);
961
962  // Get the location for the field.
963  llvm::DIFile *File = getOrCreateFile(Loc);
964  unsigned Line = getLineNumber(Loc);
965
966  const CGBitFieldInfo &BitFieldInfo =
967      CGM.getTypes().getCGRecordLayout(RD).getBitFieldInfo(BitFieldDecl);
968  uint64_t SizeInBits = BitFieldInfo.Size;
969  assert(SizeInBits > 0 && "found named 0-width bitfield");
970  unsigned AlignInBits = CGM.getContext().getTypeAlign(Ty);
971  uint64_t StorageOffsetInBits =
972      CGM.getContext().toBits(BitFieldInfo.StorageOffset);
973  uint64_t OffsetInBits = StorageOffsetInBits + BitFieldInfo.Offset;
974  unsigned Flags = getAccessFlag(BitFieldDecl->getAccess(), RD);
975  return DBuilder.createBitFieldMemberType(
976      RecordTy, Name, File, Line, SizeInBits, AlignInBits, OffsetInBits,
977      StorageOffsetInBits, Flags, DebugType);
978}
979
980llvm::DIType *
981CGDebugInfo::createFieldType(StringRef name, QualType type, SourceLocation loc,
982                             AccessSpecifier AS, uint64_t offsetInBits,
983                             llvm::DIFile *tunit, llvm::DIScope *scope,
984                             const RecordDecl *RD) {
985  llvm::DIType *debugType = getOrCreateType(type, tunit);
986
987  // Get the location for the field.
988  llvm::DIFile *file = getOrCreateFile(loc);
989  unsigned line = getLineNumber(loc);
990
991  uint64_t SizeInBits = 0;
992  unsigned AlignInBits = 0;
993  if (!type->isIncompleteArrayType()) {
994    TypeInfo TI = CGM.getContext().getTypeInfo(type);
995    SizeInBits = TI.Width;
996    AlignInBits = TI.Align;
997  }
998
999  unsigned flags = getAccessFlag(AS, RD);
1000  return DBuilder.createMemberType(scope, name, file, line, SizeInBits,
1001                                   AlignInBits, offsetInBits, flags, debugType);
1002}
1003
1004void CGDebugInfo::CollectRecordLambdaFields(
1005    const CXXRecordDecl *CXXDecl, SmallVectorImpl<llvm::Metadata *> &elements,
1006    llvm::DIType *RecordTy) {
1007  // For C++11 Lambdas a Field will be the same as a Capture, but the Capture
1008  // has the name and the location of the variable so we should iterate over
1009  // both concurrently.
1010  const ASTRecordLayout &layout = CGM.getContext().getASTRecordLayout(CXXDecl);
1011  RecordDecl::field_iterator Field = CXXDecl->field_begin();
1012  unsigned fieldno = 0;
1013  for (CXXRecordDecl::capture_const_iterator I = CXXDecl->captures_begin(),
1014                                             E = CXXDecl->captures_end();
1015       I != E; ++I, ++Field, ++fieldno) {
1016    const LambdaCapture &C = *I;
1017    if (C.capturesVariable()) {
1018      SourceLocation Loc = C.getLocation();
1019      assert(!Field->isBitField() && "lambdas don't have bitfield members!");
1020      VarDecl *V = C.getCapturedVar();
1021      StringRef VName = V->getName();
1022      llvm::DIFile *VUnit = getOrCreateFile(Loc);
1023      llvm::DIType *FieldType = createFieldType(
1024          VName, Field->getType(), Loc, Field->getAccess(),
1025          layout.getFieldOffset(fieldno), VUnit, RecordTy, CXXDecl);
1026      elements.push_back(FieldType);
1027    } else if (C.capturesThis()) {
1028      // TODO: Need to handle 'this' in some way by probably renaming the
1029      // this of the lambda class and having a field member of 'this' or
1030      // by using AT_object_pointer for the function and having that be
1031      // used as 'this' for semantic references.
1032      FieldDecl *f = *Field;
1033      llvm::DIFile *VUnit = getOrCreateFile(f->getLocation());
1034      QualType type = f->getType();
1035      llvm::DIType *fieldType = createFieldType(
1036          "this", type, f->getLocation(), f->getAccess(),
1037          layout.getFieldOffset(fieldno), VUnit, RecordTy, CXXDecl);
1038
1039      elements.push_back(fieldType);
1040    }
1041  }
1042}
1043
1044llvm::DIDerivedType *
1045CGDebugInfo::CreateRecordStaticField(const VarDecl *Var, llvm::DIType *RecordTy,
1046                                     const RecordDecl *RD) {
1047  // Create the descriptor for the static variable, with or without
1048  // constant initializers.
1049  Var = Var->getCanonicalDecl();
1050  llvm::DIFile *VUnit = getOrCreateFile(Var->getLocation());
1051  llvm::DIType *VTy = getOrCreateType(Var->getType(), VUnit);
1052
1053  unsigned LineNumber = getLineNumber(Var->getLocation());
1054  StringRef VName = Var->getName();
1055  llvm::Constant *C = nullptr;
1056  if (Var->getInit()) {
1057    const APValue *Value = Var->evaluateValue();
1058    if (Value) {
1059      if (Value->isInt())
1060        C = llvm::ConstantInt::get(CGM.getLLVMContext(), Value->getInt());
1061      if (Value->isFloat())
1062        C = llvm::ConstantFP::get(CGM.getLLVMContext(), Value->getFloat());
1063    }
1064  }
1065
1066  unsigned Flags = getAccessFlag(Var->getAccess(), RD);
1067  llvm::DIDerivedType *GV = DBuilder.createStaticMemberType(
1068      RecordTy, VName, VUnit, LineNumber, VTy, Flags, C);
1069  StaticDataMemberCache[Var->getCanonicalDecl()].reset(GV);
1070  return GV;
1071}
1072
1073void CGDebugInfo::CollectRecordNormalField(
1074    const FieldDecl *field, uint64_t OffsetInBits, llvm::DIFile *tunit,
1075    SmallVectorImpl<llvm::Metadata *> &elements, llvm::DIType *RecordTy,
1076    const RecordDecl *RD) {
1077  StringRef name = field->getName();
1078  QualType type = field->getType();
1079
1080  // Ignore unnamed fields unless they're anonymous structs/unions.
1081  if (name.empty() && !type->isRecordType())
1082    return;
1083
1084  llvm::DIType *FieldType;
1085  if (field->isBitField()) {
1086    FieldType = createBitFieldType(field, RecordTy, RD);
1087  } else {
1088    FieldType =
1089        createFieldType(name, type, field->getLocation(), field->getAccess(),
1090                        OffsetInBits, tunit, RecordTy, RD);
1091  }
1092
1093  elements.push_back(FieldType);
1094}
1095
1096void CGDebugInfo::CollectRecordFields(
1097    const RecordDecl *record, llvm::DIFile *tunit,
1098    SmallVectorImpl<llvm::Metadata *> &elements,
1099    llvm::DICompositeType *RecordTy) {
1100  const CXXRecordDecl *CXXDecl = dyn_cast<CXXRecordDecl>(record);
1101
1102  if (CXXDecl && CXXDecl->isLambda())
1103    CollectRecordLambdaFields(CXXDecl, elements, RecordTy);
1104  else {
1105    const ASTRecordLayout &layout = CGM.getContext().getASTRecordLayout(record);
1106
1107    // Field number for non-static fields.
1108    unsigned fieldNo = 0;
1109
1110    // Static and non-static members should appear in the same order as
1111    // the corresponding declarations in the source program.
1112    for (const auto *I : record->decls())
1113      if (const auto *V = dyn_cast<VarDecl>(I)) {
1114        if (V->hasAttr<NoDebugAttr>())
1115          continue;
1116        // Reuse the existing static member declaration if one exists
1117        auto MI = StaticDataMemberCache.find(V->getCanonicalDecl());
1118        if (MI != StaticDataMemberCache.end()) {
1119          assert(MI->second &&
1120                 "Static data member declaration should still exist");
1121          elements.push_back(MI->second);
1122        } else {
1123          auto Field = CreateRecordStaticField(V, RecordTy, record);
1124          elements.push_back(Field);
1125        }
1126      } else if (const auto *field = dyn_cast<FieldDecl>(I)) {
1127        CollectRecordNormalField(field, layout.getFieldOffset(fieldNo), tunit,
1128                                 elements, RecordTy, record);
1129
1130        // Bump field number for next field.
1131        ++fieldNo;
1132      }
1133  }
1134}
1135
1136llvm::DISubroutineType *
1137CGDebugInfo::getOrCreateMethodType(const CXXMethodDecl *Method,
1138                                   llvm::DIFile *Unit) {
1139  const FunctionProtoType *Func = Method->getType()->getAs<FunctionProtoType>();
1140  if (Method->isStatic())
1141    return cast_or_null<llvm::DISubroutineType>(
1142        getOrCreateType(QualType(Func, 0), Unit));
1143  return getOrCreateInstanceMethodType(Method->getThisType(CGM.getContext()),
1144                                       Func, Unit);
1145}
1146
1147llvm::DISubroutineType *CGDebugInfo::getOrCreateInstanceMethodType(
1148    QualType ThisPtr, const FunctionProtoType *Func, llvm::DIFile *Unit) {
1149  // Add "this" pointer.
1150  llvm::DITypeRefArray Args(
1151      cast<llvm::DISubroutineType>(getOrCreateType(QualType(Func, 0), Unit))
1152          ->getTypeArray());
1153  assert(Args.size() && "Invalid number of arguments!");
1154
1155  SmallVector<llvm::Metadata *, 16> Elts;
1156
1157  // First element is always return type. For 'void' functions it is NULL.
1158  Elts.push_back(Args[0]);
1159
1160  // "this" pointer is always first argument.
1161  const CXXRecordDecl *RD = ThisPtr->getPointeeCXXRecordDecl();
1162  if (isa<ClassTemplateSpecializationDecl>(RD)) {
1163    // Create pointer type directly in this case.
1164    const PointerType *ThisPtrTy = cast<PointerType>(ThisPtr);
1165    QualType PointeeTy = ThisPtrTy->getPointeeType();
1166    unsigned AS = CGM.getContext().getTargetAddressSpace(PointeeTy);
1167    uint64_t Size = CGM.getTarget().getPointerWidth(AS);
1168    uint64_t Align = CGM.getContext().getTypeAlign(ThisPtrTy);
1169    llvm::DIType *PointeeType = getOrCreateType(PointeeTy, Unit);
1170    llvm::DIType *ThisPtrType =
1171        DBuilder.createPointerType(PointeeType, Size, Align);
1172    TypeCache[ThisPtr.getAsOpaquePtr()].reset(ThisPtrType);
1173    // TODO: This and the artificial type below are misleading, the
1174    // types aren't artificial the argument is, but the current
1175    // metadata doesn't represent that.
1176    ThisPtrType = DBuilder.createObjectPointerType(ThisPtrType);
1177    Elts.push_back(ThisPtrType);
1178  } else {
1179    llvm::DIType *ThisPtrType = getOrCreateType(ThisPtr, Unit);
1180    TypeCache[ThisPtr.getAsOpaquePtr()].reset(ThisPtrType);
1181    ThisPtrType = DBuilder.createObjectPointerType(ThisPtrType);
1182    Elts.push_back(ThisPtrType);
1183  }
1184
1185  // Copy rest of the arguments.
1186  for (unsigned i = 1, e = Args.size(); i != e; ++i)
1187    Elts.push_back(Args[i]);
1188
1189  llvm::DITypeRefArray EltTypeArray = DBuilder.getOrCreateTypeArray(Elts);
1190
1191  unsigned Flags = 0;
1192  if (Func->getExtProtoInfo().RefQualifier == RQ_LValue)
1193    Flags |= llvm::DINode::FlagLValueReference;
1194  if (Func->getExtProtoInfo().RefQualifier == RQ_RValue)
1195    Flags |= llvm::DINode::FlagRValueReference;
1196
1197  return DBuilder.createSubroutineType(EltTypeArray, Flags,
1198                                       getDwarfCC(Func->getCallConv()));
1199}
1200
1201/// isFunctionLocalClass - Return true if CXXRecordDecl is defined
1202/// inside a function.
1203static bool isFunctionLocalClass(const CXXRecordDecl *RD) {
1204  if (const CXXRecordDecl *NRD = dyn_cast<CXXRecordDecl>(RD->getDeclContext()))
1205    return isFunctionLocalClass(NRD);
1206  if (isa<FunctionDecl>(RD->getDeclContext()))
1207    return true;
1208  return false;
1209}
1210
1211llvm::DISubprogram *CGDebugInfo::CreateCXXMemberFunction(
1212    const CXXMethodDecl *Method, llvm::DIFile *Unit, llvm::DIType *RecordTy) {
1213  bool IsCtorOrDtor =
1214      isa<CXXConstructorDecl>(Method) || isa<CXXDestructorDecl>(Method);
1215
1216  StringRef MethodName = getFunctionName(Method);
1217  llvm::DISubroutineType *MethodTy = getOrCreateMethodType(Method, Unit);
1218
1219  // Since a single ctor/dtor corresponds to multiple functions, it doesn't
1220  // make sense to give a single ctor/dtor a linkage name.
1221  StringRef MethodLinkageName;
1222  // FIXME: 'isFunctionLocalClass' seems like an arbitrary/unintentional
1223  // property to use here. It may've been intended to model "is non-external
1224  // type" but misses cases of non-function-local but non-external classes such
1225  // as those in anonymous namespaces as well as the reverse - external types
1226  // that are function local, such as those in (non-local) inline functions.
1227  if (!IsCtorOrDtor && !isFunctionLocalClass(Method->getParent()))
1228    MethodLinkageName = CGM.getMangledName(Method);
1229
1230  // Get the location for the method.
1231  llvm::DIFile *MethodDefUnit = nullptr;
1232  unsigned MethodLine = 0;
1233  if (!Method->isImplicit()) {
1234    MethodDefUnit = getOrCreateFile(Method->getLocation());
1235    MethodLine = getLineNumber(Method->getLocation());
1236  }
1237
1238  // Collect virtual method info.
1239  llvm::DIType *ContainingType = nullptr;
1240  unsigned Virtuality = 0;
1241  unsigned VIndex = 0;
1242  unsigned Flags = 0;
1243  int ThisAdjustment = 0;
1244
1245  if (Method->isVirtual()) {
1246    if (Method->isPure())
1247      Virtuality = llvm::dwarf::DW_VIRTUALITY_pure_virtual;
1248    else
1249      Virtuality = llvm::dwarf::DW_VIRTUALITY_virtual;
1250
1251    if (CGM.getTarget().getCXXABI().isItaniumFamily()) {
1252      // It doesn't make sense to give a virtual destructor a vtable index,
1253      // since a single destructor has two entries in the vtable.
1254      if (!isa<CXXDestructorDecl>(Method))
1255        VIndex = CGM.getItaniumVTableContext().getMethodVTableIndex(Method);
1256    } else {
1257      // Emit MS ABI vftable information.  There is only one entry for the
1258      // deleting dtor.
1259      const auto *DD = dyn_cast<CXXDestructorDecl>(Method);
1260      GlobalDecl GD = DD ? GlobalDecl(DD, Dtor_Deleting) : GlobalDecl(Method);
1261      MicrosoftVTableContext::MethodVFTableLocation ML =
1262          CGM.getMicrosoftVTableContext().getMethodVFTableLocation(GD);
1263      VIndex = ML.Index;
1264
1265      // CodeView only records the vftable offset in the class that introduces
1266      // the virtual method. This is possible because, unlike Itanium, the MS
1267      // C++ ABI does not include all virtual methods from non-primary bases in
1268      // the vtable for the most derived class. For example, if C inherits from
1269      // A and B, C's primary vftable will not include B's virtual methods.
1270      if (Method->begin_overridden_methods() == Method->end_overridden_methods())
1271        Flags |= llvm::DINode::FlagIntroducedVirtual;
1272
1273      // The 'this' adjustment accounts for both the virtual and non-virtual
1274      // portions of the adjustment. Presumably the debugger only uses it when
1275      // it knows the dynamic type of an object.
1276      ThisAdjustment = CGM.getCXXABI()
1277                           .getVirtualFunctionPrologueThisAdjustment(GD)
1278                           .getQuantity();
1279    }
1280    ContainingType = RecordTy;
1281  }
1282
1283  if (Method->isImplicit())
1284    Flags |= llvm::DINode::FlagArtificial;
1285  Flags |= getAccessFlag(Method->getAccess(), Method->getParent());
1286  if (const CXXConstructorDecl *CXXC = dyn_cast<CXXConstructorDecl>(Method)) {
1287    if (CXXC->isExplicit())
1288      Flags |= llvm::DINode::FlagExplicit;
1289  } else if (const CXXConversionDecl *CXXC =
1290                 dyn_cast<CXXConversionDecl>(Method)) {
1291    if (CXXC->isExplicit())
1292      Flags |= llvm::DINode::FlagExplicit;
1293  }
1294  if (Method->hasPrototype())
1295    Flags |= llvm::DINode::FlagPrototyped;
1296  if (Method->getRefQualifier() == RQ_LValue)
1297    Flags |= llvm::DINode::FlagLValueReference;
1298  if (Method->getRefQualifier() == RQ_RValue)
1299    Flags |= llvm::DINode::FlagRValueReference;
1300
1301  llvm::DINodeArray TParamsArray = CollectFunctionTemplateParams(Method, Unit);
1302  llvm::DISubprogram *SP = DBuilder.createMethod(
1303      RecordTy, MethodName, MethodLinkageName, MethodDefUnit, MethodLine,
1304      MethodTy, /*isLocalToUnit=*/false, /*isDefinition=*/false, Virtuality,
1305      VIndex, ThisAdjustment, ContainingType, Flags, CGM.getLangOpts().Optimize,
1306      TParamsArray.get());
1307
1308  SPCache[Method->getCanonicalDecl()].reset(SP);
1309
1310  return SP;
1311}
1312
1313void CGDebugInfo::CollectCXXMemberFunctions(
1314    const CXXRecordDecl *RD, llvm::DIFile *Unit,
1315    SmallVectorImpl<llvm::Metadata *> &EltTys, llvm::DIType *RecordTy) {
1316
1317  // Since we want more than just the individual member decls if we
1318  // have templated functions iterate over every declaration to gather
1319  // the functions.
1320  for (const auto *I : RD->decls()) {
1321    const auto *Method = dyn_cast<CXXMethodDecl>(I);
1322    // If the member is implicit, don't add it to the member list. This avoids
1323    // the member being added to type units by LLVM, while still allowing it
1324    // to be emitted into the type declaration/reference inside the compile
1325    // unit.
1326    // Ditto 'nodebug' methods, for consistency with CodeGenFunction.cpp.
1327    // FIXME: Handle Using(Shadow?)Decls here to create
1328    // DW_TAG_imported_declarations inside the class for base decls brought into
1329    // derived classes. GDB doesn't seem to notice/leverage these when I tried
1330    // it, so I'm not rushing to fix this. (GCC seems to produce them, if
1331    // referenced)
1332    if (!Method || Method->isImplicit() || Method->hasAttr<NoDebugAttr>())
1333      continue;
1334
1335    if (Method->getType()->getAs<FunctionProtoType>()->getContainedAutoType())
1336      continue;
1337
1338    // Reuse the existing member function declaration if it exists.
1339    // It may be associated with the declaration of the type & should be
1340    // reused as we're building the definition.
1341    //
1342    // This situation can arise in the vtable-based debug info reduction where
1343    // implicit members are emitted in a non-vtable TU.
1344    auto MI = SPCache.find(Method->getCanonicalDecl());
1345    EltTys.push_back(MI == SPCache.end()
1346                         ? CreateCXXMemberFunction(Method, Unit, RecordTy)
1347                         : static_cast<llvm::Metadata *>(MI->second));
1348  }
1349}
1350
1351void CGDebugInfo::CollectCXXBases(const CXXRecordDecl *RD, llvm::DIFile *Unit,
1352                                  SmallVectorImpl<llvm::Metadata *> &EltTys,
1353                                  llvm::DIType *RecordTy) {
1354  const ASTRecordLayout &RL = CGM.getContext().getASTRecordLayout(RD);
1355  for (const auto &BI : RD->bases()) {
1356    unsigned BFlags = 0;
1357    uint64_t BaseOffset;
1358
1359    const CXXRecordDecl *Base =
1360        cast<CXXRecordDecl>(BI.getType()->getAs<RecordType>()->getDecl());
1361
1362    if (BI.isVirtual()) {
1363      if (CGM.getTarget().getCXXABI().isItaniumFamily()) {
1364        // virtual base offset offset is -ve. The code generator emits dwarf
1365        // expression where it expects +ve number.
1366        BaseOffset = 0 - CGM.getItaniumVTableContext()
1367                             .getVirtualBaseOffsetOffset(RD, Base)
1368                             .getQuantity();
1369      } else {
1370        // In the MS ABI, store the vbtable offset, which is analogous to the
1371        // vbase offset offset in Itanium.
1372        BaseOffset =
1373            4 * CGM.getMicrosoftVTableContext().getVBTableIndex(RD, Base);
1374      }
1375      BFlags = llvm::DINode::FlagVirtual;
1376    } else
1377      BaseOffset = CGM.getContext().toBits(RL.getBaseClassOffset(Base));
1378    // FIXME: Inconsistent units for BaseOffset. It is in bytes when
1379    // BI->isVirtual() and bits when not.
1380
1381    BFlags |= getAccessFlag(BI.getAccessSpecifier(), RD);
1382    llvm::DIType *DTy = DBuilder.createInheritance(
1383        RecordTy, getOrCreateType(BI.getType(), Unit), BaseOffset, BFlags);
1384    EltTys.push_back(DTy);
1385  }
1386}
1387
1388llvm::DINodeArray
1389CGDebugInfo::CollectTemplateParams(const TemplateParameterList *TPList,
1390                                   ArrayRef<TemplateArgument> TAList,
1391                                   llvm::DIFile *Unit) {
1392  SmallVector<llvm::Metadata *, 16> TemplateParams;
1393  for (unsigned i = 0, e = TAList.size(); i != e; ++i) {
1394    const TemplateArgument &TA = TAList[i];
1395    StringRef Name;
1396    if (TPList)
1397      Name = TPList->getParam(i)->getName();
1398    switch (TA.getKind()) {
1399    case TemplateArgument::Type: {
1400      llvm::DIType *TTy = getOrCreateType(TA.getAsType(), Unit);
1401      TemplateParams.push_back(
1402          DBuilder.createTemplateTypeParameter(TheCU, Name, TTy));
1403    } break;
1404    case TemplateArgument::Integral: {
1405      llvm::DIType *TTy = getOrCreateType(TA.getIntegralType(), Unit);
1406      TemplateParams.push_back(DBuilder.createTemplateValueParameter(
1407          TheCU, Name, TTy,
1408          llvm::ConstantInt::get(CGM.getLLVMContext(), TA.getAsIntegral())));
1409    } break;
1410    case TemplateArgument::Declaration: {
1411      const ValueDecl *D = TA.getAsDecl();
1412      QualType T = TA.getParamTypeForDecl().getDesugaredType(CGM.getContext());
1413      llvm::DIType *TTy = getOrCreateType(T, Unit);
1414      llvm::Constant *V = nullptr;
1415      const CXXMethodDecl *MD;
1416      // Variable pointer template parameters have a value that is the address
1417      // of the variable.
1418      if (const auto *VD = dyn_cast<VarDecl>(D))
1419        V = CGM.GetAddrOfGlobalVar(VD);
1420      // Member function pointers have special support for building them, though
1421      // this is currently unsupported in LLVM CodeGen.
1422      else if ((MD = dyn_cast<CXXMethodDecl>(D)) && MD->isInstance())
1423        V = CGM.getCXXABI().EmitMemberFunctionPointer(MD);
1424      else if (const auto *FD = dyn_cast<FunctionDecl>(D))
1425        V = CGM.GetAddrOfFunction(FD);
1426      // Member data pointers have special handling too to compute the fixed
1427      // offset within the object.
1428      else if (const auto *MPT = dyn_cast<MemberPointerType>(T.getTypePtr())) {
1429        // These five lines (& possibly the above member function pointer
1430        // handling) might be able to be refactored to use similar code in
1431        // CodeGenModule::getMemberPointerConstant
1432        uint64_t fieldOffset = CGM.getContext().getFieldOffset(D);
1433        CharUnits chars =
1434            CGM.getContext().toCharUnitsFromBits((int64_t)fieldOffset);
1435        V = CGM.getCXXABI().EmitMemberDataPointer(MPT, chars);
1436      }
1437      TemplateParams.push_back(DBuilder.createTemplateValueParameter(
1438          TheCU, Name, TTy,
1439          cast_or_null<llvm::Constant>(V->stripPointerCasts())));
1440    } break;
1441    case TemplateArgument::NullPtr: {
1442      QualType T = TA.getNullPtrType();
1443      llvm::DIType *TTy = getOrCreateType(T, Unit);
1444      llvm::Constant *V = nullptr;
1445      // Special case member data pointer null values since they're actually -1
1446      // instead of zero.
1447      if (const MemberPointerType *MPT =
1448              dyn_cast<MemberPointerType>(T.getTypePtr()))
1449        // But treat member function pointers as simple zero integers because
1450        // it's easier than having a special case in LLVM's CodeGen. If LLVM
1451        // CodeGen grows handling for values of non-null member function
1452        // pointers then perhaps we could remove this special case and rely on
1453        // EmitNullMemberPointer for member function pointers.
1454        if (MPT->isMemberDataPointer())
1455          V = CGM.getCXXABI().EmitNullMemberPointer(MPT);
1456      if (!V)
1457        V = llvm::ConstantInt::get(CGM.Int8Ty, 0);
1458      TemplateParams.push_back(DBuilder.createTemplateValueParameter(
1459          TheCU, Name, TTy, cast<llvm::Constant>(V)));
1460    } break;
1461    case TemplateArgument::Template:
1462      TemplateParams.push_back(DBuilder.createTemplateTemplateParameter(
1463          TheCU, Name, nullptr,
1464          TA.getAsTemplate().getAsTemplateDecl()->getQualifiedNameAsString()));
1465      break;
1466    case TemplateArgument::Pack:
1467      TemplateParams.push_back(DBuilder.createTemplateParameterPack(
1468          TheCU, Name, nullptr,
1469          CollectTemplateParams(nullptr, TA.getPackAsArray(), Unit)));
1470      break;
1471    case TemplateArgument::Expression: {
1472      const Expr *E = TA.getAsExpr();
1473      QualType T = E->getType();
1474      if (E->isGLValue())
1475        T = CGM.getContext().getLValueReferenceType(T);
1476      llvm::Constant *V = CGM.EmitConstantExpr(E, T);
1477      assert(V && "Expression in template argument isn't constant");
1478      llvm::DIType *TTy = getOrCreateType(T, Unit);
1479      TemplateParams.push_back(DBuilder.createTemplateValueParameter(
1480          TheCU, Name, TTy, cast<llvm::Constant>(V->stripPointerCasts())));
1481    } break;
1482    // And the following should never occur:
1483    case TemplateArgument::TemplateExpansion:
1484    case TemplateArgument::Null:
1485      llvm_unreachable(
1486          "These argument types shouldn't exist in concrete types");
1487    }
1488  }
1489  return DBuilder.getOrCreateArray(TemplateParams);
1490}
1491
1492llvm::DINodeArray
1493CGDebugInfo::CollectFunctionTemplateParams(const FunctionDecl *FD,
1494                                           llvm::DIFile *Unit) {
1495  if (FD->getTemplatedKind() ==
1496      FunctionDecl::TK_FunctionTemplateSpecialization) {
1497    const TemplateParameterList *TList = FD->getTemplateSpecializationInfo()
1498                                             ->getTemplate()
1499                                             ->getTemplateParameters();
1500    return CollectTemplateParams(
1501        TList, FD->getTemplateSpecializationArgs()->asArray(), Unit);
1502  }
1503  return llvm::DINodeArray();
1504}
1505
1506llvm::DINodeArray CGDebugInfo::CollectCXXTemplateParams(
1507    const ClassTemplateSpecializationDecl *TSpecial, llvm::DIFile *Unit) {
1508  // Always get the full list of parameters, not just the ones from
1509  // the specialization.
1510  TemplateParameterList *TPList =
1511      TSpecial->getSpecializedTemplate()->getTemplateParameters();
1512  const TemplateArgumentList &TAList = TSpecial->getTemplateArgs();
1513  return CollectTemplateParams(TPList, TAList.asArray(), Unit);
1514}
1515
1516llvm::DIType *CGDebugInfo::getOrCreateVTablePtrType(llvm::DIFile *Unit) {
1517  if (VTablePtrType)
1518    return VTablePtrType;
1519
1520  ASTContext &Context = CGM.getContext();
1521
1522  /* Function type */
1523  llvm::Metadata *STy = getOrCreateType(Context.IntTy, Unit);
1524  llvm::DITypeRefArray SElements = DBuilder.getOrCreateTypeArray(STy);
1525  llvm::DIType *SubTy = DBuilder.createSubroutineType(SElements);
1526  unsigned Size = Context.getTypeSize(Context.VoidPtrTy);
1527  llvm::DIType *vtbl_ptr_type =
1528      DBuilder.createPointerType(SubTy, Size, 0, "__vtbl_ptr_type");
1529  VTablePtrType = DBuilder.createPointerType(vtbl_ptr_type, Size);
1530  return VTablePtrType;
1531}
1532
1533StringRef CGDebugInfo::getVTableName(const CXXRecordDecl *RD) {
1534  // Copy the gdb compatible name on the side and use its reference.
1535  return internString("_vptr$", RD->getNameAsString());
1536}
1537
1538void CGDebugInfo::CollectVTableInfo(const CXXRecordDecl *RD, llvm::DIFile *Unit,
1539                                    SmallVectorImpl<llvm::Metadata *> &EltTys) {
1540  const ASTRecordLayout &RL = CGM.getContext().getASTRecordLayout(RD);
1541
1542  // If there is a primary base then it will hold vtable info.
1543  if (RL.getPrimaryBase())
1544    return;
1545
1546  // If this class is not dynamic then there is not any vtable info to collect.
1547  if (!RD->isDynamicClass())
1548    return;
1549
1550  unsigned Size = CGM.getContext().getTypeSize(CGM.getContext().VoidPtrTy);
1551  llvm::DIType *VPTR = DBuilder.createMemberType(
1552      Unit, getVTableName(RD), Unit, 0, Size, 0, 0,
1553      llvm::DINode::FlagArtificial, getOrCreateVTablePtrType(Unit));
1554  EltTys.push_back(VPTR);
1555}
1556
1557llvm::DIType *CGDebugInfo::getOrCreateRecordType(QualType RTy,
1558                                                 SourceLocation Loc) {
1559  assert(DebugKind >= codegenoptions::LimitedDebugInfo);
1560  llvm::DIType *T = getOrCreateType(RTy, getOrCreateFile(Loc));
1561  return T;
1562}
1563
1564llvm::DIType *CGDebugInfo::getOrCreateInterfaceType(QualType D,
1565                                                    SourceLocation Loc) {
1566  return getOrCreateStandaloneType(D, Loc);
1567}
1568
1569llvm::DIType *CGDebugInfo::getOrCreateStandaloneType(QualType D,
1570                                                     SourceLocation Loc) {
1571  assert(DebugKind >= codegenoptions::LimitedDebugInfo);
1572  assert(!D.isNull() && "null type");
1573  llvm::DIType *T = getOrCreateType(D, getOrCreateFile(Loc));
1574  assert(T && "could not create debug info for type");
1575
1576  RetainedTypes.push_back(D.getAsOpaquePtr());
1577  return T;
1578}
1579
1580void CGDebugInfo::completeType(const EnumDecl *ED) {
1581  if (DebugKind <= codegenoptions::DebugLineTablesOnly)
1582    return;
1583  QualType Ty = CGM.getContext().getEnumType(ED);
1584  void *TyPtr = Ty.getAsOpaquePtr();
1585  auto I = TypeCache.find(TyPtr);
1586  if (I == TypeCache.end() || !cast<llvm::DIType>(I->second)->isForwardDecl())
1587    return;
1588  llvm::DIType *Res = CreateTypeDefinition(Ty->castAs<EnumType>());
1589  assert(!Res->isForwardDecl());
1590  TypeCache[TyPtr].reset(Res);
1591}
1592
1593void CGDebugInfo::completeType(const RecordDecl *RD) {
1594  if (DebugKind > codegenoptions::LimitedDebugInfo ||
1595      !CGM.getLangOpts().CPlusPlus)
1596    completeRequiredType(RD);
1597}
1598
1599void CGDebugInfo::completeRequiredType(const RecordDecl *RD) {
1600  if (DebugKind <= codegenoptions::DebugLineTablesOnly)
1601    return;
1602
1603  if (const CXXRecordDecl *CXXDecl = dyn_cast<CXXRecordDecl>(RD))
1604    if (CXXDecl->isDynamicClass())
1605      return;
1606
1607  if (DebugTypeExtRefs && RD->isFromASTFile())
1608    return;
1609
1610  QualType Ty = CGM.getContext().getRecordType(RD);
1611  llvm::DIType *T = getTypeOrNull(Ty);
1612  if (T && T->isForwardDecl())
1613    completeClassData(RD);
1614}
1615
1616void CGDebugInfo::completeClassData(const RecordDecl *RD) {
1617  if (DebugKind <= codegenoptions::DebugLineTablesOnly)
1618    return;
1619  QualType Ty = CGM.getContext().getRecordType(RD);
1620  void *TyPtr = Ty.getAsOpaquePtr();
1621  auto I = TypeCache.find(TyPtr);
1622  if (I != TypeCache.end() && !cast<llvm::DIType>(I->second)->isForwardDecl())
1623    return;
1624  llvm::DIType *Res = CreateTypeDefinition(Ty->castAs<RecordType>());
1625  assert(!Res->isForwardDecl());
1626  TypeCache[TyPtr].reset(Res);
1627}
1628
1629static bool hasExplicitMemberDefinition(CXXRecordDecl::method_iterator I,
1630                                        CXXRecordDecl::method_iterator End) {
1631  for (; I != End; ++I)
1632    if (FunctionDecl *Tmpl = I->getInstantiatedFromMemberFunction())
1633      if (!Tmpl->isImplicit() && Tmpl->isThisDeclarationADefinition() &&
1634          !I->getMemberSpecializationInfo()->isExplicitSpecialization())
1635        return true;
1636  return false;
1637}
1638
1639/// Does a type definition exist in an imported clang module?
1640static bool isDefinedInClangModule(const RecordDecl *RD) {
1641  if (!RD || !RD->isFromASTFile())
1642    return false;
1643  if (!RD->isExternallyVisible() && RD->getName().empty())
1644    return false;
1645  if (auto *CXXDecl = dyn_cast<CXXRecordDecl>(RD)) {
1646    assert(CXXDecl->isCompleteDefinition() && "incomplete record definition");
1647    if (CXXDecl->getTemplateSpecializationKind() != TSK_Undeclared)
1648      // Make sure the instantiation is actually in a module.
1649      if (CXXDecl->field_begin() != CXXDecl->field_end())
1650        return CXXDecl->field_begin()->isFromASTFile();
1651  }
1652
1653  return true;
1654}
1655
1656static bool shouldOmitDefinition(codegenoptions::DebugInfoKind DebugKind,
1657                                 bool DebugTypeExtRefs, const RecordDecl *RD,
1658                                 const LangOptions &LangOpts) {
1659  if (DebugTypeExtRefs && isDefinedInClangModule(RD->getDefinition()))
1660    return true;
1661
1662  if (DebugKind > codegenoptions::LimitedDebugInfo)
1663    return false;
1664
1665  if (!LangOpts.CPlusPlus)
1666    return false;
1667
1668  if (!RD->isCompleteDefinitionRequired())
1669    return true;
1670
1671  const CXXRecordDecl *CXXDecl = dyn_cast<CXXRecordDecl>(RD);
1672
1673  if (!CXXDecl)
1674    return false;
1675
1676  if (CXXDecl->hasDefinition() && CXXDecl->isDynamicClass())
1677    return true;
1678
1679  TemplateSpecializationKind Spec = TSK_Undeclared;
1680  if (const ClassTemplateSpecializationDecl *SD =
1681          dyn_cast<ClassTemplateSpecializationDecl>(RD))
1682    Spec = SD->getSpecializationKind();
1683
1684  if (Spec == TSK_ExplicitInstantiationDeclaration &&
1685      hasExplicitMemberDefinition(CXXDecl->method_begin(),
1686                                  CXXDecl->method_end()))
1687    return true;
1688
1689  return false;
1690}
1691
1692llvm::DIType *CGDebugInfo::CreateType(const RecordType *Ty) {
1693  RecordDecl *RD = Ty->getDecl();
1694  llvm::DIType *T = cast_or_null<llvm::DIType>(getTypeOrNull(QualType(Ty, 0)));
1695  if (T || shouldOmitDefinition(DebugKind, DebugTypeExtRefs, RD,
1696                                CGM.getLangOpts())) {
1697    if (!T)
1698      T = getOrCreateRecordFwdDecl(Ty, getDeclContextDescriptor(RD));
1699    return T;
1700  }
1701
1702  return CreateTypeDefinition(Ty);
1703}
1704
1705llvm::DIType *CGDebugInfo::CreateTypeDefinition(const RecordType *Ty) {
1706  RecordDecl *RD = Ty->getDecl();
1707
1708  // Get overall information about the record type for the debug info.
1709  llvm::DIFile *DefUnit = getOrCreateFile(RD->getLocation());
1710
1711  // Records and classes and unions can all be recursive.  To handle them, we
1712  // first generate a debug descriptor for the struct as a forward declaration.
1713  // Then (if it is a definition) we go through and get debug info for all of
1714  // its members.  Finally, we create a descriptor for the complete type (which
1715  // may refer to the forward decl if the struct is recursive) and replace all
1716  // uses of the forward declaration with the final definition.
1717  llvm::DICompositeType *FwdDecl = getOrCreateLimitedType(Ty, DefUnit);
1718
1719  const RecordDecl *D = RD->getDefinition();
1720  if (!D || !D->isCompleteDefinition())
1721    return FwdDecl;
1722
1723  if (const CXXRecordDecl *CXXDecl = dyn_cast<CXXRecordDecl>(RD))
1724    CollectContainingType(CXXDecl, FwdDecl);
1725
1726  // Push the struct on region stack.
1727  LexicalBlockStack.emplace_back(&*FwdDecl);
1728  RegionMap[Ty->getDecl()].reset(FwdDecl);
1729
1730  // Convert all the elements.
1731  SmallVector<llvm::Metadata *, 16> EltTys;
1732  // what about nested types?
1733
1734  // Note: The split of CXXDecl information here is intentional, the
1735  // gdb tests will depend on a certain ordering at printout. The debug
1736  // information offsets are still correct if we merge them all together
1737  // though.
1738  const CXXRecordDecl *CXXDecl = dyn_cast<CXXRecordDecl>(RD);
1739  if (CXXDecl) {
1740    CollectCXXBases(CXXDecl, DefUnit, EltTys, FwdDecl);
1741    CollectVTableInfo(CXXDecl, DefUnit, EltTys);
1742  }
1743
1744  // Collect data fields (including static variables and any initializers).
1745  CollectRecordFields(RD, DefUnit, EltTys, FwdDecl);
1746  if (CXXDecl)
1747    CollectCXXMemberFunctions(CXXDecl, DefUnit, EltTys, FwdDecl);
1748
1749  LexicalBlockStack.pop_back();
1750  RegionMap.erase(Ty->getDecl());
1751
1752  llvm::DINodeArray Elements = DBuilder.getOrCreateArray(EltTys);
1753  DBuilder.replaceArrays(FwdDecl, Elements);
1754
1755  if (FwdDecl->isTemporary())
1756    FwdDecl =
1757        llvm::MDNode::replaceWithPermanent(llvm::TempDICompositeType(FwdDecl));
1758
1759  RegionMap[Ty->getDecl()].reset(FwdDecl);
1760  return FwdDecl;
1761}
1762
1763llvm::DIType *CGDebugInfo::CreateType(const ObjCObjectType *Ty,
1764                                      llvm::DIFile *Unit) {
1765  // Ignore protocols.
1766  return getOrCreateType(Ty->getBaseType(), Unit);
1767}
1768
1769/// \return true if Getter has the default name for the property PD.
1770static bool hasDefaultGetterName(const ObjCPropertyDecl *PD,
1771                                 const ObjCMethodDecl *Getter) {
1772  assert(PD);
1773  if (!Getter)
1774    return true;
1775
1776  assert(Getter->getDeclName().isObjCZeroArgSelector());
1777  return PD->getName() ==
1778         Getter->getDeclName().getObjCSelector().getNameForSlot(0);
1779}
1780
1781/// \return true if Setter has the default name for the property PD.
1782static bool hasDefaultSetterName(const ObjCPropertyDecl *PD,
1783                                 const ObjCMethodDecl *Setter) {
1784  assert(PD);
1785  if (!Setter)
1786    return true;
1787
1788  assert(Setter->getDeclName().isObjCOneArgSelector());
1789  return SelectorTable::constructSetterName(PD->getName()) ==
1790         Setter->getDeclName().getObjCSelector().getNameForSlot(0);
1791}
1792
1793llvm::DIType *CGDebugInfo::CreateType(const ObjCInterfaceType *Ty,
1794                                      llvm::DIFile *Unit) {
1795  ObjCInterfaceDecl *ID = Ty->getDecl();
1796  if (!ID)
1797    return nullptr;
1798
1799  // Return a forward declaration if this type was imported from a clang module,
1800  // and this is not the compile unit with the implementation of the type (which
1801  // may contain hidden ivars).
1802  if (DebugTypeExtRefs && ID->isFromASTFile() && ID->getDefinition() &&
1803      !ID->getImplementation())
1804    return DBuilder.createForwardDecl(llvm::dwarf::DW_TAG_structure_type,
1805                                      ID->getName(),
1806                                      getDeclContextDescriptor(ID), Unit, 0);
1807
1808  // Get overall information about the record type for the debug info.
1809  llvm::DIFile *DefUnit = getOrCreateFile(ID->getLocation());
1810  unsigned Line = getLineNumber(ID->getLocation());
1811  auto RuntimeLang =
1812      static_cast<llvm::dwarf::SourceLanguage>(TheCU->getSourceLanguage());
1813
1814  // If this is just a forward declaration return a special forward-declaration
1815  // debug type since we won't be able to lay out the entire type.
1816  ObjCInterfaceDecl *Def = ID->getDefinition();
1817  if (!Def || !Def->getImplementation()) {
1818    llvm::DIScope *Mod = getParentModuleOrNull(ID);
1819    llvm::DIType *FwdDecl = DBuilder.createReplaceableCompositeType(
1820        llvm::dwarf::DW_TAG_structure_type, ID->getName(), Mod ? Mod : TheCU,
1821        DefUnit, Line, RuntimeLang);
1822    ObjCInterfaceCache.push_back(ObjCInterfaceCacheEntry(Ty, FwdDecl, Unit));
1823    return FwdDecl;
1824  }
1825
1826  return CreateTypeDefinition(Ty, Unit);
1827}
1828
1829llvm::DIModule *
1830CGDebugInfo::getOrCreateModuleRef(ExternalASTSource::ASTSourceDescriptor Mod,
1831                                  bool CreateSkeletonCU) {
1832  // Use the Module pointer as the key into the cache. This is a
1833  // nullptr if the "Module" is a PCH, which is safe because we don't
1834  // support chained PCH debug info, so there can only be a single PCH.
1835  const Module *M = Mod.getModuleOrNull();
1836  auto ModRef = ModuleCache.find(M);
1837  if (ModRef != ModuleCache.end())
1838    return cast<llvm::DIModule>(ModRef->second);
1839
1840  // Macro definitions that were defined with "-D" on the command line.
1841  SmallString<128> ConfigMacros;
1842  {
1843    llvm::raw_svector_ostream OS(ConfigMacros);
1844    const auto &PPOpts = CGM.getPreprocessorOpts();
1845    unsigned I = 0;
1846    // Translate the macro definitions back into a commmand line.
1847    for (auto &M : PPOpts.Macros) {
1848      if (++I > 1)
1849        OS << " ";
1850      const std::string &Macro = M.first;
1851      bool Undef = M.second;
1852      OS << "\"-" << (Undef ? 'U' : 'D');
1853      for (char c : Macro)
1854        switch (c) {
1855        case '\\' : OS << "\\\\"; break;
1856        case '"'  : OS << "\\\""; break;
1857        default: OS << c;
1858        }
1859      OS << '\"';
1860    }
1861  }
1862
1863  bool IsRootModule = M ? !M->Parent : true;
1864  if (CreateSkeletonCU && IsRootModule) {
1865    // PCH files don't have a signature field in the control block,
1866    // but LLVM detects skeleton CUs by looking for a non-zero DWO id.
1867    uint64_t Signature = Mod.getSignature() ? Mod.getSignature() : ~1ULL;
1868    llvm::DIBuilder DIB(CGM.getModule());
1869    DIB.createCompileUnit(TheCU->getSourceLanguage(), Mod.getModuleName(),
1870                          Mod.getPath(), TheCU->getProducer(), true,
1871                          StringRef(), 0, Mod.getASTFile(),
1872                          llvm::DICompileUnit::FullDebug, Signature);
1873    DIB.finalize();
1874  }
1875  llvm::DIModule *Parent =
1876      IsRootModule ? nullptr
1877                   : getOrCreateModuleRef(
1878                         ExternalASTSource::ASTSourceDescriptor(*M->Parent),
1879                         CreateSkeletonCU);
1880  llvm::DIModule *DIMod =
1881      DBuilder.createModule(Parent, Mod.getModuleName(), ConfigMacros,
1882                            Mod.getPath(), CGM.getHeaderSearchOpts().Sysroot);
1883  ModuleCache[M].reset(DIMod);
1884  return DIMod;
1885}
1886
1887llvm::DIType *CGDebugInfo::CreateTypeDefinition(const ObjCInterfaceType *Ty,
1888                                                llvm::DIFile *Unit) {
1889  ObjCInterfaceDecl *ID = Ty->getDecl();
1890  llvm::DIFile *DefUnit = getOrCreateFile(ID->getLocation());
1891  unsigned Line = getLineNumber(ID->getLocation());
1892  unsigned RuntimeLang = TheCU->getSourceLanguage();
1893
1894  // Bit size, align and offset of the type.
1895  uint64_t Size = CGM.getContext().getTypeSize(Ty);
1896  uint64_t Align = CGM.getContext().getTypeAlign(Ty);
1897
1898  unsigned Flags = 0;
1899  if (ID->getImplementation())
1900    Flags |= llvm::DINode::FlagObjcClassComplete;
1901
1902  llvm::DIScope *Mod = getParentModuleOrNull(ID);
1903  llvm::DICompositeType *RealDecl = DBuilder.createStructType(
1904      Mod ? Mod : Unit, ID->getName(), DefUnit, Line, Size, Align, Flags,
1905      nullptr, llvm::DINodeArray(), RuntimeLang);
1906
1907  QualType QTy(Ty, 0);
1908  TypeCache[QTy.getAsOpaquePtr()].reset(RealDecl);
1909
1910  // Push the struct on region stack.
1911  LexicalBlockStack.emplace_back(RealDecl);
1912  RegionMap[Ty->getDecl()].reset(RealDecl);
1913
1914  // Convert all the elements.
1915  SmallVector<llvm::Metadata *, 16> EltTys;
1916
1917  ObjCInterfaceDecl *SClass = ID->getSuperClass();
1918  if (SClass) {
1919    llvm::DIType *SClassTy =
1920        getOrCreateType(CGM.getContext().getObjCInterfaceType(SClass), Unit);
1921    if (!SClassTy)
1922      return nullptr;
1923
1924    llvm::DIType *InhTag = DBuilder.createInheritance(RealDecl, SClassTy, 0, 0);
1925    EltTys.push_back(InhTag);
1926  }
1927
1928  // Create entries for all of the properties.
1929  auto AddProperty = [&](const ObjCPropertyDecl *PD) {
1930    SourceLocation Loc = PD->getLocation();
1931    llvm::DIFile *PUnit = getOrCreateFile(Loc);
1932    unsigned PLine = getLineNumber(Loc);
1933    ObjCMethodDecl *Getter = PD->getGetterMethodDecl();
1934    ObjCMethodDecl *Setter = PD->getSetterMethodDecl();
1935    llvm::MDNode *PropertyNode = DBuilder.createObjCProperty(
1936        PD->getName(), PUnit, PLine,
1937        hasDefaultGetterName(PD, Getter) ? ""
1938                                         : getSelectorName(PD->getGetterName()),
1939        hasDefaultSetterName(PD, Setter) ? ""
1940                                         : getSelectorName(PD->getSetterName()),
1941        PD->getPropertyAttributes(), getOrCreateType(PD->getType(), PUnit));
1942    EltTys.push_back(PropertyNode);
1943  };
1944  {
1945    llvm::SmallPtrSet<const IdentifierInfo*, 16> PropertySet;
1946    for (const ObjCCategoryDecl *ClassExt : ID->known_extensions())
1947      for (auto *PD : ClassExt->properties()) {
1948        PropertySet.insert(PD->getIdentifier());
1949        AddProperty(PD);
1950      }
1951    for (const auto *PD : ID->properties()) {
1952      // Don't emit duplicate metadata for properties that were already in a
1953      // class extension.
1954      if (!PropertySet.insert(PD->getIdentifier()).second)
1955        continue;
1956      AddProperty(PD);
1957    }
1958  }
1959
1960  const ASTRecordLayout &RL = CGM.getContext().getASTObjCInterfaceLayout(ID);
1961  unsigned FieldNo = 0;
1962  for (ObjCIvarDecl *Field = ID->all_declared_ivar_begin(); Field;
1963       Field = Field->getNextIvar(), ++FieldNo) {
1964    llvm::DIType *FieldTy = getOrCreateType(Field->getType(), Unit);
1965    if (!FieldTy)
1966      return nullptr;
1967
1968    StringRef FieldName = Field->getName();
1969
1970    // Ignore unnamed fields.
1971    if (FieldName.empty())
1972      continue;
1973
1974    // Get the location for the field.
1975    llvm::DIFile *FieldDefUnit = getOrCreateFile(Field->getLocation());
1976    unsigned FieldLine = getLineNumber(Field->getLocation());
1977    QualType FType = Field->getType();
1978    uint64_t FieldSize = 0;
1979    unsigned FieldAlign = 0;
1980
1981    if (!FType->isIncompleteArrayType()) {
1982
1983      // Bit size, align and offset of the type.
1984      FieldSize = Field->isBitField()
1985                      ? Field->getBitWidthValue(CGM.getContext())
1986                      : CGM.getContext().getTypeSize(FType);
1987      FieldAlign = CGM.getContext().getTypeAlign(FType);
1988    }
1989
1990    uint64_t FieldOffset;
1991    if (CGM.getLangOpts().ObjCRuntime.isNonFragile()) {
1992      // We don't know the runtime offset of an ivar if we're using the
1993      // non-fragile ABI.  For bitfields, use the bit offset into the first
1994      // byte of storage of the bitfield.  For other fields, use zero.
1995      if (Field->isBitField()) {
1996        FieldOffset =
1997            CGM.getObjCRuntime().ComputeBitfieldBitOffset(CGM, ID, Field);
1998        FieldOffset %= CGM.getContext().getCharWidth();
1999      } else {
2000        FieldOffset = 0;
2001      }
2002    } else {
2003      FieldOffset = RL.getFieldOffset(FieldNo);
2004    }
2005
2006    unsigned Flags = 0;
2007    if (Field->getAccessControl() == ObjCIvarDecl::Protected)
2008      Flags = llvm::DINode::FlagProtected;
2009    else if (Field->getAccessControl() == ObjCIvarDecl::Private)
2010      Flags = llvm::DINode::FlagPrivate;
2011    else if (Field->getAccessControl() == ObjCIvarDecl::Public)
2012      Flags = llvm::DINode::FlagPublic;
2013
2014    llvm::MDNode *PropertyNode = nullptr;
2015    if (ObjCImplementationDecl *ImpD = ID->getImplementation()) {
2016      if (ObjCPropertyImplDecl *PImpD =
2017              ImpD->FindPropertyImplIvarDecl(Field->getIdentifier())) {
2018        if (ObjCPropertyDecl *PD = PImpD->getPropertyDecl()) {
2019          SourceLocation Loc = PD->getLocation();
2020          llvm::DIFile *PUnit = getOrCreateFile(Loc);
2021          unsigned PLine = getLineNumber(Loc);
2022          ObjCMethodDecl *Getter = PD->getGetterMethodDecl();
2023          ObjCMethodDecl *Setter = PD->getSetterMethodDecl();
2024          PropertyNode = DBuilder.createObjCProperty(
2025              PD->getName(), PUnit, PLine,
2026              hasDefaultGetterName(PD, Getter) ? "" : getSelectorName(
2027                                                          PD->getGetterName()),
2028              hasDefaultSetterName(PD, Setter) ? "" : getSelectorName(
2029                                                          PD->getSetterName()),
2030              PD->getPropertyAttributes(),
2031              getOrCreateType(PD->getType(), PUnit));
2032        }
2033      }
2034    }
2035    FieldTy = DBuilder.createObjCIVar(FieldName, FieldDefUnit, FieldLine,
2036                                      FieldSize, FieldAlign, FieldOffset, Flags,
2037                                      FieldTy, PropertyNode);
2038    EltTys.push_back(FieldTy);
2039  }
2040
2041  llvm::DINodeArray Elements = DBuilder.getOrCreateArray(EltTys);
2042  DBuilder.replaceArrays(RealDecl, Elements);
2043
2044  LexicalBlockStack.pop_back();
2045  return RealDecl;
2046}
2047
2048llvm::DIType *CGDebugInfo::CreateType(const VectorType *Ty,
2049                                      llvm::DIFile *Unit) {
2050  llvm::DIType *ElementTy = getOrCreateType(Ty->getElementType(), Unit);
2051  int64_t Count = Ty->getNumElements();
2052  if (Count == 0)
2053    // If number of elements are not known then this is an unbounded array.
2054    // Use Count == -1 to express such arrays.
2055    Count = -1;
2056
2057  llvm::Metadata *Subscript = DBuilder.getOrCreateSubrange(0, Count);
2058  llvm::DINodeArray SubscriptArray = DBuilder.getOrCreateArray(Subscript);
2059
2060  uint64_t Size = CGM.getContext().getTypeSize(Ty);
2061  uint64_t Align = CGM.getContext().getTypeAlign(Ty);
2062
2063  return DBuilder.createVectorType(Size, Align, ElementTy, SubscriptArray);
2064}
2065
2066llvm::DIType *CGDebugInfo::CreateType(const ArrayType *Ty, llvm::DIFile *Unit) {
2067  uint64_t Size;
2068  uint64_t Align;
2069
2070  // FIXME: make getTypeAlign() aware of VLAs and incomplete array types
2071  if (const VariableArrayType *VAT = dyn_cast<VariableArrayType>(Ty)) {
2072    Size = 0;
2073    Align =
2074        CGM.getContext().getTypeAlign(CGM.getContext().getBaseElementType(VAT));
2075  } else if (Ty->isIncompleteArrayType()) {
2076    Size = 0;
2077    if (Ty->getElementType()->isIncompleteType())
2078      Align = 0;
2079    else
2080      Align = CGM.getContext().getTypeAlign(Ty->getElementType());
2081  } else if (Ty->isIncompleteType()) {
2082    Size = 0;
2083    Align = 0;
2084  } else {
2085    // Size and align of the whole array, not the element type.
2086    Size = CGM.getContext().getTypeSize(Ty);
2087    Align = CGM.getContext().getTypeAlign(Ty);
2088  }
2089
2090  // Add the dimensions of the array.  FIXME: This loses CV qualifiers from
2091  // interior arrays, do we care?  Why aren't nested arrays represented the
2092  // obvious/recursive way?
2093  SmallVector<llvm::Metadata *, 8> Subscripts;
2094  QualType EltTy(Ty, 0);
2095  while ((Ty = dyn_cast<ArrayType>(EltTy))) {
2096    // If the number of elements is known, then count is that number. Otherwise,
2097    // it's -1. This allows us to represent a subrange with an array of 0
2098    // elements, like this:
2099    //
2100    //   struct foo {
2101    //     int x[0];
2102    //   };
2103    int64_t Count = -1; // Count == -1 is an unbounded array.
2104    if (const ConstantArrayType *CAT = dyn_cast<ConstantArrayType>(Ty))
2105      Count = CAT->getSize().getZExtValue();
2106
2107    // FIXME: Verify this is right for VLAs.
2108    Subscripts.push_back(DBuilder.getOrCreateSubrange(0, Count));
2109    EltTy = Ty->getElementType();
2110  }
2111
2112  llvm::DINodeArray SubscriptArray = DBuilder.getOrCreateArray(Subscripts);
2113
2114  return DBuilder.createArrayType(Size, Align, getOrCreateType(EltTy, Unit),
2115                                  SubscriptArray);
2116}
2117
2118llvm::DIType *CGDebugInfo::CreateType(const LValueReferenceType *Ty,
2119                                      llvm::DIFile *Unit) {
2120  return CreatePointerLikeType(llvm::dwarf::DW_TAG_reference_type, Ty,
2121                               Ty->getPointeeType(), Unit);
2122}
2123
2124llvm::DIType *CGDebugInfo::CreateType(const RValueReferenceType *Ty,
2125                                      llvm::DIFile *Unit) {
2126  return CreatePointerLikeType(llvm::dwarf::DW_TAG_rvalue_reference_type, Ty,
2127                               Ty->getPointeeType(), Unit);
2128}
2129
2130llvm::DIType *CGDebugInfo::CreateType(const MemberPointerType *Ty,
2131                                      llvm::DIFile *U) {
2132  unsigned Flags = 0;
2133  uint64_t Size = 0;
2134
2135  if (!Ty->isIncompleteType()) {
2136    Size = CGM.getContext().getTypeSize(Ty);
2137
2138    // Set the MS inheritance model. There is no flag for the unspecified model.
2139    if (CGM.getTarget().getCXXABI().isMicrosoft()) {
2140      switch (Ty->getMostRecentCXXRecordDecl()->getMSInheritanceModel()) {
2141      case MSInheritanceAttr::Keyword_single_inheritance:
2142        Flags |= llvm::DINode::FlagSingleInheritance;
2143        break;
2144      case MSInheritanceAttr::Keyword_multiple_inheritance:
2145        Flags |= llvm::DINode::FlagMultipleInheritance;
2146        break;
2147      case MSInheritanceAttr::Keyword_virtual_inheritance:
2148        Flags |= llvm::DINode::FlagVirtualInheritance;
2149        break;
2150      case MSInheritanceAttr::Keyword_unspecified_inheritance:
2151        break;
2152      }
2153    }
2154  }
2155
2156  llvm::DIType *ClassType = getOrCreateType(QualType(Ty->getClass(), 0), U);
2157  if (Ty->isMemberDataPointerType())
2158    return DBuilder.createMemberPointerType(
2159        getOrCreateType(Ty->getPointeeType(), U), ClassType, Size, /*Align=*/0,
2160        Flags);
2161
2162  const FunctionProtoType *FPT =
2163      Ty->getPointeeType()->getAs<FunctionProtoType>();
2164  return DBuilder.createMemberPointerType(
2165      getOrCreateInstanceMethodType(CGM.getContext().getPointerType(QualType(
2166                                        Ty->getClass(), FPT->getTypeQuals())),
2167                                    FPT, U),
2168      ClassType, Size, /*Align=*/0, Flags);
2169}
2170
2171llvm::DIType *CGDebugInfo::CreateType(const AtomicType *Ty, llvm::DIFile *U) {
2172  // Ignore the atomic wrapping
2173  // FIXME: What is the correct representation?
2174  return getOrCreateType(Ty->getValueType(), U);
2175}
2176
2177llvm::DIType* CGDebugInfo::CreateType(const PipeType *Ty,
2178                                     llvm::DIFile *U) {
2179  return getOrCreateType(Ty->getElementType(), U);
2180}
2181
2182llvm::DIType *CGDebugInfo::CreateEnumType(const EnumType *Ty) {
2183  const EnumDecl *ED = Ty->getDecl();
2184
2185  uint64_t Size = 0;
2186  uint64_t Align = 0;
2187  if (!ED->getTypeForDecl()->isIncompleteType()) {
2188    Size = CGM.getContext().getTypeSize(ED->getTypeForDecl());
2189    Align = CGM.getContext().getTypeAlign(ED->getTypeForDecl());
2190  }
2191
2192  SmallString<256> FullName = getUniqueTagTypeName(Ty, CGM, TheCU);
2193
2194  bool isImportedFromModule =
2195      DebugTypeExtRefs && ED->isFromASTFile() && ED->getDefinition();
2196
2197  // If this is just a forward declaration, construct an appropriately
2198  // marked node and just return it.
2199  if (isImportedFromModule || !ED->getDefinition()) {
2200    // Note that it is possible for enums to be created as part of
2201    // their own declcontext. In this case a FwdDecl will be created
2202    // twice. This doesn't cause a problem because both FwdDecls are
2203    // entered into the ReplaceMap: finalize() will replace the first
2204    // FwdDecl with the second and then replace the second with
2205    // complete type.
2206    llvm::DIScope *EDContext = getDeclContextDescriptor(ED);
2207    llvm::DIFile *DefUnit = getOrCreateFile(ED->getLocation());
2208    llvm::TempDIScope TmpContext(DBuilder.createReplaceableCompositeType(
2209        llvm::dwarf::DW_TAG_enumeration_type, "", TheCU, DefUnit, 0));
2210
2211    unsigned Line = getLineNumber(ED->getLocation());
2212    StringRef EDName = ED->getName();
2213    llvm::DIType *RetTy = DBuilder.createReplaceableCompositeType(
2214        llvm::dwarf::DW_TAG_enumeration_type, EDName, EDContext, DefUnit, Line,
2215        0, Size, Align, llvm::DINode::FlagFwdDecl, FullName);
2216
2217    ReplaceMap.emplace_back(
2218        std::piecewise_construct, std::make_tuple(Ty),
2219        std::make_tuple(static_cast<llvm::Metadata *>(RetTy)));
2220    return RetTy;
2221  }
2222
2223  return CreateTypeDefinition(Ty);
2224}
2225
2226llvm::DIType *CGDebugInfo::CreateTypeDefinition(const EnumType *Ty) {
2227  const EnumDecl *ED = Ty->getDecl();
2228  uint64_t Size = 0;
2229  uint64_t Align = 0;
2230  if (!ED->getTypeForDecl()->isIncompleteType()) {
2231    Size = CGM.getContext().getTypeSize(ED->getTypeForDecl());
2232    Align = CGM.getContext().getTypeAlign(ED->getTypeForDecl());
2233  }
2234
2235  SmallString<256> FullName = getUniqueTagTypeName(Ty, CGM, TheCU);
2236
2237  // Create elements for each enumerator.
2238  SmallVector<llvm::Metadata *, 16> Enumerators;
2239  ED = ED->getDefinition();
2240  for (const auto *Enum : ED->enumerators()) {
2241    Enumerators.push_back(DBuilder.createEnumerator(
2242        Enum->getName(), Enum->getInitVal().getSExtValue()));
2243  }
2244
2245  // Return a CompositeType for the enum itself.
2246  llvm::DINodeArray EltArray = DBuilder.getOrCreateArray(Enumerators);
2247
2248  llvm::DIFile *DefUnit = getOrCreateFile(ED->getLocation());
2249  unsigned Line = getLineNumber(ED->getLocation());
2250  llvm::DIScope *EnumContext = getDeclContextDescriptor(ED);
2251  llvm::DIType *ClassTy =
2252      ED->isFixed() ? getOrCreateType(ED->getIntegerType(), DefUnit) : nullptr;
2253  return DBuilder.createEnumerationType(EnumContext, ED->getName(), DefUnit,
2254                                        Line, Size, Align, EltArray, ClassTy,
2255                                        FullName);
2256}
2257
2258static QualType UnwrapTypeForDebugInfo(QualType T, const ASTContext &C) {
2259  Qualifiers Quals;
2260  do {
2261    Qualifiers InnerQuals = T.getLocalQualifiers();
2262    // Qualifiers::operator+() doesn't like it if you add a Qualifier
2263    // that is already there.
2264    Quals += Qualifiers::removeCommonQualifiers(Quals, InnerQuals);
2265    Quals += InnerQuals;
2266    QualType LastT = T;
2267    switch (T->getTypeClass()) {
2268    default:
2269      return C.getQualifiedType(T.getTypePtr(), Quals);
2270    case Type::TemplateSpecialization: {
2271      const auto *Spec = cast<TemplateSpecializationType>(T);
2272      if (Spec->isTypeAlias())
2273        return C.getQualifiedType(T.getTypePtr(), Quals);
2274      T = Spec->desugar();
2275      break;
2276    }
2277    case Type::TypeOfExpr:
2278      T = cast<TypeOfExprType>(T)->getUnderlyingExpr()->getType();
2279      break;
2280    case Type::TypeOf:
2281      T = cast<TypeOfType>(T)->getUnderlyingType();
2282      break;
2283    case Type::Decltype:
2284      T = cast<DecltypeType>(T)->getUnderlyingType();
2285      break;
2286    case Type::UnaryTransform:
2287      T = cast<UnaryTransformType>(T)->getUnderlyingType();
2288      break;
2289    case Type::Attributed:
2290      T = cast<AttributedType>(T)->getEquivalentType();
2291      break;
2292    case Type::Elaborated:
2293      T = cast<ElaboratedType>(T)->getNamedType();
2294      break;
2295    case Type::Paren:
2296      T = cast<ParenType>(T)->getInnerType();
2297      break;
2298    case Type::SubstTemplateTypeParm:
2299      T = cast<SubstTemplateTypeParmType>(T)->getReplacementType();
2300      break;
2301    case Type::Auto:
2302      QualType DT = cast<AutoType>(T)->getDeducedType();
2303      assert(!DT.isNull() && "Undeduced types shouldn't reach here.");
2304      T = DT;
2305      break;
2306    }
2307
2308    assert(T != LastT && "Type unwrapping failed to unwrap!");
2309    (void)LastT;
2310  } while (true);
2311}
2312
2313llvm::DIType *CGDebugInfo::getTypeOrNull(QualType Ty) {
2314
2315  // Unwrap the type as needed for debug information.
2316  Ty = UnwrapTypeForDebugInfo(Ty, CGM.getContext());
2317
2318  auto it = TypeCache.find(Ty.getAsOpaquePtr());
2319  if (it != TypeCache.end()) {
2320    // Verify that the debug info still exists.
2321    if (llvm::Metadata *V = it->second)
2322      return cast<llvm::DIType>(V);
2323  }
2324
2325  return nullptr;
2326}
2327
2328void CGDebugInfo::completeTemplateDefinition(
2329    const ClassTemplateSpecializationDecl &SD) {
2330  if (DebugKind <= codegenoptions::DebugLineTablesOnly)
2331    return;
2332
2333  completeClassData(&SD);
2334  // In case this type has no member function definitions being emitted, ensure
2335  // it is retained
2336  RetainedTypes.push_back(CGM.getContext().getRecordType(&SD).getAsOpaquePtr());
2337}
2338
2339llvm::DIType *CGDebugInfo::getOrCreateType(QualType Ty, llvm::DIFile *Unit) {
2340  if (Ty.isNull())
2341    return nullptr;
2342
2343  // Unwrap the type as needed for debug information.
2344  Ty = UnwrapTypeForDebugInfo(Ty, CGM.getContext());
2345
2346  if (auto *T = getTypeOrNull(Ty))
2347    return T;
2348
2349  llvm::DIType *Res = CreateTypeNode(Ty, Unit);
2350  void* TyPtr = Ty.getAsOpaquePtr();
2351
2352  // And update the type cache.
2353  TypeCache[TyPtr].reset(Res);
2354
2355  return Res;
2356}
2357
2358llvm::DIModule *CGDebugInfo::getParentModuleOrNull(const Decl *D) {
2359  // A forward declaration inside a module header does not belong to the module.
2360  if (isa<RecordDecl>(D) && !cast<RecordDecl>(D)->getDefinition())
2361    return nullptr;
2362  if (DebugTypeExtRefs && D->isFromASTFile()) {
2363    // Record a reference to an imported clang module or precompiled header.
2364    auto *Reader = CGM.getContext().getExternalSource();
2365    auto Idx = D->getOwningModuleID();
2366    auto Info = Reader->getSourceDescriptor(Idx);
2367    if (Info)
2368      return getOrCreateModuleRef(*Info, /*SkeletonCU=*/true);
2369  } else if (ClangModuleMap) {
2370    // We are building a clang module or a precompiled header.
2371    //
2372    // TODO: When D is a CXXRecordDecl or a C++ Enum, the ODR applies
2373    // and it wouldn't be necessary to specify the parent scope
2374    // because the type is already unique by definition (it would look
2375    // like the output of -fno-standalone-debug). On the other hand,
2376    // the parent scope helps a consumer to quickly locate the object
2377    // file where the type's definition is located, so it might be
2378    // best to make this behavior a command line or debugger tuning
2379    // option.
2380    FullSourceLoc Loc(D->getLocation(), CGM.getContext().getSourceManager());
2381    if (Module *M = ClangModuleMap->inferModuleFromLocation(Loc)) {
2382      // This is a (sub-)module.
2383      auto Info = ExternalASTSource::ASTSourceDescriptor(*M);
2384      return getOrCreateModuleRef(Info, /*SkeletonCU=*/false);
2385    } else {
2386      // This the precompiled header being built.
2387      return getOrCreateModuleRef(PCHDescriptor, /*SkeletonCU=*/false);
2388    }
2389  }
2390
2391  return nullptr;
2392}
2393
2394llvm::DIType *CGDebugInfo::CreateTypeNode(QualType Ty, llvm::DIFile *Unit) {
2395  // Handle qualifiers, which recursively handles what they refer to.
2396  if (Ty.hasLocalQualifiers())
2397    return CreateQualifiedType(Ty, Unit);
2398
2399  // Work out details of type.
2400  switch (Ty->getTypeClass()) {
2401#define TYPE(Class, Base)
2402#define ABSTRACT_TYPE(Class, Base)
2403#define NON_CANONICAL_TYPE(Class, Base)
2404#define DEPENDENT_TYPE(Class, Base) case Type::Class:
2405#include "clang/AST/TypeNodes.def"
2406    llvm_unreachable("Dependent types cannot show up in debug information");
2407
2408  case Type::ExtVector:
2409  case Type::Vector:
2410    return CreateType(cast<VectorType>(Ty), Unit);
2411  case Type::ObjCObjectPointer:
2412    return CreateType(cast<ObjCObjectPointerType>(Ty), Unit);
2413  case Type::ObjCObject:
2414    return CreateType(cast<ObjCObjectType>(Ty), Unit);
2415  case Type::ObjCInterface:
2416    return CreateType(cast<ObjCInterfaceType>(Ty), Unit);
2417  case Type::Builtin:
2418    return CreateType(cast<BuiltinType>(Ty));
2419  case Type::Complex:
2420    return CreateType(cast<ComplexType>(Ty));
2421  case Type::Pointer:
2422    return CreateType(cast<PointerType>(Ty), Unit);
2423  case Type::Adjusted:
2424  case Type::Decayed:
2425    // Decayed and adjusted types use the adjusted type in LLVM and DWARF.
2426    return CreateType(
2427        cast<PointerType>(cast<AdjustedType>(Ty)->getAdjustedType()), Unit);
2428  case Type::BlockPointer:
2429    return CreateType(cast<BlockPointerType>(Ty), Unit);
2430  case Type::Typedef:
2431    return CreateType(cast<TypedefType>(Ty), Unit);
2432  case Type::Record:
2433    return CreateType(cast<RecordType>(Ty));
2434  case Type::Enum:
2435    return CreateEnumType(cast<EnumType>(Ty));
2436  case Type::FunctionProto:
2437  case Type::FunctionNoProto:
2438    return CreateType(cast<FunctionType>(Ty), Unit);
2439  case Type::ConstantArray:
2440  case Type::VariableArray:
2441  case Type::IncompleteArray:
2442    return CreateType(cast<ArrayType>(Ty), Unit);
2443
2444  case Type::LValueReference:
2445    return CreateType(cast<LValueReferenceType>(Ty), Unit);
2446  case Type::RValueReference:
2447    return CreateType(cast<RValueReferenceType>(Ty), Unit);
2448
2449  case Type::MemberPointer:
2450    return CreateType(cast<MemberPointerType>(Ty), Unit);
2451
2452  case Type::Atomic:
2453    return CreateType(cast<AtomicType>(Ty), Unit);
2454
2455  case Type::Pipe:
2456    return CreateType(cast<PipeType>(Ty), Unit);
2457
2458  case Type::TemplateSpecialization:
2459    return CreateType(cast<TemplateSpecializationType>(Ty), Unit);
2460
2461  case Type::Auto:
2462  case Type::Attributed:
2463  case Type::Elaborated:
2464  case Type::Paren:
2465  case Type::SubstTemplateTypeParm:
2466  case Type::TypeOfExpr:
2467  case Type::TypeOf:
2468  case Type::Decltype:
2469  case Type::UnaryTransform:
2470  case Type::PackExpansion:
2471    break;
2472  }
2473
2474  llvm_unreachable("type should have been unwrapped!");
2475}
2476
2477llvm::DICompositeType *CGDebugInfo::getOrCreateLimitedType(const RecordType *Ty,
2478                                                           llvm::DIFile *Unit) {
2479  QualType QTy(Ty, 0);
2480
2481  auto *T = cast_or_null<llvm::DICompositeType>(getTypeOrNull(QTy));
2482
2483  // We may have cached a forward decl when we could have created
2484  // a non-forward decl. Go ahead and create a non-forward decl
2485  // now.
2486  if (T && !T->isForwardDecl())
2487    return T;
2488
2489  // Otherwise create the type.
2490  llvm::DICompositeType *Res = CreateLimitedType(Ty);
2491
2492  // Propagate members from the declaration to the definition
2493  // CreateType(const RecordType*) will overwrite this with the members in the
2494  // correct order if the full type is needed.
2495  DBuilder.replaceArrays(Res, T ? T->getElements() : llvm::DINodeArray());
2496
2497  // And update the type cache.
2498  TypeCache[QTy.getAsOpaquePtr()].reset(Res);
2499  return Res;
2500}
2501
2502// TODO: Currently used for context chains when limiting debug info.
2503llvm::DICompositeType *CGDebugInfo::CreateLimitedType(const RecordType *Ty) {
2504  RecordDecl *RD = Ty->getDecl();
2505
2506  // Get overall information about the record type for the debug info.
2507  llvm::DIFile *DefUnit = getOrCreateFile(RD->getLocation());
2508  unsigned Line = getLineNumber(RD->getLocation());
2509  StringRef RDName = getClassName(RD);
2510
2511  llvm::DIScope *RDContext = getDeclContextDescriptor(RD);
2512
2513  // If we ended up creating the type during the context chain construction,
2514  // just return that.
2515  auto *T = cast_or_null<llvm::DICompositeType>(
2516      getTypeOrNull(CGM.getContext().getRecordType(RD)));
2517  if (T && (!T->isForwardDecl() || !RD->getDefinition()))
2518    return T;
2519
2520  // If this is just a forward or incomplete declaration, construct an
2521  // appropriately marked node and just return it.
2522  const RecordDecl *D = RD->getDefinition();
2523  if (!D || !D->isCompleteDefinition())
2524    return getOrCreateRecordFwdDecl(Ty, RDContext);
2525
2526  uint64_t Size = CGM.getContext().getTypeSize(Ty);
2527  uint64_t Align = CGM.getContext().getTypeAlign(Ty);
2528
2529  SmallString<256> FullName = getUniqueTagTypeName(Ty, CGM, TheCU);
2530
2531  llvm::DICompositeType *RealDecl = DBuilder.createReplaceableCompositeType(
2532      getTagForRecord(RD), RDName, RDContext, DefUnit, Line, 0, Size, Align, 0,
2533      FullName);
2534
2535  // Elements of composite types usually have back to the type, creating
2536  // uniquing cycles.  Distinct nodes are more efficient.
2537  switch (RealDecl->getTag()) {
2538  default:
2539    llvm_unreachable("invalid composite type tag");
2540
2541  case llvm::dwarf::DW_TAG_array_type:
2542  case llvm::dwarf::DW_TAG_enumeration_type:
2543    // Array elements and most enumeration elements don't have back references,
2544    // so they don't tend to be involved in uniquing cycles and there is some
2545    // chance of merging them when linking together two modules.  Only make
2546    // them distinct if they are ODR-uniqued.
2547    if (FullName.empty())
2548      break;
2549
2550  case llvm::dwarf::DW_TAG_structure_type:
2551  case llvm::dwarf::DW_TAG_union_type:
2552  case llvm::dwarf::DW_TAG_class_type:
2553    // Immediatley resolve to a distinct node.
2554    RealDecl =
2555        llvm::MDNode::replaceWithDistinct(llvm::TempDICompositeType(RealDecl));
2556    break;
2557  }
2558
2559  RegionMap[Ty->getDecl()].reset(RealDecl);
2560  TypeCache[QualType(Ty, 0).getAsOpaquePtr()].reset(RealDecl);
2561
2562  if (const ClassTemplateSpecializationDecl *TSpecial =
2563          dyn_cast<ClassTemplateSpecializationDecl>(RD))
2564    DBuilder.replaceArrays(RealDecl, llvm::DINodeArray(),
2565                           CollectCXXTemplateParams(TSpecial, DefUnit));
2566  return RealDecl;
2567}
2568
2569void CGDebugInfo::CollectContainingType(const CXXRecordDecl *RD,
2570                                        llvm::DICompositeType *RealDecl) {
2571  // A class's primary base or the class itself contains the vtable.
2572  llvm::DICompositeType *ContainingType = nullptr;
2573  const ASTRecordLayout &RL = CGM.getContext().getASTRecordLayout(RD);
2574  if (const CXXRecordDecl *PBase = RL.getPrimaryBase()) {
2575    // Seek non-virtual primary base root.
2576    while (1) {
2577      const ASTRecordLayout &BRL = CGM.getContext().getASTRecordLayout(PBase);
2578      const CXXRecordDecl *PBT = BRL.getPrimaryBase();
2579      if (PBT && !BRL.isPrimaryBaseVirtual())
2580        PBase = PBT;
2581      else
2582        break;
2583    }
2584    ContainingType = cast<llvm::DICompositeType>(
2585        getOrCreateType(QualType(PBase->getTypeForDecl(), 0),
2586                        getOrCreateFile(RD->getLocation())));
2587  } else if (RD->isDynamicClass())
2588    ContainingType = RealDecl;
2589
2590  DBuilder.replaceVTableHolder(RealDecl, ContainingType);
2591}
2592
2593llvm::DIType *CGDebugInfo::CreateMemberType(llvm::DIFile *Unit, QualType FType,
2594                                            StringRef Name, uint64_t *Offset) {
2595  llvm::DIType *FieldTy = CGDebugInfo::getOrCreateType(FType, Unit);
2596  uint64_t FieldSize = CGM.getContext().getTypeSize(FType);
2597  unsigned FieldAlign = CGM.getContext().getTypeAlign(FType);
2598  llvm::DIType *Ty = DBuilder.createMemberType(Unit, Name, Unit, 0, FieldSize,
2599                                               FieldAlign, *Offset, 0, FieldTy);
2600  *Offset += FieldSize;
2601  return Ty;
2602}
2603
2604void CGDebugInfo::collectFunctionDeclProps(GlobalDecl GD, llvm::DIFile *Unit,
2605                                           StringRef &Name,
2606                                           StringRef &LinkageName,
2607                                           llvm::DIScope *&FDContext,
2608                                           llvm::DINodeArray &TParamsArray,
2609                                           unsigned &Flags) {
2610  const FunctionDecl *FD = cast<FunctionDecl>(GD.getDecl());
2611  Name = getFunctionName(FD);
2612  // Use mangled name as linkage name for C/C++ functions.
2613  if (FD->hasPrototype()) {
2614    LinkageName = CGM.getMangledName(GD);
2615    Flags |= llvm::DINode::FlagPrototyped;
2616  }
2617  // No need to replicate the linkage name if it isn't different from the
2618  // subprogram name, no need to have it at all unless coverage is enabled or
2619  // debug is set to more than just line tables.
2620  if (LinkageName == Name || (!CGM.getCodeGenOpts().EmitGcovArcs &&
2621                              !CGM.getCodeGenOpts().EmitGcovNotes &&
2622                              DebugKind <= codegenoptions::DebugLineTablesOnly))
2623    LinkageName = StringRef();
2624
2625  if (DebugKind >= codegenoptions::LimitedDebugInfo) {
2626    if (const NamespaceDecl *NSDecl =
2627        dyn_cast_or_null<NamespaceDecl>(FD->getDeclContext()))
2628      FDContext = getOrCreateNameSpace(NSDecl);
2629    else if (const RecordDecl *RDecl =
2630             dyn_cast_or_null<RecordDecl>(FD->getDeclContext())) {
2631      llvm::DIScope *Mod = getParentModuleOrNull(RDecl);
2632      FDContext = getContextDescriptor(RDecl, Mod ? Mod : TheCU);
2633    }
2634    // Collect template parameters.
2635    TParamsArray = CollectFunctionTemplateParams(FD, Unit);
2636  }
2637}
2638
2639void CGDebugInfo::collectVarDeclProps(const VarDecl *VD, llvm::DIFile *&Unit,
2640                                      unsigned &LineNo, QualType &T,
2641                                      StringRef &Name, StringRef &LinkageName,
2642                                      llvm::DIScope *&VDContext) {
2643  Unit = getOrCreateFile(VD->getLocation());
2644  LineNo = getLineNumber(VD->getLocation());
2645
2646  setLocation(VD->getLocation());
2647
2648  T = VD->getType();
2649  if (T->isIncompleteArrayType()) {
2650    // CodeGen turns int[] into int[1] so we'll do the same here.
2651    llvm::APInt ConstVal(32, 1);
2652    QualType ET = CGM.getContext().getAsArrayType(T)->getElementType();
2653
2654    T = CGM.getContext().getConstantArrayType(ET, ConstVal,
2655                                              ArrayType::Normal, 0);
2656  }
2657
2658  Name = VD->getName();
2659  if (VD->getDeclContext() && !isa<FunctionDecl>(VD->getDeclContext()) &&
2660      !isa<ObjCMethodDecl>(VD->getDeclContext()))
2661    LinkageName = CGM.getMangledName(VD);
2662  if (LinkageName == Name)
2663    LinkageName = StringRef();
2664
2665  // Since we emit declarations (DW_AT_members) for static members, place the
2666  // definition of those static members in the namespace they were declared in
2667  // in the source code (the lexical decl context).
2668  // FIXME: Generalize this for even non-member global variables where the
2669  // declaration and definition may have different lexical decl contexts, once
2670  // we have support for emitting declarations of (non-member) global variables.
2671  const DeclContext *DC = VD->isStaticDataMember() ? VD->getLexicalDeclContext()
2672                                                   : VD->getDeclContext();
2673  // When a record type contains an in-line initialization of a static data
2674  // member, and the record type is marked as __declspec(dllexport), an implicit
2675  // definition of the member will be created in the record context.  DWARF
2676  // doesn't seem to have a nice way to describe this in a form that consumers
2677  // are likely to understand, so fake the "normal" situation of a definition
2678  // outside the class by putting it in the global scope.
2679  if (DC->isRecord())
2680    DC = CGM.getContext().getTranslationUnitDecl();
2681
2682 llvm::DIScope *Mod = getParentModuleOrNull(VD);
2683 VDContext = getContextDescriptor(cast<Decl>(DC), Mod ? Mod : TheCU);
2684}
2685
2686llvm::DISubprogram *
2687CGDebugInfo::getFunctionForwardDeclaration(const FunctionDecl *FD) {
2688  llvm::DINodeArray TParamsArray;
2689  StringRef Name, LinkageName;
2690  unsigned Flags = 0;
2691  SourceLocation Loc = FD->getLocation();
2692  llvm::DIFile *Unit = getOrCreateFile(Loc);
2693  llvm::DIScope *DContext = Unit;
2694  unsigned Line = getLineNumber(Loc);
2695
2696  collectFunctionDeclProps(FD, Unit, Name, LinkageName, DContext,
2697                           TParamsArray, Flags);
2698  // Build function type.
2699  SmallVector<QualType, 16> ArgTypes;
2700  for (const ParmVarDecl *Parm: FD->parameters())
2701    ArgTypes.push_back(Parm->getType());
2702  CallingConv CC = FD->getType()->castAs<FunctionType>()->getCallConv();
2703  QualType FnType = CGM.getContext().getFunctionType(
2704      FD->getReturnType(), ArgTypes, FunctionProtoType::ExtProtoInfo(CC));
2705  llvm::DISubprogram *SP = DBuilder.createTempFunctionFwdDecl(
2706      DContext, Name, LinkageName, Unit, Line,
2707      getOrCreateFunctionType(FD, FnType, Unit), !FD->isExternallyVisible(),
2708      /* isDefinition = */ false, 0, Flags, CGM.getLangOpts().Optimize,
2709      TParamsArray.get(), getFunctionDeclaration(FD));
2710  const FunctionDecl *CanonDecl = cast<FunctionDecl>(FD->getCanonicalDecl());
2711  FwdDeclReplaceMap.emplace_back(std::piecewise_construct,
2712                                 std::make_tuple(CanonDecl),
2713                                 std::make_tuple(SP));
2714  return SP;
2715}
2716
2717llvm::DIGlobalVariable *
2718CGDebugInfo::getGlobalVariableForwardDeclaration(const VarDecl *VD) {
2719  QualType T;
2720  StringRef Name, LinkageName;
2721  SourceLocation Loc = VD->getLocation();
2722  llvm::DIFile *Unit = getOrCreateFile(Loc);
2723  llvm::DIScope *DContext = Unit;
2724  unsigned Line = getLineNumber(Loc);
2725
2726  collectVarDeclProps(VD, Unit, Line, T, Name, LinkageName, DContext);
2727  auto *GV = DBuilder.createTempGlobalVariableFwdDecl(
2728      DContext, Name, LinkageName, Unit, Line, getOrCreateType(T, Unit),
2729      !VD->isExternallyVisible(), nullptr, nullptr);
2730  FwdDeclReplaceMap.emplace_back(
2731      std::piecewise_construct,
2732      std::make_tuple(cast<VarDecl>(VD->getCanonicalDecl())),
2733      std::make_tuple(static_cast<llvm::Metadata *>(GV)));
2734  return GV;
2735}
2736
2737llvm::DINode *CGDebugInfo::getDeclarationOrDefinition(const Decl *D) {
2738  // We only need a declaration (not a definition) of the type - so use whatever
2739  // we would otherwise do to get a type for a pointee. (forward declarations in
2740  // limited debug info, full definitions (if the type definition is available)
2741  // in unlimited debug info)
2742  if (const TypeDecl *TD = dyn_cast<TypeDecl>(D))
2743    return getOrCreateType(CGM.getContext().getTypeDeclType(TD),
2744                           getOrCreateFile(TD->getLocation()));
2745  auto I = DeclCache.find(D->getCanonicalDecl());
2746
2747  if (I != DeclCache.end())
2748    return dyn_cast_or_null<llvm::DINode>(I->second);
2749
2750  // No definition for now. Emit a forward definition that might be
2751  // merged with a potential upcoming definition.
2752  if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D))
2753    return getFunctionForwardDeclaration(FD);
2754  else if (const auto *VD = dyn_cast<VarDecl>(D))
2755    return getGlobalVariableForwardDeclaration(VD);
2756
2757  return nullptr;
2758}
2759
2760llvm::DISubprogram *CGDebugInfo::getFunctionDeclaration(const Decl *D) {
2761  if (!D || DebugKind <= codegenoptions::DebugLineTablesOnly)
2762    return nullptr;
2763
2764  const FunctionDecl *FD = dyn_cast<FunctionDecl>(D);
2765  if (!FD)
2766    return nullptr;
2767
2768  // Setup context.
2769  auto *S = getDeclContextDescriptor(D);
2770
2771  auto MI = SPCache.find(FD->getCanonicalDecl());
2772  if (MI == SPCache.end()) {
2773    if (const CXXMethodDecl *MD =
2774            dyn_cast<CXXMethodDecl>(FD->getCanonicalDecl())) {
2775      return CreateCXXMemberFunction(MD, getOrCreateFile(MD->getLocation()),
2776                                     cast<llvm::DICompositeType>(S));
2777    }
2778  }
2779  if (MI != SPCache.end()) {
2780    auto *SP = dyn_cast_or_null<llvm::DISubprogram>(MI->second);
2781    if (SP && !SP->isDefinition())
2782      return SP;
2783  }
2784
2785  for (auto NextFD : FD->redecls()) {
2786    auto MI = SPCache.find(NextFD->getCanonicalDecl());
2787    if (MI != SPCache.end()) {
2788      auto *SP = dyn_cast_or_null<llvm::DISubprogram>(MI->second);
2789      if (SP && !SP->isDefinition())
2790        return SP;
2791    }
2792  }
2793  return nullptr;
2794}
2795
2796// getOrCreateFunctionType - Construct type. If it is a c++ method, include
2797// implicit parameter "this".
2798llvm::DISubroutineType *CGDebugInfo::getOrCreateFunctionType(const Decl *D,
2799                                                             QualType FnType,
2800                                                             llvm::DIFile *F) {
2801  if (!D || DebugKind <= codegenoptions::DebugLineTablesOnly)
2802    // Create fake but valid subroutine type. Otherwise -verify would fail, and
2803    // subprogram DIE will miss DW_AT_decl_file and DW_AT_decl_line fields.
2804    return DBuilder.createSubroutineType(DBuilder.getOrCreateTypeArray(None));
2805
2806  if (const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D))
2807    return getOrCreateMethodType(Method, F);
2808
2809  const auto *FTy = FnType->getAs<FunctionType>();
2810  CallingConv CC = FTy ? FTy->getCallConv() : CallingConv::CC_C;
2811
2812  if (const ObjCMethodDecl *OMethod = dyn_cast<ObjCMethodDecl>(D)) {
2813    // Add "self" and "_cmd"
2814    SmallVector<llvm::Metadata *, 16> Elts;
2815
2816    // First element is always return type. For 'void' functions it is NULL.
2817    QualType ResultTy = OMethod->getReturnType();
2818
2819    // Replace the instancetype keyword with the actual type.
2820    if (ResultTy == CGM.getContext().getObjCInstanceType())
2821      ResultTy = CGM.getContext().getPointerType(
2822          QualType(OMethod->getClassInterface()->getTypeForDecl(), 0));
2823
2824    Elts.push_back(getOrCreateType(ResultTy, F));
2825    // "self" pointer is always first argument.
2826    QualType SelfDeclTy;
2827    if (auto *SelfDecl = OMethod->getSelfDecl())
2828      SelfDeclTy = SelfDecl->getType();
2829    else if (auto *FPT = dyn_cast<FunctionProtoType>(FnType))
2830      if (FPT->getNumParams() > 1)
2831        SelfDeclTy = FPT->getParamType(0);
2832    if (!SelfDeclTy.isNull())
2833      Elts.push_back(CreateSelfType(SelfDeclTy, getOrCreateType(SelfDeclTy, F)));
2834    // "_cmd" pointer is always second argument.
2835    Elts.push_back(DBuilder.createArtificialType(
2836        getOrCreateType(CGM.getContext().getObjCSelType(), F)));
2837    // Get rest of the arguments.
2838    for (const auto *PI : OMethod->parameters())
2839      Elts.push_back(getOrCreateType(PI->getType(), F));
2840    // Variadic methods need a special marker at the end of the type list.
2841    if (OMethod->isVariadic())
2842      Elts.push_back(DBuilder.createUnspecifiedParameter());
2843
2844    llvm::DITypeRefArray EltTypeArray = DBuilder.getOrCreateTypeArray(Elts);
2845    return DBuilder.createSubroutineType(EltTypeArray, 0, getDwarfCC(CC));
2846  }
2847
2848  // Handle variadic function types; they need an additional
2849  // unspecified parameter.
2850  if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D))
2851    if (FD->isVariadic()) {
2852      SmallVector<llvm::Metadata *, 16> EltTys;
2853      EltTys.push_back(getOrCreateType(FD->getReturnType(), F));
2854      if (const FunctionProtoType *FPT = dyn_cast<FunctionProtoType>(FnType))
2855        for (unsigned i = 0, e = FPT->getNumParams(); i != e; ++i)
2856          EltTys.push_back(getOrCreateType(FPT->getParamType(i), F));
2857      EltTys.push_back(DBuilder.createUnspecifiedParameter());
2858      llvm::DITypeRefArray EltTypeArray = DBuilder.getOrCreateTypeArray(EltTys);
2859      return DBuilder.createSubroutineType(EltTypeArray, 0, getDwarfCC(CC));
2860    }
2861
2862  return cast<llvm::DISubroutineType>(getOrCreateType(FnType, F));
2863}
2864
2865void CGDebugInfo::EmitFunctionStart(GlobalDecl GD, SourceLocation Loc,
2866                                    SourceLocation ScopeLoc, QualType FnType,
2867                                    llvm::Function *Fn, CGBuilderTy &Builder) {
2868
2869  StringRef Name;
2870  StringRef LinkageName;
2871
2872  FnBeginRegionCount.push_back(LexicalBlockStack.size());
2873
2874  const Decl *D = GD.getDecl();
2875  bool HasDecl = (D != nullptr);
2876
2877  unsigned Flags = 0;
2878  llvm::DIFile *Unit = getOrCreateFile(Loc);
2879  llvm::DIScope *FDContext = Unit;
2880  llvm::DINodeArray TParamsArray;
2881  if (!HasDecl) {
2882    // Use llvm function name.
2883    LinkageName = Fn->getName();
2884  } else if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
2885    // If there is a subprogram for this function available then use it.
2886    auto FI = SPCache.find(FD->getCanonicalDecl());
2887    if (FI != SPCache.end()) {
2888      auto *SP = dyn_cast_or_null<llvm::DISubprogram>(FI->second);
2889      if (SP && SP->isDefinition()) {
2890        LexicalBlockStack.emplace_back(SP);
2891        RegionMap[D].reset(SP);
2892        return;
2893      }
2894    }
2895    collectFunctionDeclProps(GD, Unit, Name, LinkageName, FDContext,
2896                             TParamsArray, Flags);
2897  } else if (const ObjCMethodDecl *OMD = dyn_cast<ObjCMethodDecl>(D)) {
2898    Name = getObjCMethodName(OMD);
2899    Flags |= llvm::DINode::FlagPrototyped;
2900  } else {
2901    // Use llvm function name.
2902    Name = Fn->getName();
2903    Flags |= llvm::DINode::FlagPrototyped;
2904  }
2905  if (!Name.empty() && Name[0] == '\01')
2906    Name = Name.substr(1);
2907
2908  if (!HasDecl || D->isImplicit()) {
2909    Flags |= llvm::DINode::FlagArtificial;
2910    // Artificial functions without a location should not silently reuse CurLoc.
2911    if (Loc.isInvalid())
2912      CurLoc = SourceLocation();
2913  }
2914  unsigned LineNo = getLineNumber(Loc);
2915  unsigned ScopeLine = getLineNumber(ScopeLoc);
2916
2917  // FIXME: The function declaration we're constructing here is mostly reusing
2918  // declarations from CXXMethodDecl and not constructing new ones for arbitrary
2919  // FunctionDecls. When/if we fix this we can have FDContext be TheCU/null for
2920  // all subprograms instead of the actual context since subprogram definitions
2921  // are emitted as CU level entities by the backend.
2922  llvm::DISubprogram *SP = DBuilder.createFunction(
2923      FDContext, Name, LinkageName, Unit, LineNo,
2924      getOrCreateFunctionType(D, FnType, Unit), Fn->hasLocalLinkage(),
2925      true /*definition*/, ScopeLine, Flags, CGM.getLangOpts().Optimize,
2926      TParamsArray.get(), getFunctionDeclaration(D));
2927  Fn->setSubprogram(SP);
2928  // We might get here with a VarDecl in the case we're generating
2929  // code for the initialization of globals. Do not record these decls
2930  // as they will overwrite the actual VarDecl Decl in the cache.
2931  if (HasDecl && isa<FunctionDecl>(D))
2932    DeclCache[D->getCanonicalDecl()].reset(static_cast<llvm::Metadata *>(SP));
2933
2934  // Push the function onto the lexical block stack.
2935  LexicalBlockStack.emplace_back(SP);
2936
2937  if (HasDecl)
2938    RegionMap[D].reset(SP);
2939}
2940
2941void CGDebugInfo::EmitFunctionDecl(GlobalDecl GD, SourceLocation Loc,
2942                                   QualType FnType) {
2943  StringRef Name;
2944  StringRef LinkageName;
2945
2946  const Decl *D = GD.getDecl();
2947  if (!D)
2948    return;
2949
2950  unsigned Flags = 0;
2951  llvm::DIFile *Unit = getOrCreateFile(Loc);
2952  llvm::DIScope *FDContext = getDeclContextDescriptor(D);
2953  llvm::DINodeArray TParamsArray;
2954  if (isa<FunctionDecl>(D)) {
2955    // If there is a DISubprogram for this function available then use it.
2956    collectFunctionDeclProps(GD, Unit, Name, LinkageName, FDContext,
2957                             TParamsArray, Flags);
2958  } else if (const ObjCMethodDecl *OMD = dyn_cast<ObjCMethodDecl>(D)) {
2959    Name = getObjCMethodName(OMD);
2960    Flags |= llvm::DINode::FlagPrototyped;
2961  } else {
2962    llvm_unreachable("not a function or ObjC method");
2963  }
2964  if (!Name.empty() && Name[0] == '\01')
2965    Name = Name.substr(1);
2966
2967  if (D->isImplicit()) {
2968    Flags |= llvm::DINode::FlagArtificial;
2969    // Artificial functions without a location should not silently reuse CurLoc.
2970    if (Loc.isInvalid())
2971      CurLoc = SourceLocation();
2972  }
2973  unsigned LineNo = getLineNumber(Loc);
2974  unsigned ScopeLine = 0;
2975
2976  DBuilder.retainType(DBuilder.createFunction(
2977      FDContext, Name, LinkageName, Unit, LineNo,
2978      getOrCreateFunctionType(D, FnType, Unit), false /*internalLinkage*/,
2979      false /*definition*/, ScopeLine, Flags, CGM.getLangOpts().Optimize,
2980      TParamsArray.get(), getFunctionDeclaration(D)));
2981}
2982
2983void CGDebugInfo::EmitLocation(CGBuilderTy &Builder, SourceLocation Loc) {
2984  // Update our current location
2985  setLocation(Loc);
2986
2987  if (CurLoc.isInvalid() || CurLoc.isMacroID())
2988    return;
2989
2990  llvm::MDNode *Scope = LexicalBlockStack.back();
2991  Builder.SetCurrentDebugLocation(llvm::DebugLoc::get(
2992      getLineNumber(CurLoc), getColumnNumber(CurLoc), Scope));
2993}
2994
2995void CGDebugInfo::CreateLexicalBlock(SourceLocation Loc) {
2996  llvm::MDNode *Back = nullptr;
2997  if (!LexicalBlockStack.empty())
2998    Back = LexicalBlockStack.back().get();
2999  LexicalBlockStack.emplace_back(DBuilder.createLexicalBlock(
3000      cast<llvm::DIScope>(Back), getOrCreateFile(CurLoc), getLineNumber(CurLoc),
3001      getColumnNumber(CurLoc)));
3002}
3003
3004void CGDebugInfo::EmitLexicalBlockStart(CGBuilderTy &Builder,
3005                                        SourceLocation Loc) {
3006  // Set our current location.
3007  setLocation(Loc);
3008
3009  // Emit a line table change for the current location inside the new scope.
3010  Builder.SetCurrentDebugLocation(llvm::DebugLoc::get(
3011      getLineNumber(Loc), getColumnNumber(Loc), LexicalBlockStack.back()));
3012
3013  if (DebugKind <= codegenoptions::DebugLineTablesOnly)
3014    return;
3015
3016  // Create a new lexical block and push it on the stack.
3017  CreateLexicalBlock(Loc);
3018}
3019
3020void CGDebugInfo::EmitLexicalBlockEnd(CGBuilderTy &Builder,
3021                                      SourceLocation Loc) {
3022  assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
3023
3024  // Provide an entry in the line table for the end of the block.
3025  EmitLocation(Builder, Loc);
3026
3027  if (DebugKind <= codegenoptions::DebugLineTablesOnly)
3028    return;
3029
3030  LexicalBlockStack.pop_back();
3031}
3032
3033void CGDebugInfo::EmitFunctionEnd(CGBuilderTy &Builder) {
3034  assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
3035  unsigned RCount = FnBeginRegionCount.back();
3036  assert(RCount <= LexicalBlockStack.size() && "Region stack mismatch");
3037
3038  // Pop all regions for this function.
3039  while (LexicalBlockStack.size() != RCount) {
3040    // Provide an entry in the line table for the end of the block.
3041    EmitLocation(Builder, CurLoc);
3042    LexicalBlockStack.pop_back();
3043  }
3044  FnBeginRegionCount.pop_back();
3045}
3046
3047llvm::DIType *CGDebugInfo::EmitTypeForVarWithBlocksAttr(const VarDecl *VD,
3048                                                        uint64_t *XOffset) {
3049
3050  SmallVector<llvm::Metadata *, 5> EltTys;
3051  QualType FType;
3052  uint64_t FieldSize, FieldOffset;
3053  unsigned FieldAlign;
3054
3055  llvm::DIFile *Unit = getOrCreateFile(VD->getLocation());
3056  QualType Type = VD->getType();
3057
3058  FieldOffset = 0;
3059  FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy);
3060  EltTys.push_back(CreateMemberType(Unit, FType, "__isa", &FieldOffset));
3061  EltTys.push_back(CreateMemberType(Unit, FType, "__forwarding", &FieldOffset));
3062  FType = CGM.getContext().IntTy;
3063  EltTys.push_back(CreateMemberType(Unit, FType, "__flags", &FieldOffset));
3064  EltTys.push_back(CreateMemberType(Unit, FType, "__size", &FieldOffset));
3065
3066  bool HasCopyAndDispose = CGM.getContext().BlockRequiresCopying(Type, VD);
3067  if (HasCopyAndDispose) {
3068    FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy);
3069    EltTys.push_back(
3070        CreateMemberType(Unit, FType, "__copy_helper", &FieldOffset));
3071    EltTys.push_back(
3072        CreateMemberType(Unit, FType, "__destroy_helper", &FieldOffset));
3073  }
3074  bool HasByrefExtendedLayout;
3075  Qualifiers::ObjCLifetime Lifetime;
3076  if (CGM.getContext().getByrefLifetime(Type, Lifetime,
3077                                        HasByrefExtendedLayout) &&
3078      HasByrefExtendedLayout) {
3079    FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy);
3080    EltTys.push_back(
3081        CreateMemberType(Unit, FType, "__byref_variable_layout", &FieldOffset));
3082  }
3083
3084  CharUnits Align = CGM.getContext().getDeclAlign(VD);
3085  if (Align > CGM.getContext().toCharUnitsFromBits(
3086                  CGM.getTarget().getPointerAlign(0))) {
3087    CharUnits FieldOffsetInBytes =
3088        CGM.getContext().toCharUnitsFromBits(FieldOffset);
3089    CharUnits AlignedOffsetInBytes = FieldOffsetInBytes.alignTo(Align);
3090    CharUnits NumPaddingBytes = AlignedOffsetInBytes - FieldOffsetInBytes;
3091
3092    if (NumPaddingBytes.isPositive()) {
3093      llvm::APInt pad(32, NumPaddingBytes.getQuantity());
3094      FType = CGM.getContext().getConstantArrayType(CGM.getContext().CharTy,
3095                                                    pad, ArrayType::Normal, 0);
3096      EltTys.push_back(CreateMemberType(Unit, FType, "", &FieldOffset));
3097    }
3098  }
3099
3100  FType = Type;
3101  llvm::DIType *FieldTy = getOrCreateType(FType, Unit);
3102  FieldSize = CGM.getContext().getTypeSize(FType);
3103  FieldAlign = CGM.getContext().toBits(Align);
3104
3105  *XOffset = FieldOffset;
3106  FieldTy = DBuilder.createMemberType(Unit, VD->getName(), Unit, 0, FieldSize,
3107                                      FieldAlign, FieldOffset, 0, FieldTy);
3108  EltTys.push_back(FieldTy);
3109  FieldOffset += FieldSize;
3110
3111  llvm::DINodeArray Elements = DBuilder.getOrCreateArray(EltTys);
3112
3113  unsigned Flags = llvm::DINode::FlagBlockByrefStruct;
3114
3115  return DBuilder.createStructType(Unit, "", Unit, 0, FieldOffset, 0, Flags,
3116                                   nullptr, Elements);
3117}
3118
3119void CGDebugInfo::EmitDeclare(const VarDecl *VD, llvm::Value *Storage,
3120                              llvm::Optional<unsigned> ArgNo,
3121                              CGBuilderTy &Builder) {
3122  assert(DebugKind >= codegenoptions::LimitedDebugInfo);
3123  assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
3124  if (VD->hasAttr<NoDebugAttr>())
3125    return;
3126
3127  bool Unwritten =
3128      VD->isImplicit() || (isa<Decl>(VD->getDeclContext()) &&
3129                           cast<Decl>(VD->getDeclContext())->isImplicit());
3130  llvm::DIFile *Unit = nullptr;
3131  if (!Unwritten)
3132    Unit = getOrCreateFile(VD->getLocation());
3133  llvm::DIType *Ty;
3134  uint64_t XOffset = 0;
3135  if (VD->hasAttr<BlocksAttr>())
3136    Ty = EmitTypeForVarWithBlocksAttr(VD, &XOffset);
3137  else
3138    Ty = getOrCreateType(VD->getType(), Unit);
3139
3140  // If there is no debug info for this type then do not emit debug info
3141  // for this variable.
3142  if (!Ty)
3143    return;
3144
3145  // Get location information.
3146  unsigned Line = 0;
3147  unsigned Column = 0;
3148  if (!Unwritten) {
3149    Line = getLineNumber(VD->getLocation());
3150    Column = getColumnNumber(VD->getLocation());
3151  }
3152  SmallVector<int64_t, 9> Expr;
3153  unsigned Flags = 0;
3154  if (VD->isImplicit())
3155    Flags |= llvm::DINode::FlagArtificial;
3156  // If this is the first argument and it is implicit then
3157  // give it an object pointer flag.
3158  // FIXME: There has to be a better way to do this, but for static
3159  // functions there won't be an implicit param at arg1 and
3160  // otherwise it is 'self' or 'this'.
3161  if (isa<ImplicitParamDecl>(VD) && ArgNo && *ArgNo == 1)
3162    Flags |= llvm::DINode::FlagObjectPointer;
3163  if (llvm::Argument *Arg = dyn_cast<llvm::Argument>(Storage))
3164    if (Arg->getType()->isPointerTy() && !Arg->hasByValAttr() &&
3165        !VD->getType()->isPointerType())
3166      Expr.push_back(llvm::dwarf::DW_OP_deref);
3167
3168  auto *Scope = cast<llvm::DIScope>(LexicalBlockStack.back());
3169
3170  StringRef Name = VD->getName();
3171  if (!Name.empty()) {
3172    if (VD->hasAttr<BlocksAttr>()) {
3173      CharUnits offset = CharUnits::fromQuantity(32);
3174      Expr.push_back(llvm::dwarf::DW_OP_plus);
3175      // offset of __forwarding field
3176      offset = CGM.getContext().toCharUnitsFromBits(
3177          CGM.getTarget().getPointerWidth(0));
3178      Expr.push_back(offset.getQuantity());
3179      Expr.push_back(llvm::dwarf::DW_OP_deref);
3180      Expr.push_back(llvm::dwarf::DW_OP_plus);
3181      // offset of x field
3182      offset = CGM.getContext().toCharUnitsFromBits(XOffset);
3183      Expr.push_back(offset.getQuantity());
3184
3185      // Create the descriptor for the variable.
3186      auto *D = ArgNo
3187                    ? DBuilder.createParameterVariable(Scope, VD->getName(),
3188                                                       *ArgNo, Unit, Line, Ty)
3189                    : DBuilder.createAutoVariable(Scope, VD->getName(), Unit,
3190                                                  Line, Ty);
3191
3192      // Insert an llvm.dbg.declare into the current block.
3193      DBuilder.insertDeclare(Storage, D, DBuilder.createExpression(Expr),
3194                             llvm::DebugLoc::get(Line, Column, Scope),
3195                             Builder.GetInsertBlock());
3196      return;
3197    } else if (isa<VariableArrayType>(VD->getType()))
3198      Expr.push_back(llvm::dwarf::DW_OP_deref);
3199  } else if (const RecordType *RT = dyn_cast<RecordType>(VD->getType())) {
3200    // If VD is an anonymous union then Storage represents value for
3201    // all union fields.
3202    const RecordDecl *RD = cast<RecordDecl>(RT->getDecl());
3203    if (RD->isUnion() && RD->isAnonymousStructOrUnion()) {
3204      // GDB has trouble finding local variables in anonymous unions, so we emit
3205      // artifical local variables for each of the members.
3206      //
3207      // FIXME: Remove this code as soon as GDB supports this.
3208      // The debug info verifier in LLVM operates based on the assumption that a
3209      // variable has the same size as its storage and we had to disable the check
3210      // for artificial variables.
3211      for (const auto *Field : RD->fields()) {
3212        llvm::DIType *FieldTy = getOrCreateType(Field->getType(), Unit);
3213        StringRef FieldName = Field->getName();
3214
3215        // Ignore unnamed fields. Do not ignore unnamed records.
3216        if (FieldName.empty() && !isa<RecordType>(Field->getType()))
3217          continue;
3218
3219        // Use VarDecl's Tag, Scope and Line number.
3220        auto *D = DBuilder.createAutoVariable(
3221            Scope, FieldName, Unit, Line, FieldTy, CGM.getLangOpts().Optimize,
3222            Flags | llvm::DINode::FlagArtificial);
3223
3224        // Insert an llvm.dbg.declare into the current block.
3225        DBuilder.insertDeclare(Storage, D, DBuilder.createExpression(Expr),
3226                               llvm::DebugLoc::get(Line, Column, Scope),
3227                               Builder.GetInsertBlock());
3228      }
3229    }
3230  }
3231
3232  // Create the descriptor for the variable.
3233  auto *D =
3234      ArgNo
3235          ? DBuilder.createParameterVariable(Scope, Name, *ArgNo, Unit, Line,
3236                                             Ty, CGM.getLangOpts().Optimize,
3237                                             Flags)
3238          : DBuilder.createAutoVariable(Scope, Name, Unit, Line, Ty,
3239                                        CGM.getLangOpts().Optimize, Flags);
3240
3241  // Insert an llvm.dbg.declare into the current block.
3242  DBuilder.insertDeclare(Storage, D, DBuilder.createExpression(Expr),
3243                         llvm::DebugLoc::get(Line, Column, Scope),
3244                         Builder.GetInsertBlock());
3245}
3246
3247void CGDebugInfo::EmitDeclareOfAutoVariable(const VarDecl *VD,
3248                                            llvm::Value *Storage,
3249                                            CGBuilderTy &Builder) {
3250  assert(DebugKind >= codegenoptions::LimitedDebugInfo);
3251  EmitDeclare(VD, Storage, llvm::None, Builder);
3252}
3253
3254llvm::DIType *CGDebugInfo::CreateSelfType(const QualType &QualTy,
3255                                          llvm::DIType *Ty) {
3256  llvm::DIType *CachedTy = getTypeOrNull(QualTy);
3257  if (CachedTy)
3258    Ty = CachedTy;
3259  return DBuilder.createObjectPointerType(Ty);
3260}
3261
3262void CGDebugInfo::EmitDeclareOfBlockDeclRefVariable(
3263    const VarDecl *VD, llvm::Value *Storage, CGBuilderTy &Builder,
3264    const CGBlockInfo &blockInfo, llvm::Instruction *InsertPoint) {
3265  assert(DebugKind >= codegenoptions::LimitedDebugInfo);
3266  assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
3267
3268  if (Builder.GetInsertBlock() == nullptr)
3269    return;
3270  if (VD->hasAttr<NoDebugAttr>())
3271    return;
3272
3273  bool isByRef = VD->hasAttr<BlocksAttr>();
3274
3275  uint64_t XOffset = 0;
3276  llvm::DIFile *Unit = getOrCreateFile(VD->getLocation());
3277  llvm::DIType *Ty;
3278  if (isByRef)
3279    Ty = EmitTypeForVarWithBlocksAttr(VD, &XOffset);
3280  else
3281    Ty = getOrCreateType(VD->getType(), Unit);
3282
3283  // Self is passed along as an implicit non-arg variable in a
3284  // block. Mark it as the object pointer.
3285  if (isa<ImplicitParamDecl>(VD) && VD->getName() == "self")
3286    Ty = CreateSelfType(VD->getType(), Ty);
3287
3288  // Get location information.
3289  unsigned Line = getLineNumber(VD->getLocation());
3290  unsigned Column = getColumnNumber(VD->getLocation());
3291
3292  const llvm::DataLayout &target = CGM.getDataLayout();
3293
3294  CharUnits offset = CharUnits::fromQuantity(
3295      target.getStructLayout(blockInfo.StructureType)
3296          ->getElementOffset(blockInfo.getCapture(VD).getIndex()));
3297
3298  SmallVector<int64_t, 9> addr;
3299  if (isa<llvm::AllocaInst>(Storage))
3300    addr.push_back(llvm::dwarf::DW_OP_deref);
3301  addr.push_back(llvm::dwarf::DW_OP_plus);
3302  addr.push_back(offset.getQuantity());
3303  if (isByRef) {
3304    addr.push_back(llvm::dwarf::DW_OP_deref);
3305    addr.push_back(llvm::dwarf::DW_OP_plus);
3306    // offset of __forwarding field
3307    offset =
3308        CGM.getContext().toCharUnitsFromBits(target.getPointerSizeInBits(0));
3309    addr.push_back(offset.getQuantity());
3310    addr.push_back(llvm::dwarf::DW_OP_deref);
3311    addr.push_back(llvm::dwarf::DW_OP_plus);
3312    // offset of x field
3313    offset = CGM.getContext().toCharUnitsFromBits(XOffset);
3314    addr.push_back(offset.getQuantity());
3315  }
3316
3317  // Create the descriptor for the variable.
3318  auto *D = DBuilder.createAutoVariable(
3319      cast<llvm::DILocalScope>(LexicalBlockStack.back()), VD->getName(), Unit,
3320      Line, Ty);
3321
3322  // Insert an llvm.dbg.declare into the current block.
3323  auto DL = llvm::DebugLoc::get(Line, Column, LexicalBlockStack.back());
3324  if (InsertPoint)
3325    DBuilder.insertDeclare(Storage, D, DBuilder.createExpression(addr), DL,
3326                           InsertPoint);
3327  else
3328    DBuilder.insertDeclare(Storage, D, DBuilder.createExpression(addr), DL,
3329                           Builder.GetInsertBlock());
3330}
3331
3332void CGDebugInfo::EmitDeclareOfArgVariable(const VarDecl *VD, llvm::Value *AI,
3333                                           unsigned ArgNo,
3334                                           CGBuilderTy &Builder) {
3335  assert(DebugKind >= codegenoptions::LimitedDebugInfo);
3336  EmitDeclare(VD, AI, ArgNo, Builder);
3337}
3338
3339namespace {
3340struct BlockLayoutChunk {
3341  uint64_t OffsetInBits;
3342  const BlockDecl::Capture *Capture;
3343};
3344bool operator<(const BlockLayoutChunk &l, const BlockLayoutChunk &r) {
3345  return l.OffsetInBits < r.OffsetInBits;
3346}
3347}
3348
3349void CGDebugInfo::EmitDeclareOfBlockLiteralArgVariable(const CGBlockInfo &block,
3350                                                       llvm::Value *Arg,
3351                                                       unsigned ArgNo,
3352                                                       llvm::Value *LocalAddr,
3353                                                       CGBuilderTy &Builder) {
3354  assert(DebugKind >= codegenoptions::LimitedDebugInfo);
3355  ASTContext &C = CGM.getContext();
3356  const BlockDecl *blockDecl = block.getBlockDecl();
3357
3358  // Collect some general information about the block's location.
3359  SourceLocation loc = blockDecl->getCaretLocation();
3360  llvm::DIFile *tunit = getOrCreateFile(loc);
3361  unsigned line = getLineNumber(loc);
3362  unsigned column = getColumnNumber(loc);
3363
3364  // Build the debug-info type for the block literal.
3365  getDeclContextDescriptor(blockDecl);
3366
3367  const llvm::StructLayout *blockLayout =
3368      CGM.getDataLayout().getStructLayout(block.StructureType);
3369
3370  SmallVector<llvm::Metadata *, 16> fields;
3371  fields.push_back(createFieldType("__isa", C.VoidPtrTy, loc, AS_public,
3372                                   blockLayout->getElementOffsetInBits(0),
3373                                   tunit, tunit));
3374  fields.push_back(createFieldType("__flags", C.IntTy, loc, AS_public,
3375                                   blockLayout->getElementOffsetInBits(1),
3376                                   tunit, tunit));
3377  fields.push_back(createFieldType("__reserved", C.IntTy, loc, AS_public,
3378                                   blockLayout->getElementOffsetInBits(2),
3379                                   tunit, tunit));
3380  auto *FnTy = block.getBlockExpr()->getFunctionType();
3381  auto FnPtrType = CGM.getContext().getPointerType(FnTy->desugar());
3382  fields.push_back(createFieldType("__FuncPtr", FnPtrType, loc, AS_public,
3383                                   blockLayout->getElementOffsetInBits(3),
3384                                   tunit, tunit));
3385  fields.push_back(createFieldType(
3386      "__descriptor", C.getPointerType(block.NeedsCopyDispose
3387                                           ? C.getBlockDescriptorExtendedType()
3388                                           : C.getBlockDescriptorType()),
3389      loc, AS_public, blockLayout->getElementOffsetInBits(4), tunit, tunit));
3390
3391  // We want to sort the captures by offset, not because DWARF
3392  // requires this, but because we're paranoid about debuggers.
3393  SmallVector<BlockLayoutChunk, 8> chunks;
3394
3395  // 'this' capture.
3396  if (blockDecl->capturesCXXThis()) {
3397    BlockLayoutChunk chunk;
3398    chunk.OffsetInBits =
3399        blockLayout->getElementOffsetInBits(block.CXXThisIndex);
3400    chunk.Capture = nullptr;
3401    chunks.push_back(chunk);
3402  }
3403
3404  // Variable captures.
3405  for (const auto &capture : blockDecl->captures()) {
3406    const VarDecl *variable = capture.getVariable();
3407    const CGBlockInfo::Capture &captureInfo = block.getCapture(variable);
3408
3409    // Ignore constant captures.
3410    if (captureInfo.isConstant())
3411      continue;
3412
3413    BlockLayoutChunk chunk;
3414    chunk.OffsetInBits =
3415        blockLayout->getElementOffsetInBits(captureInfo.getIndex());
3416    chunk.Capture = &capture;
3417    chunks.push_back(chunk);
3418  }
3419
3420  // Sort by offset.
3421  llvm::array_pod_sort(chunks.begin(), chunks.end());
3422
3423  for (SmallVectorImpl<BlockLayoutChunk>::iterator i = chunks.begin(),
3424                                                   e = chunks.end();
3425       i != e; ++i) {
3426    uint64_t offsetInBits = i->OffsetInBits;
3427    const BlockDecl::Capture *capture = i->Capture;
3428
3429    // If we have a null capture, this must be the C++ 'this' capture.
3430    if (!capture) {
3431      QualType type;
3432      if (auto *Method =
3433              cast_or_null<CXXMethodDecl>(blockDecl->getNonClosureContext()))
3434        type = Method->getThisType(C);
3435      else if (auto *RDecl = dyn_cast<CXXRecordDecl>(blockDecl->getParent()))
3436        type = QualType(RDecl->getTypeForDecl(), 0);
3437      else
3438        llvm_unreachable("unexpected block declcontext");
3439
3440      fields.push_back(createFieldType("this", type, loc, AS_public,
3441                                       offsetInBits, tunit, tunit));
3442      continue;
3443    }
3444
3445    const VarDecl *variable = capture->getVariable();
3446    StringRef name = variable->getName();
3447
3448    llvm::DIType *fieldType;
3449    if (capture->isByRef()) {
3450      TypeInfo PtrInfo = C.getTypeInfo(C.VoidPtrTy);
3451
3452      // FIXME: this creates a second copy of this type!
3453      uint64_t xoffset;
3454      fieldType = EmitTypeForVarWithBlocksAttr(variable, &xoffset);
3455      fieldType = DBuilder.createPointerType(fieldType, PtrInfo.Width);
3456      fieldType =
3457          DBuilder.createMemberType(tunit, name, tunit, line, PtrInfo.Width,
3458                                    PtrInfo.Align, offsetInBits, 0, fieldType);
3459    } else {
3460      fieldType = createFieldType(name, variable->getType(), loc, AS_public,
3461                                  offsetInBits, tunit, tunit);
3462    }
3463    fields.push_back(fieldType);
3464  }
3465
3466  SmallString<36> typeName;
3467  llvm::raw_svector_ostream(typeName) << "__block_literal_"
3468                                      << CGM.getUniqueBlockCount();
3469
3470  llvm::DINodeArray fieldsArray = DBuilder.getOrCreateArray(fields);
3471
3472  llvm::DIType *type = DBuilder.createStructType(
3473      tunit, typeName.str(), tunit, line,
3474      CGM.getContext().toBits(block.BlockSize),
3475      CGM.getContext().toBits(block.BlockAlign), 0, nullptr, fieldsArray);
3476  type = DBuilder.createPointerType(type, CGM.PointerWidthInBits);
3477
3478  // Get overall information about the block.
3479  unsigned flags = llvm::DINode::FlagArtificial;
3480  auto *scope = cast<llvm::DILocalScope>(LexicalBlockStack.back());
3481
3482  // Create the descriptor for the parameter.
3483  auto *debugVar = DBuilder.createParameterVariable(
3484      scope, Arg->getName(), ArgNo, tunit, line, type,
3485      CGM.getLangOpts().Optimize, flags);
3486
3487  if (LocalAddr) {
3488    // Insert an llvm.dbg.value into the current block.
3489    DBuilder.insertDbgValueIntrinsic(
3490        LocalAddr, 0, debugVar, DBuilder.createExpression(),
3491        llvm::DebugLoc::get(line, column, scope), Builder.GetInsertBlock());
3492  }
3493
3494  // Insert an llvm.dbg.declare into the current block.
3495  DBuilder.insertDeclare(Arg, debugVar, DBuilder.createExpression(),
3496                         llvm::DebugLoc::get(line, column, scope),
3497                         Builder.GetInsertBlock());
3498}
3499
3500llvm::DIDerivedType *
3501CGDebugInfo::getOrCreateStaticDataMemberDeclarationOrNull(const VarDecl *D) {
3502  if (!D->isStaticDataMember())
3503    return nullptr;
3504
3505  auto MI = StaticDataMemberCache.find(D->getCanonicalDecl());
3506  if (MI != StaticDataMemberCache.end()) {
3507    assert(MI->second && "Static data member declaration should still exist");
3508    return MI->second;
3509  }
3510
3511  // If the member wasn't found in the cache, lazily construct and add it to the
3512  // type (used when a limited form of the type is emitted).
3513  auto DC = D->getDeclContext();
3514  auto *Ctxt = cast<llvm::DICompositeType>(getDeclContextDescriptor(D));
3515  return CreateRecordStaticField(D, Ctxt, cast<RecordDecl>(DC));
3516}
3517
3518llvm::DIGlobalVariable *CGDebugInfo::CollectAnonRecordDecls(
3519    const RecordDecl *RD, llvm::DIFile *Unit, unsigned LineNo,
3520    StringRef LinkageName, llvm::GlobalVariable *Var, llvm::DIScope *DContext) {
3521  llvm::DIGlobalVariable *GV = nullptr;
3522
3523  for (const auto *Field : RD->fields()) {
3524    llvm::DIType *FieldTy = getOrCreateType(Field->getType(), Unit);
3525    StringRef FieldName = Field->getName();
3526
3527    // Ignore unnamed fields, but recurse into anonymous records.
3528    if (FieldName.empty()) {
3529      const RecordType *RT = dyn_cast<RecordType>(Field->getType());
3530      if (RT)
3531        GV = CollectAnonRecordDecls(RT->getDecl(), Unit, LineNo, LinkageName,
3532                                    Var, DContext);
3533      continue;
3534    }
3535    // Use VarDecl's Tag, Scope and Line number.
3536    GV = DBuilder.createGlobalVariable(DContext, FieldName, LinkageName, Unit,
3537                                       LineNo, FieldTy,
3538                                       Var->hasLocalLinkage(), Var, nullptr);
3539  }
3540  return GV;
3541}
3542
3543void CGDebugInfo::EmitGlobalVariable(llvm::GlobalVariable *Var,
3544                                     const VarDecl *D) {
3545  assert(DebugKind >= codegenoptions::LimitedDebugInfo);
3546  if (D->hasAttr<NoDebugAttr>())
3547    return;
3548  // Create global variable debug descriptor.
3549  llvm::DIFile *Unit = nullptr;
3550  llvm::DIScope *DContext = nullptr;
3551  unsigned LineNo;
3552  StringRef DeclName, LinkageName;
3553  QualType T;
3554  collectVarDeclProps(D, Unit, LineNo, T, DeclName, LinkageName, DContext);
3555
3556  // Attempt to store one global variable for the declaration - even if we
3557  // emit a lot of fields.
3558  llvm::DIGlobalVariable *GV = nullptr;
3559
3560  // If this is an anonymous union then we'll want to emit a global
3561  // variable for each member of the anonymous union so that it's possible
3562  // to find the name of any field in the union.
3563  if (T->isUnionType() && DeclName.empty()) {
3564    const RecordDecl *RD = T->castAs<RecordType>()->getDecl();
3565    assert(RD->isAnonymousStructOrUnion() &&
3566           "unnamed non-anonymous struct or union?");
3567    GV = CollectAnonRecordDecls(RD, Unit, LineNo, LinkageName, Var, DContext);
3568  } else {
3569    GV = DBuilder.createGlobalVariable(
3570        DContext, DeclName, LinkageName, Unit, LineNo, getOrCreateType(T, Unit),
3571        Var->hasLocalLinkage(), Var,
3572        getOrCreateStaticDataMemberDeclarationOrNull(D));
3573  }
3574  DeclCache[D->getCanonicalDecl()].reset(static_cast<llvm::Metadata *>(GV));
3575}
3576
3577void CGDebugInfo::EmitGlobalVariable(const ValueDecl *VD,
3578                                     llvm::Constant *Init) {
3579  assert(DebugKind >= codegenoptions::LimitedDebugInfo);
3580  if (VD->hasAttr<NoDebugAttr>())
3581    return;
3582  // Create the descriptor for the variable.
3583  llvm::DIFile *Unit = getOrCreateFile(VD->getLocation());
3584  StringRef Name = VD->getName();
3585  llvm::DIType *Ty = getOrCreateType(VD->getType(), Unit);
3586  if (const EnumConstantDecl *ECD = dyn_cast<EnumConstantDecl>(VD)) {
3587    const EnumDecl *ED = cast<EnumDecl>(ECD->getDeclContext());
3588    assert(isa<EnumType>(ED->getTypeForDecl()) && "Enum without EnumType?");
3589    Ty = getOrCreateType(QualType(ED->getTypeForDecl(), 0), Unit);
3590  }
3591  // Do not use global variables for enums.
3592  //
3593  // FIXME: why not?
3594  if (Ty->getTag() == llvm::dwarf::DW_TAG_enumeration_type)
3595    return;
3596  // Do not emit separate definitions for function local const/statics.
3597  if (isa<FunctionDecl>(VD->getDeclContext()))
3598    return;
3599  VD = cast<ValueDecl>(VD->getCanonicalDecl());
3600  auto *VarD = cast<VarDecl>(VD);
3601  if (VarD->isStaticDataMember()) {
3602    auto *RD = cast<RecordDecl>(VarD->getDeclContext());
3603    getDeclContextDescriptor(VarD);
3604    // Ensure that the type is retained even though it's otherwise unreferenced.
3605    //
3606    // FIXME: This is probably unnecessary, since Ty should reference RD
3607    // through its scope.
3608    RetainedTypes.push_back(
3609        CGM.getContext().getRecordType(RD).getAsOpaquePtr());
3610    return;
3611  }
3612
3613  llvm::DIScope *DContext = getDeclContextDescriptor(VD);
3614
3615  auto &GV = DeclCache[VD];
3616  if (GV)
3617    return;
3618  GV.reset(DBuilder.createGlobalVariable(
3619      DContext, Name, StringRef(), Unit, getLineNumber(VD->getLocation()), Ty,
3620      true, Init, getOrCreateStaticDataMemberDeclarationOrNull(VarD)));
3621}
3622
3623llvm::DIScope *CGDebugInfo::getCurrentContextDescriptor(const Decl *D) {
3624  if (!LexicalBlockStack.empty())
3625    return LexicalBlockStack.back();
3626  llvm::DIScope *Mod = getParentModuleOrNull(D);
3627  return getContextDescriptor(D, Mod ? Mod : TheCU);
3628}
3629
3630void CGDebugInfo::EmitUsingDirective(const UsingDirectiveDecl &UD) {
3631  if (CGM.getCodeGenOpts().getDebugInfo() < codegenoptions::LimitedDebugInfo)
3632    return;
3633  const NamespaceDecl *NSDecl = UD.getNominatedNamespace();
3634  if (!NSDecl->isAnonymousNamespace() ||
3635      CGM.getCodeGenOpts().DebugExplicitImport) {
3636    DBuilder.createImportedModule(
3637        getCurrentContextDescriptor(cast<Decl>(UD.getDeclContext())),
3638        getOrCreateNameSpace(NSDecl),
3639        getLineNumber(UD.getLocation()));
3640  }
3641}
3642
3643void CGDebugInfo::EmitUsingDecl(const UsingDecl &UD) {
3644  if (CGM.getCodeGenOpts().getDebugInfo() < codegenoptions::LimitedDebugInfo)
3645    return;
3646  assert(UD.shadow_size() &&
3647         "We shouldn't be codegening an invalid UsingDecl containing no decls");
3648  // Emitting one decl is sufficient - debuggers can detect that this is an
3649  // overloaded name & provide lookup for all the overloads.
3650  const UsingShadowDecl &USD = **UD.shadow_begin();
3651  if (llvm::DINode *Target =
3652          getDeclarationOrDefinition(USD.getUnderlyingDecl()))
3653    DBuilder.createImportedDeclaration(
3654        getCurrentContextDescriptor(cast<Decl>(USD.getDeclContext())), Target,
3655        getLineNumber(USD.getLocation()));
3656}
3657
3658void CGDebugInfo::EmitImportDecl(const ImportDecl &ID) {
3659  if (CGM.getCodeGenOpts().getDebuggerTuning() != llvm::DebuggerKind::LLDB)
3660    return;
3661  if (Module *M = ID.getImportedModule()) {
3662    auto Info = ExternalASTSource::ASTSourceDescriptor(*M);
3663    DBuilder.createImportedDeclaration(
3664        getCurrentContextDescriptor(cast<Decl>(ID.getDeclContext())),
3665        getOrCreateModuleRef(Info, DebugTypeExtRefs),
3666        getLineNumber(ID.getLocation()));
3667  }
3668}
3669
3670llvm::DIImportedEntity *
3671CGDebugInfo::EmitNamespaceAlias(const NamespaceAliasDecl &NA) {
3672  if (CGM.getCodeGenOpts().getDebugInfo() < codegenoptions::LimitedDebugInfo)
3673    return nullptr;
3674  auto &VH = NamespaceAliasCache[&NA];
3675  if (VH)
3676    return cast<llvm::DIImportedEntity>(VH);
3677  llvm::DIImportedEntity *R;
3678  if (const NamespaceAliasDecl *Underlying =
3679          dyn_cast<NamespaceAliasDecl>(NA.getAliasedNamespace()))
3680    // This could cache & dedup here rather than relying on metadata deduping.
3681    R = DBuilder.createImportedDeclaration(
3682        getCurrentContextDescriptor(cast<Decl>(NA.getDeclContext())),
3683        EmitNamespaceAlias(*Underlying), getLineNumber(NA.getLocation()),
3684        NA.getName());
3685  else
3686    R = DBuilder.createImportedDeclaration(
3687        getCurrentContextDescriptor(cast<Decl>(NA.getDeclContext())),
3688        getOrCreateNameSpace(cast<NamespaceDecl>(NA.getAliasedNamespace())),
3689        getLineNumber(NA.getLocation()), NA.getName());
3690  VH.reset(R);
3691  return R;
3692}
3693
3694llvm::DINamespace *
3695CGDebugInfo::getOrCreateNameSpace(const NamespaceDecl *NSDecl) {
3696  NSDecl = NSDecl->getCanonicalDecl();
3697  auto I = NameSpaceCache.find(NSDecl);
3698  if (I != NameSpaceCache.end())
3699    return cast<llvm::DINamespace>(I->second);
3700
3701  unsigned LineNo = getLineNumber(NSDecl->getLocation());
3702  llvm::DIFile *FileD = getOrCreateFile(NSDecl->getLocation());
3703  llvm::DIScope *Context = getDeclContextDescriptor(NSDecl);
3704  llvm::DINamespace *NS =
3705      DBuilder.createNameSpace(Context, NSDecl->getName(), FileD, LineNo);
3706  NameSpaceCache[NSDecl].reset(NS);
3707  return NS;
3708}
3709
3710void CGDebugInfo::setDwoId(uint64_t Signature) {
3711  assert(TheCU && "no main compile unit");
3712  TheCU->setDWOId(Signature);
3713}
3714
3715
3716void CGDebugInfo::finalize() {
3717  // Creating types might create further types - invalidating the current
3718  // element and the size(), so don't cache/reference them.
3719  for (size_t i = 0; i != ObjCInterfaceCache.size(); ++i) {
3720    ObjCInterfaceCacheEntry E = ObjCInterfaceCache[i];
3721    llvm::DIType *Ty = E.Type->getDecl()->getDefinition()
3722                           ? CreateTypeDefinition(E.Type, E.Unit)
3723                           : E.Decl;
3724    DBuilder.replaceTemporary(llvm::TempDIType(E.Decl), Ty);
3725  }
3726
3727  for (auto p : ReplaceMap) {
3728    assert(p.second);
3729    auto *Ty = cast<llvm::DIType>(p.second);
3730    assert(Ty->isForwardDecl());
3731
3732    auto it = TypeCache.find(p.first);
3733    assert(it != TypeCache.end());
3734    assert(it->second);
3735
3736    DBuilder.replaceTemporary(llvm::TempDIType(Ty),
3737                              cast<llvm::DIType>(it->second));
3738  }
3739
3740  for (const auto &p : FwdDeclReplaceMap) {
3741    assert(p.second);
3742    llvm::TempMDNode FwdDecl(cast<llvm::MDNode>(p.second));
3743    llvm::Metadata *Repl;
3744
3745    auto it = DeclCache.find(p.first);
3746    // If there has been no definition for the declaration, call RAUW
3747    // with ourselves, that will destroy the temporary MDNode and
3748    // replace it with a standard one, avoiding leaking memory.
3749    if (it == DeclCache.end())
3750      Repl = p.second;
3751    else
3752      Repl = it->second;
3753
3754    DBuilder.replaceTemporary(std::move(FwdDecl), cast<llvm::MDNode>(Repl));
3755  }
3756
3757  // We keep our own list of retained types, because we need to look
3758  // up the final type in the type cache.
3759  for (auto &RT : RetainedTypes)
3760    if (auto MD = TypeCache[RT])
3761      DBuilder.retainType(cast<llvm::DIType>(MD));
3762
3763  DBuilder.finalize();
3764}
3765
3766void CGDebugInfo::EmitExplicitCastType(QualType Ty) {
3767  if (CGM.getCodeGenOpts().getDebugInfo() < codegenoptions::LimitedDebugInfo)
3768    return;
3769
3770  if (auto *DieTy = getOrCreateType(Ty, getOrCreateMainFile()))
3771    // Don't ignore in case of explicit cast where it is referenced indirectly.
3772    DBuilder.retainType(DieTy);
3773}
3774