Clang Project

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