xref: /freebsd/contrib/llvm-project/clang/lib/CodeGen/CGDebugInfo.cpp (revision fe75646a0234a261c0013bf1840fdac4acaf0cec)
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 "TargetInfo.h"
22 #include "clang/AST/ASTContext.h"
23 #include "clang/AST/Attr.h"
24 #include "clang/AST/DeclFriend.h"
25 #include "clang/AST/DeclObjC.h"
26 #include "clang/AST/DeclTemplate.h"
27 #include "clang/AST/Expr.h"
28 #include "clang/AST/RecordLayout.h"
29 #include "clang/AST/RecursiveASTVisitor.h"
30 #include "clang/AST/VTableBuilder.h"
31 #include "clang/Basic/CodeGenOptions.h"
32 #include "clang/Basic/FileManager.h"
33 #include "clang/Basic/SourceManager.h"
34 #include "clang/Basic/Version.h"
35 #include "clang/Frontend/FrontendOptions.h"
36 #include "clang/Lex/HeaderSearchOptions.h"
37 #include "clang/Lex/ModuleMap.h"
38 #include "clang/Lex/PreprocessorOptions.h"
39 #include "llvm/ADT/DenseSet.h"
40 #include "llvm/ADT/SmallVector.h"
41 #include "llvm/ADT/StringExtras.h"
42 #include "llvm/IR/Constants.h"
43 #include "llvm/IR/DataLayout.h"
44 #include "llvm/IR/DerivedTypes.h"
45 #include "llvm/IR/Instructions.h"
46 #include "llvm/IR/Intrinsics.h"
47 #include "llvm/IR/Metadata.h"
48 #include "llvm/IR/Module.h"
49 #include "llvm/Support/FileSystem.h"
50 #include "llvm/Support/MD5.h"
51 #include "llvm/Support/Path.h"
52 #include "llvm/Support/SHA1.h"
53 #include "llvm/Support/SHA256.h"
54 #include "llvm/Support/TimeProfiler.h"
55 #include <optional>
56 using namespace clang;
57 using namespace clang::CodeGen;
58 
59 static uint32_t getTypeAlignIfRequired(const Type *Ty, const ASTContext &Ctx) {
60   auto TI = Ctx.getTypeInfo(Ty);
61   return TI.isAlignRequired() ? TI.Align : 0;
62 }
63 
64 static uint32_t getTypeAlignIfRequired(QualType Ty, const ASTContext &Ctx) {
65   return getTypeAlignIfRequired(Ty.getTypePtr(), Ctx);
66 }
67 
68 static uint32_t getDeclAlignIfRequired(const Decl *D, const ASTContext &Ctx) {
69   return D->hasAttr<AlignedAttr>() ? D->getMaxAlignment() : 0;
70 }
71 
72 CGDebugInfo::CGDebugInfo(CodeGenModule &CGM)
73     : CGM(CGM), DebugKind(CGM.getCodeGenOpts().getDebugInfo()),
74       DebugTypeExtRefs(CGM.getCodeGenOpts().DebugTypeExtRefs),
75       DBuilder(CGM.getModule()) {
76   CreateCompileUnit();
77 }
78 
79 CGDebugInfo::~CGDebugInfo() {
80   assert(LexicalBlockStack.empty() &&
81          "Region stack mismatch, stack not empty!");
82 }
83 
84 ApplyDebugLocation::ApplyDebugLocation(CodeGenFunction &CGF,
85                                        SourceLocation TemporaryLocation)
86     : CGF(&CGF) {
87   init(TemporaryLocation);
88 }
89 
90 ApplyDebugLocation::ApplyDebugLocation(CodeGenFunction &CGF,
91                                        bool DefaultToEmpty,
92                                        SourceLocation TemporaryLocation)
93     : CGF(&CGF) {
94   init(TemporaryLocation, DefaultToEmpty);
95 }
96 
97 void ApplyDebugLocation::init(SourceLocation TemporaryLocation,
98                               bool DefaultToEmpty) {
99   auto *DI = CGF->getDebugInfo();
100   if (!DI) {
101     CGF = nullptr;
102     return;
103   }
104 
105   OriginalLocation = CGF->Builder.getCurrentDebugLocation();
106 
107   if (OriginalLocation && !DI->CGM.getExpressionLocationsEnabled())
108     return;
109 
110   if (TemporaryLocation.isValid()) {
111     DI->EmitLocation(CGF->Builder, TemporaryLocation);
112     return;
113   }
114 
115   if (DefaultToEmpty) {
116     CGF->Builder.SetCurrentDebugLocation(llvm::DebugLoc());
117     return;
118   }
119 
120   // Construct a location that has a valid scope, but no line info.
121   assert(!DI->LexicalBlockStack.empty());
122   CGF->Builder.SetCurrentDebugLocation(
123       llvm::DILocation::get(DI->LexicalBlockStack.back()->getContext(), 0, 0,
124                             DI->LexicalBlockStack.back(), DI->getInlinedAt()));
125 }
126 
127 ApplyDebugLocation::ApplyDebugLocation(CodeGenFunction &CGF, const Expr *E)
128     : CGF(&CGF) {
129   init(E->getExprLoc());
130 }
131 
132 ApplyDebugLocation::ApplyDebugLocation(CodeGenFunction &CGF, llvm::DebugLoc Loc)
133     : CGF(&CGF) {
134   if (!CGF.getDebugInfo()) {
135     this->CGF = nullptr;
136     return;
137   }
138   OriginalLocation = CGF.Builder.getCurrentDebugLocation();
139   if (Loc)
140     CGF.Builder.SetCurrentDebugLocation(std::move(Loc));
141 }
142 
143 ApplyDebugLocation::~ApplyDebugLocation() {
144   // Query CGF so the location isn't overwritten when location updates are
145   // temporarily disabled (for C++ default function arguments)
146   if (CGF)
147     CGF->Builder.SetCurrentDebugLocation(std::move(OriginalLocation));
148 }
149 
150 ApplyInlineDebugLocation::ApplyInlineDebugLocation(CodeGenFunction &CGF,
151                                                    GlobalDecl InlinedFn)
152     : CGF(&CGF) {
153   if (!CGF.getDebugInfo()) {
154     this->CGF = nullptr;
155     return;
156   }
157   auto &DI = *CGF.getDebugInfo();
158   SavedLocation = DI.getLocation();
159   assert((DI.getInlinedAt() ==
160           CGF.Builder.getCurrentDebugLocation()->getInlinedAt()) &&
161          "CGDebugInfo and IRBuilder are out of sync");
162 
163   DI.EmitInlineFunctionStart(CGF.Builder, InlinedFn);
164 }
165 
166 ApplyInlineDebugLocation::~ApplyInlineDebugLocation() {
167   if (!CGF)
168     return;
169   auto &DI = *CGF->getDebugInfo();
170   DI.EmitInlineFunctionEnd(CGF->Builder);
171   DI.EmitLocation(CGF->Builder, SavedLocation);
172 }
173 
174 void CGDebugInfo::setLocation(SourceLocation Loc) {
175   // If the new location isn't valid return.
176   if (Loc.isInvalid())
177     return;
178 
179   CurLoc = CGM.getContext().getSourceManager().getExpansionLoc(Loc);
180 
181   // If we've changed files in the middle of a lexical scope go ahead
182   // and create a new lexical scope with file node if it's different
183   // from the one in the scope.
184   if (LexicalBlockStack.empty())
185     return;
186 
187   SourceManager &SM = CGM.getContext().getSourceManager();
188   auto *Scope = cast<llvm::DIScope>(LexicalBlockStack.back());
189   PresumedLoc PCLoc = SM.getPresumedLoc(CurLoc);
190   if (PCLoc.isInvalid() || Scope->getFile() == getOrCreateFile(CurLoc))
191     return;
192 
193   if (auto *LBF = dyn_cast<llvm::DILexicalBlockFile>(Scope)) {
194     LexicalBlockStack.pop_back();
195     LexicalBlockStack.emplace_back(DBuilder.createLexicalBlockFile(
196         LBF->getScope(), getOrCreateFile(CurLoc)));
197   } else if (isa<llvm::DILexicalBlock>(Scope) ||
198              isa<llvm::DISubprogram>(Scope)) {
199     LexicalBlockStack.pop_back();
200     LexicalBlockStack.emplace_back(
201         DBuilder.createLexicalBlockFile(Scope, getOrCreateFile(CurLoc)));
202   }
203 }
204 
205 llvm::DIScope *CGDebugInfo::getDeclContextDescriptor(const Decl *D) {
206   llvm::DIScope *Mod = getParentModuleOrNull(D);
207   return getContextDescriptor(cast<Decl>(D->getDeclContext()),
208                               Mod ? Mod : TheCU);
209 }
210 
211 llvm::DIScope *CGDebugInfo::getContextDescriptor(const Decl *Context,
212                                                  llvm::DIScope *Default) {
213   if (!Context)
214     return Default;
215 
216   auto I = RegionMap.find(Context);
217   if (I != RegionMap.end()) {
218     llvm::Metadata *V = I->second;
219     return dyn_cast_or_null<llvm::DIScope>(V);
220   }
221 
222   // Check namespace.
223   if (const auto *NSDecl = dyn_cast<NamespaceDecl>(Context))
224     return getOrCreateNamespace(NSDecl);
225 
226   if (const auto *RDecl = dyn_cast<RecordDecl>(Context))
227     if (!RDecl->isDependentType())
228       return getOrCreateType(CGM.getContext().getTypeDeclType(RDecl),
229                              TheCU->getFile());
230   return Default;
231 }
232 
233 PrintingPolicy CGDebugInfo::getPrintingPolicy() const {
234   PrintingPolicy PP = CGM.getContext().getPrintingPolicy();
235 
236   // If we're emitting codeview, it's important to try to match MSVC's naming so
237   // that visualizers written for MSVC will trigger for our class names. In
238   // particular, we can't have spaces between arguments of standard templates
239   // like basic_string and vector, but we must have spaces between consecutive
240   // angle brackets that close nested template argument lists.
241   if (CGM.getCodeGenOpts().EmitCodeView) {
242     PP.MSVCFormatting = true;
243     PP.SplitTemplateClosers = true;
244   } else {
245     // For DWARF, printing rules are underspecified.
246     // SplitTemplateClosers yields better interop with GCC and GDB (PR46052).
247     PP.SplitTemplateClosers = true;
248   }
249 
250   PP.SuppressInlineNamespace = false;
251   PP.PrintCanonicalTypes = true;
252   PP.UsePreferredNames = false;
253   PP.AlwaysIncludeTypeForTemplateArgument = true;
254   PP.UseEnumerators = false;
255 
256   // Apply -fdebug-prefix-map.
257   PP.Callbacks = &PrintCB;
258   return PP;
259 }
260 
261 StringRef CGDebugInfo::getFunctionName(const FunctionDecl *FD) {
262   return internString(GetName(FD));
263 }
264 
265 StringRef CGDebugInfo::getObjCMethodName(const ObjCMethodDecl *OMD) {
266   SmallString<256> MethodName;
267   llvm::raw_svector_ostream OS(MethodName);
268   OS << (OMD->isInstanceMethod() ? '-' : '+') << '[';
269   const DeclContext *DC = OMD->getDeclContext();
270   if (const auto *OID = dyn_cast<ObjCImplementationDecl>(DC)) {
271     OS << OID->getName();
272   } else if (const auto *OID = dyn_cast<ObjCInterfaceDecl>(DC)) {
273     OS << OID->getName();
274   } else if (const auto *OC = dyn_cast<ObjCCategoryDecl>(DC)) {
275     if (OC->IsClassExtension()) {
276       OS << OC->getClassInterface()->getName();
277     } else {
278       OS << OC->getIdentifier()->getNameStart() << '('
279          << OC->getIdentifier()->getNameStart() << ')';
280     }
281   } else if (const auto *OCD = dyn_cast<ObjCCategoryImplDecl>(DC)) {
282     OS << OCD->getClassInterface()->getName() << '(' << OCD->getName() << ')';
283   }
284   OS << ' ' << OMD->getSelector().getAsString() << ']';
285 
286   return internString(OS.str());
287 }
288 
289 StringRef CGDebugInfo::getSelectorName(Selector S) {
290   return internString(S.getAsString());
291 }
292 
293 StringRef CGDebugInfo::getClassName(const RecordDecl *RD) {
294   if (isa<ClassTemplateSpecializationDecl>(RD)) {
295     // Copy this name on the side and use its reference.
296     return internString(GetName(RD));
297   }
298 
299   // quick optimization to avoid having to intern strings that are already
300   // stored reliably elsewhere
301   if (const IdentifierInfo *II = RD->getIdentifier())
302     return II->getName();
303 
304   // The CodeView printer in LLVM wants to see the names of unnamed types
305   // because they need to have a unique identifier.
306   // These names are used to reconstruct the fully qualified type names.
307   if (CGM.getCodeGenOpts().EmitCodeView) {
308     if (const TypedefNameDecl *D = RD->getTypedefNameForAnonDecl()) {
309       assert(RD->getDeclContext() == D->getDeclContext() &&
310              "Typedef should not be in another decl context!");
311       assert(D->getDeclName().getAsIdentifierInfo() &&
312              "Typedef was not named!");
313       return D->getDeclName().getAsIdentifierInfo()->getName();
314     }
315 
316     if (CGM.getLangOpts().CPlusPlus) {
317       StringRef Name;
318 
319       ASTContext &Context = CGM.getContext();
320       if (const DeclaratorDecl *DD = Context.getDeclaratorForUnnamedTagDecl(RD))
321         // Anonymous types without a name for linkage purposes have their
322         // declarator mangled in if they have one.
323         Name = DD->getName();
324       else if (const TypedefNameDecl *TND =
325                    Context.getTypedefNameForUnnamedTagDecl(RD))
326         // Anonymous types without a name for linkage purposes have their
327         // associate typedef mangled in if they have one.
328         Name = TND->getName();
329 
330       // Give lambdas a display name based on their name mangling.
331       if (const CXXRecordDecl *CXXRD = dyn_cast<CXXRecordDecl>(RD))
332         if (CXXRD->isLambda())
333           return internString(
334               CGM.getCXXABI().getMangleContext().getLambdaString(CXXRD));
335 
336       if (!Name.empty()) {
337         SmallString<256> UnnamedType("<unnamed-type-");
338         UnnamedType += Name;
339         UnnamedType += '>';
340         return internString(UnnamedType);
341       }
342     }
343   }
344 
345   return StringRef();
346 }
347 
348 std::optional<llvm::DIFile::ChecksumKind>
349 CGDebugInfo::computeChecksum(FileID FID, SmallString<64> &Checksum) const {
350   Checksum.clear();
351 
352   if (!CGM.getCodeGenOpts().EmitCodeView &&
353       CGM.getCodeGenOpts().DwarfVersion < 5)
354     return std::nullopt;
355 
356   SourceManager &SM = CGM.getContext().getSourceManager();
357   std::optional<llvm::MemoryBufferRef> MemBuffer = SM.getBufferOrNone(FID);
358   if (!MemBuffer)
359     return std::nullopt;
360 
361   auto Data = llvm::arrayRefFromStringRef(MemBuffer->getBuffer());
362   switch (CGM.getCodeGenOpts().getDebugSrcHash()) {
363   case clang::CodeGenOptions::DSH_MD5:
364     llvm::toHex(llvm::MD5::hash(Data), /*LowerCase=*/true, Checksum);
365     return llvm::DIFile::CSK_MD5;
366   case clang::CodeGenOptions::DSH_SHA1:
367     llvm::toHex(llvm::SHA1::hash(Data), /*LowerCase=*/true, Checksum);
368     return llvm::DIFile::CSK_SHA1;
369   case clang::CodeGenOptions::DSH_SHA256:
370     llvm::toHex(llvm::SHA256::hash(Data), /*LowerCase=*/true, Checksum);
371     return llvm::DIFile::CSK_SHA256;
372   }
373   llvm_unreachable("Unhandled DebugSrcHashKind enum");
374 }
375 
376 std::optional<StringRef> CGDebugInfo::getSource(const SourceManager &SM,
377                                                 FileID FID) {
378   if (!CGM.getCodeGenOpts().EmbedSource)
379     return std::nullopt;
380 
381   bool SourceInvalid = false;
382   StringRef Source = SM.getBufferData(FID, &SourceInvalid);
383 
384   if (SourceInvalid)
385     return std::nullopt;
386 
387   return Source;
388 }
389 
390 llvm::DIFile *CGDebugInfo::getOrCreateFile(SourceLocation Loc) {
391   SourceManager &SM = CGM.getContext().getSourceManager();
392   StringRef FileName;
393   FileID FID;
394   std::optional<llvm::DIFile::ChecksumInfo<StringRef>> CSInfo;
395 
396   if (Loc.isInvalid()) {
397     // The DIFile used by the CU is distinct from the main source file. Call
398     // createFile() below for canonicalization if the source file was specified
399     // with an absolute path.
400     FileName = TheCU->getFile()->getFilename();
401     CSInfo = TheCU->getFile()->getChecksum();
402   } else {
403     PresumedLoc PLoc = SM.getPresumedLoc(Loc);
404     FileName = PLoc.getFilename();
405 
406     if (FileName.empty()) {
407       FileName = TheCU->getFile()->getFilename();
408     } else {
409       FileName = PLoc.getFilename();
410     }
411     FID = PLoc.getFileID();
412   }
413 
414   // Cache the results.
415   auto It = DIFileCache.find(FileName.data());
416   if (It != DIFileCache.end()) {
417     // Verify that the information still exists.
418     if (llvm::Metadata *V = It->second)
419       return cast<llvm::DIFile>(V);
420   }
421 
422   // Put Checksum at a scope where it will persist past the createFile call.
423   SmallString<64> Checksum;
424   if (!CSInfo) {
425     std::optional<llvm::DIFile::ChecksumKind> CSKind =
426       computeChecksum(FID, Checksum);
427     if (CSKind)
428       CSInfo.emplace(*CSKind, Checksum);
429   }
430   return createFile(FileName, CSInfo, getSource(SM, SM.getFileID(Loc)));
431 }
432 
433 llvm::DIFile *CGDebugInfo::createFile(
434     StringRef FileName,
435     std::optional<llvm::DIFile::ChecksumInfo<StringRef>> CSInfo,
436     std::optional<StringRef> Source) {
437   StringRef Dir;
438   StringRef File;
439   std::string RemappedFile = remapDIPath(FileName);
440   std::string CurDir = remapDIPath(getCurrentDirname());
441   SmallString<128> DirBuf;
442   SmallString<128> FileBuf;
443   if (llvm::sys::path::is_absolute(RemappedFile)) {
444     // Strip the common prefix (if it is more than just "/" or "C:\") from
445     // current 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 (llvm::sys::path::root_path(DirBuf) == DirBuf) {
453       // Don't strip the common prefix if it is only the root ("/" or "C:\")
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     if (!llvm::sys::path::is_absolute(FileName))
465       Dir = CurDir;
466     File = RemappedFile;
467   }
468   llvm::DIFile *F = DBuilder.createFile(File, Dir, CSInfo, Source);
469   DIFileCache[FileName.data()].reset(F);
470   return F;
471 }
472 
473 std::string CGDebugInfo::remapDIPath(StringRef Path) const {
474   SmallString<256> P = Path;
475   for (auto &[From, To] : llvm::reverse(CGM.getCodeGenOpts().DebugPrefixMap))
476     if (llvm::sys::path::replace_path_prefix(P, From, To))
477       break;
478   return P.str().str();
479 }
480 
481 unsigned CGDebugInfo::getLineNumber(SourceLocation Loc) {
482   if (Loc.isInvalid())
483     return 0;
484   SourceManager &SM = CGM.getContext().getSourceManager();
485   return SM.getPresumedLoc(Loc).getLine();
486 }
487 
488 unsigned CGDebugInfo::getColumnNumber(SourceLocation Loc, bool Force) {
489   // We may not want column information at all.
490   if (!Force && !CGM.getCodeGenOpts().DebugColumnInfo)
491     return 0;
492 
493   // If the location is invalid then use the current column.
494   if (Loc.isInvalid() && CurLoc.isInvalid())
495     return 0;
496   SourceManager &SM = CGM.getContext().getSourceManager();
497   PresumedLoc PLoc = SM.getPresumedLoc(Loc.isValid() ? Loc : CurLoc);
498   return PLoc.isValid() ? PLoc.getColumn() : 0;
499 }
500 
501 StringRef CGDebugInfo::getCurrentDirname() {
502   if (!CGM.getCodeGenOpts().DebugCompilationDir.empty())
503     return CGM.getCodeGenOpts().DebugCompilationDir;
504 
505   if (!CWDName.empty())
506     return CWDName;
507   llvm::ErrorOr<std::string> CWD =
508       CGM.getFileSystem()->getCurrentWorkingDirectory();
509   if (!CWD)
510     return StringRef();
511   return CWDName = internString(*CWD);
512 }
513 
514 void CGDebugInfo::CreateCompileUnit() {
515   SmallString<64> Checksum;
516   std::optional<llvm::DIFile::ChecksumKind> CSKind;
517   std::optional<llvm::DIFile::ChecksumInfo<StringRef>> CSInfo;
518 
519   // Should we be asking the SourceManager for the main file name, instead of
520   // accepting it as an argument? This just causes the main file name to
521   // mismatch with source locations and create extra lexical scopes or
522   // mismatched debug info (a CU with a DW_AT_file of "-", because that's what
523   // the driver passed, but functions/other things have DW_AT_file of "<stdin>"
524   // because that's what the SourceManager says)
525 
526   // Get absolute path name.
527   SourceManager &SM = CGM.getContext().getSourceManager();
528   auto &CGO = CGM.getCodeGenOpts();
529   const LangOptions &LO = CGM.getLangOpts();
530   std::string MainFileName = CGO.MainFileName;
531   if (MainFileName.empty())
532     MainFileName = "<stdin>";
533 
534   // The main file name provided via the "-main-file-name" option contains just
535   // the file name itself with no path information. This file name may have had
536   // a relative path, so we look into the actual file entry for the main
537   // file to determine the real absolute path for the file.
538   std::string MainFileDir;
539   if (OptionalFileEntryRef MainFile =
540           SM.getFileEntryRefForID(SM.getMainFileID())) {
541     MainFileDir = std::string(MainFile->getDir().getName());
542     if (!llvm::sys::path::is_absolute(MainFileName)) {
543       llvm::SmallString<1024> MainFileDirSS(MainFileDir);
544       llvm::sys::path::Style Style =
545           LO.UseTargetPathSeparator
546               ? (CGM.getTarget().getTriple().isOSWindows()
547                      ? llvm::sys::path::Style::windows_backslash
548                      : llvm::sys::path::Style::posix)
549               : llvm::sys::path::Style::native;
550       llvm::sys::path::append(MainFileDirSS, Style, MainFileName);
551       MainFileName = std::string(
552           llvm::sys::path::remove_leading_dotslash(MainFileDirSS, Style));
553     }
554     // If the main file name provided is identical to the input file name, and
555     // if the input file is a preprocessed source, use the module name for
556     // debug info. The module name comes from the name specified in the first
557     // linemarker if the input is a preprocessed source.
558     if (MainFile->getName() == MainFileName &&
559         FrontendOptions::getInputKindForExtension(
560             MainFile->getName().rsplit('.').second)
561             .isPreprocessed())
562       MainFileName = CGM.getModule().getName().str();
563 
564     CSKind = computeChecksum(SM.getMainFileID(), Checksum);
565   }
566 
567   llvm::dwarf::SourceLanguage LangTag;
568   if (LO.CPlusPlus) {
569     if (LO.ObjC)
570       LangTag = llvm::dwarf::DW_LANG_ObjC_plus_plus;
571     else if (CGO.DebugStrictDwarf && CGO.DwarfVersion < 5)
572       LangTag = llvm::dwarf::DW_LANG_C_plus_plus;
573     else if (LO.CPlusPlus14)
574       LangTag = llvm::dwarf::DW_LANG_C_plus_plus_14;
575     else if (LO.CPlusPlus11)
576       LangTag = llvm::dwarf::DW_LANG_C_plus_plus_11;
577     else
578       LangTag = llvm::dwarf::DW_LANG_C_plus_plus;
579   } else if (LO.ObjC) {
580     LangTag = llvm::dwarf::DW_LANG_ObjC;
581   } else if (LO.OpenCL && (!CGM.getCodeGenOpts().DebugStrictDwarf ||
582                            CGM.getCodeGenOpts().DwarfVersion >= 5)) {
583     LangTag = llvm::dwarf::DW_LANG_OpenCL;
584   } else if (LO.RenderScript) {
585     LangTag = llvm::dwarf::DW_LANG_GOOGLE_RenderScript;
586   } else if (LO.C11 && !(CGO.DebugStrictDwarf && CGO.DwarfVersion < 5)) {
587       LangTag = llvm::dwarf::DW_LANG_C11;
588   } else if (LO.C99) {
589     LangTag = llvm::dwarf::DW_LANG_C99;
590   } else {
591     LangTag = llvm::dwarf::DW_LANG_C89;
592   }
593 
594   std::string Producer = getClangFullVersion();
595 
596   // Figure out which version of the ObjC runtime we have.
597   unsigned RuntimeVers = 0;
598   if (LO.ObjC)
599     RuntimeVers = LO.ObjCRuntime.isNonFragile() ? 2 : 1;
600 
601   llvm::DICompileUnit::DebugEmissionKind EmissionKind;
602   switch (DebugKind) {
603   case llvm::codegenoptions::NoDebugInfo:
604   case llvm::codegenoptions::LocTrackingOnly:
605     EmissionKind = llvm::DICompileUnit::NoDebug;
606     break;
607   case llvm::codegenoptions::DebugLineTablesOnly:
608     EmissionKind = llvm::DICompileUnit::LineTablesOnly;
609     break;
610   case llvm::codegenoptions::DebugDirectivesOnly:
611     EmissionKind = llvm::DICompileUnit::DebugDirectivesOnly;
612     break;
613   case llvm::codegenoptions::DebugInfoConstructor:
614   case llvm::codegenoptions::LimitedDebugInfo:
615   case llvm::codegenoptions::FullDebugInfo:
616   case llvm::codegenoptions::UnusedTypeInfo:
617     EmissionKind = llvm::DICompileUnit::FullDebug;
618     break;
619   }
620 
621   uint64_t DwoId = 0;
622   auto &CGOpts = CGM.getCodeGenOpts();
623   // The DIFile used by the CU is distinct from the main source
624   // file. Its directory part specifies what becomes the
625   // DW_AT_comp_dir (the compilation directory), even if the source
626   // file was specified with an absolute path.
627   if (CSKind)
628     CSInfo.emplace(*CSKind, Checksum);
629   llvm::DIFile *CUFile = DBuilder.createFile(
630       remapDIPath(MainFileName), remapDIPath(getCurrentDirname()), CSInfo,
631       getSource(SM, SM.getMainFileID()));
632 
633   StringRef Sysroot, SDK;
634   if (CGM.getCodeGenOpts().getDebuggerTuning() == llvm::DebuggerKind::LLDB) {
635     Sysroot = CGM.getHeaderSearchOpts().Sysroot;
636     auto B = llvm::sys::path::rbegin(Sysroot);
637     auto E = llvm::sys::path::rend(Sysroot);
638     auto It = std::find_if(B, E, [](auto SDK) { return SDK.endswith(".sdk"); });
639     if (It != E)
640       SDK = *It;
641   }
642 
643   llvm::DICompileUnit::DebugNameTableKind NameTableKind =
644       static_cast<llvm::DICompileUnit::DebugNameTableKind>(
645           CGOpts.DebugNameTable);
646   if (CGM.getTarget().getTriple().isNVPTX())
647     NameTableKind = llvm::DICompileUnit::DebugNameTableKind::None;
648   else if (CGM.getTarget().getTriple().getVendor() == llvm::Triple::Apple)
649     NameTableKind = llvm::DICompileUnit::DebugNameTableKind::Apple;
650 
651   // Create new compile unit.
652   TheCU = DBuilder.createCompileUnit(
653       LangTag, CUFile, CGOpts.EmitVersionIdentMetadata ? Producer : "",
654       LO.Optimize || CGOpts.PrepareForLTO || CGOpts.PrepareForThinLTO,
655       CGOpts.DwarfDebugFlags, RuntimeVers, CGOpts.SplitDwarfFile, EmissionKind,
656       DwoId, CGOpts.SplitDwarfInlining, CGOpts.DebugInfoForProfiling,
657       NameTableKind, CGOpts.DebugRangesBaseAddress, remapDIPath(Sysroot), SDK);
658 }
659 
660 llvm::DIType *CGDebugInfo::CreateType(const BuiltinType *BT) {
661   llvm::dwarf::TypeKind Encoding;
662   StringRef BTName;
663   switch (BT->getKind()) {
664 #define BUILTIN_TYPE(Id, SingletonId)
665 #define PLACEHOLDER_TYPE(Id, SingletonId) case BuiltinType::Id:
666 #include "clang/AST/BuiltinTypes.def"
667   case BuiltinType::Dependent:
668     llvm_unreachable("Unexpected builtin type");
669   case BuiltinType::NullPtr:
670     return DBuilder.createNullPtrType();
671   case BuiltinType::Void:
672     return nullptr;
673   case BuiltinType::ObjCClass:
674     if (!ClassTy)
675       ClassTy =
676           DBuilder.createForwardDecl(llvm::dwarf::DW_TAG_structure_type,
677                                      "objc_class", TheCU, TheCU->getFile(), 0);
678     return ClassTy;
679   case BuiltinType::ObjCId: {
680     // typedef struct objc_class *Class;
681     // typedef struct objc_object {
682     //  Class isa;
683     // } *id;
684 
685     if (ObjTy)
686       return ObjTy;
687 
688     if (!ClassTy)
689       ClassTy =
690           DBuilder.createForwardDecl(llvm::dwarf::DW_TAG_structure_type,
691                                      "objc_class", TheCU, TheCU->getFile(), 0);
692 
693     unsigned Size = CGM.getContext().getTypeSize(CGM.getContext().VoidPtrTy);
694 
695     auto *ISATy = DBuilder.createPointerType(ClassTy, Size);
696 
697     ObjTy = DBuilder.createStructType(TheCU, "objc_object", TheCU->getFile(), 0,
698                                       0, 0, llvm::DINode::FlagZero, nullptr,
699                                       llvm::DINodeArray());
700 
701     DBuilder.replaceArrays(
702         ObjTy, DBuilder.getOrCreateArray(&*DBuilder.createMemberType(
703                    ObjTy, "isa", TheCU->getFile(), 0, Size, 0, 0,
704                    llvm::DINode::FlagZero, ISATy)));
705     return ObjTy;
706   }
707   case BuiltinType::ObjCSel: {
708     if (!SelTy)
709       SelTy = DBuilder.createForwardDecl(llvm::dwarf::DW_TAG_structure_type,
710                                          "objc_selector", TheCU,
711                                          TheCU->getFile(), 0);
712     return SelTy;
713   }
714 
715 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix)                   \
716   case BuiltinType::Id:                                                        \
717     return getOrCreateStructPtrType("opencl_" #ImgType "_" #Suffix "_t",       \
718                                     SingletonId);
719 #include "clang/Basic/OpenCLImageTypes.def"
720   case BuiltinType::OCLSampler:
721     return getOrCreateStructPtrType("opencl_sampler_t", OCLSamplerDITy);
722   case BuiltinType::OCLEvent:
723     return getOrCreateStructPtrType("opencl_event_t", OCLEventDITy);
724   case BuiltinType::OCLClkEvent:
725     return getOrCreateStructPtrType("opencl_clk_event_t", OCLClkEventDITy);
726   case BuiltinType::OCLQueue:
727     return getOrCreateStructPtrType("opencl_queue_t", OCLQueueDITy);
728   case BuiltinType::OCLReserveID:
729     return getOrCreateStructPtrType("opencl_reserve_id_t", OCLReserveIDDITy);
730 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
731   case BuiltinType::Id: \
732     return getOrCreateStructPtrType("opencl_" #ExtType, Id##Ty);
733 #include "clang/Basic/OpenCLExtensionTypes.def"
734 
735 #define SVE_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
736 #include "clang/Basic/AArch64SVEACLETypes.def"
737     {
738       ASTContext::BuiltinVectorTypeInfo Info =
739           // For svcount_t, only the lower 2 bytes are relevant.
740           BT->getKind() == BuiltinType::SveCount
741               ? ASTContext::BuiltinVectorTypeInfo(
742                     CGM.getContext().BoolTy, llvm::ElementCount::getFixed(16),
743                     1)
744               : CGM.getContext().getBuiltinVectorTypeInfo(BT);
745 
746       // A single vector of bytes may not suffice as the representation of
747       // svcount_t tuples because of the gap between the active 16bits of
748       // successive tuple members. Currently no such tuples are defined for
749       // svcount_t, so assert that NumVectors is 1.
750       assert((BT->getKind() != BuiltinType::SveCount || Info.NumVectors == 1) &&
751              "Unsupported number of vectors for svcount_t");
752 
753       // Debuggers can't extract 1bit from a vector, so will display a
754       // bitpattern for predicates instead.
755       unsigned NumElems = Info.EC.getKnownMinValue() * Info.NumVectors;
756       if (Info.ElementType == CGM.getContext().BoolTy) {
757         NumElems /= 8;
758         Info.ElementType = CGM.getContext().UnsignedCharTy;
759       }
760 
761       llvm::Metadata *LowerBound, *UpperBound;
762       LowerBound = llvm::ConstantAsMetadata::get(llvm::ConstantInt::getSigned(
763           llvm::Type::getInt64Ty(CGM.getLLVMContext()), 0));
764       if (Info.EC.isScalable()) {
765         unsigned NumElemsPerVG = NumElems / 2;
766         SmallVector<uint64_t, 9> Expr(
767             {llvm::dwarf::DW_OP_constu, NumElemsPerVG, llvm::dwarf::DW_OP_bregx,
768              /* AArch64::VG */ 46, 0, llvm::dwarf::DW_OP_mul,
769              llvm::dwarf::DW_OP_constu, 1, llvm::dwarf::DW_OP_minus});
770         UpperBound = DBuilder.createExpression(Expr);
771       } else
772         UpperBound = llvm::ConstantAsMetadata::get(llvm::ConstantInt::getSigned(
773             llvm::Type::getInt64Ty(CGM.getLLVMContext()), NumElems - 1));
774 
775       llvm::Metadata *Subscript = DBuilder.getOrCreateSubrange(
776           /*count*/ nullptr, LowerBound, UpperBound, /*stride*/ nullptr);
777       llvm::DINodeArray SubscriptArray = DBuilder.getOrCreateArray(Subscript);
778       llvm::DIType *ElemTy =
779           getOrCreateType(Info.ElementType, TheCU->getFile());
780       auto Align = getTypeAlignIfRequired(BT, CGM.getContext());
781       return DBuilder.createVectorType(/*Size*/ 0, Align, ElemTy,
782                                        SubscriptArray);
783     }
784   // It doesn't make sense to generate debug info for PowerPC MMA vector types.
785   // So we return a safe type here to avoid generating an error.
786 #define PPC_VECTOR_TYPE(Name, Id, size) \
787   case BuiltinType::Id:
788 #include "clang/Basic/PPCTypes.def"
789     return CreateType(cast<const BuiltinType>(CGM.getContext().IntTy));
790 
791 #define RVV_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
792 #include "clang/Basic/RISCVVTypes.def"
793     {
794       ASTContext::BuiltinVectorTypeInfo Info =
795           CGM.getContext().getBuiltinVectorTypeInfo(BT);
796 
797       unsigned ElementCount = Info.EC.getKnownMinValue();
798       unsigned SEW = CGM.getContext().getTypeSize(Info.ElementType);
799 
800       bool Fractional = false;
801       unsigned LMUL;
802       unsigned FixedSize = ElementCount * SEW;
803       if (Info.ElementType == CGM.getContext().BoolTy) {
804         // Mask type only occupies one vector register.
805         LMUL = 1;
806       } else if (FixedSize < 64) {
807         // In RVV scalable vector types, we encode 64 bits in the fixed part.
808         Fractional = true;
809         LMUL = 64 / FixedSize;
810       } else {
811         LMUL = FixedSize / 64;
812       }
813 
814       // Element count = (VLENB / SEW) x LMUL
815       SmallVector<uint64_t, 12> Expr(
816           // The DW_OP_bregx operation has two operands: a register which is
817           // specified by an unsigned LEB128 number, followed by a signed LEB128
818           // offset.
819           {llvm::dwarf::DW_OP_bregx, // Read the contents of a register.
820            4096 + 0xC22,             // RISC-V VLENB CSR register.
821            0, // Offset for DW_OP_bregx. It is dummy here.
822            llvm::dwarf::DW_OP_constu,
823            SEW / 8, // SEW is in bits.
824            llvm::dwarf::DW_OP_div, llvm::dwarf::DW_OP_constu, LMUL});
825       if (Fractional)
826         Expr.push_back(llvm::dwarf::DW_OP_div);
827       else
828         Expr.push_back(llvm::dwarf::DW_OP_mul);
829       // Element max index = count - 1
830       Expr.append({llvm::dwarf::DW_OP_constu, 1, llvm::dwarf::DW_OP_minus});
831 
832       auto *LowerBound =
833           llvm::ConstantAsMetadata::get(llvm::ConstantInt::getSigned(
834               llvm::Type::getInt64Ty(CGM.getLLVMContext()), 0));
835       auto *UpperBound = DBuilder.createExpression(Expr);
836       llvm::Metadata *Subscript = DBuilder.getOrCreateSubrange(
837           /*count*/ nullptr, LowerBound, UpperBound, /*stride*/ nullptr);
838       llvm::DINodeArray SubscriptArray = DBuilder.getOrCreateArray(Subscript);
839       llvm::DIType *ElemTy =
840           getOrCreateType(Info.ElementType, TheCU->getFile());
841 
842       auto Align = getTypeAlignIfRequired(BT, CGM.getContext());
843       return DBuilder.createVectorType(/*Size=*/0, Align, ElemTy,
844                                        SubscriptArray);
845     }
846 
847 #define WASM_REF_TYPE(Name, MangledName, Id, SingletonId, AS)                  \
848   case BuiltinType::Id: {                                                      \
849     if (!SingletonId)                                                          \
850       SingletonId =                                                            \
851           DBuilder.createForwardDecl(llvm::dwarf::DW_TAG_structure_type,       \
852                                      MangledName, TheCU, TheCU->getFile(), 0); \
853     return SingletonId;                                                        \
854   }
855 #include "clang/Basic/WebAssemblyReferenceTypes.def"
856 
857   case BuiltinType::UChar:
858   case BuiltinType::Char_U:
859     Encoding = llvm::dwarf::DW_ATE_unsigned_char;
860     break;
861   case BuiltinType::Char_S:
862   case BuiltinType::SChar:
863     Encoding = llvm::dwarf::DW_ATE_signed_char;
864     break;
865   case BuiltinType::Char8:
866   case BuiltinType::Char16:
867   case BuiltinType::Char32:
868     Encoding = llvm::dwarf::DW_ATE_UTF;
869     break;
870   case BuiltinType::UShort:
871   case BuiltinType::UInt:
872   case BuiltinType::UInt128:
873   case BuiltinType::ULong:
874   case BuiltinType::WChar_U:
875   case BuiltinType::ULongLong:
876     Encoding = llvm::dwarf::DW_ATE_unsigned;
877     break;
878   case BuiltinType::Short:
879   case BuiltinType::Int:
880   case BuiltinType::Int128:
881   case BuiltinType::Long:
882   case BuiltinType::WChar_S:
883   case BuiltinType::LongLong:
884     Encoding = llvm::dwarf::DW_ATE_signed;
885     break;
886   case BuiltinType::Bool:
887     Encoding = llvm::dwarf::DW_ATE_boolean;
888     break;
889   case BuiltinType::Half:
890   case BuiltinType::Float:
891   case BuiltinType::LongDouble:
892   case BuiltinType::Float16:
893   case BuiltinType::BFloat16:
894   case BuiltinType::Float128:
895   case BuiltinType::Double:
896   case BuiltinType::Ibm128:
897     // FIXME: For targets where long double, __ibm128 and __float128 have the
898     // same size, they are currently indistinguishable in the debugger without
899     // some special treatment. However, there is currently no consensus on
900     // encoding and this should be updated once a DWARF encoding exists for
901     // distinct floating point types of the same size.
902     Encoding = llvm::dwarf::DW_ATE_float;
903     break;
904   case BuiltinType::ShortAccum:
905   case BuiltinType::Accum:
906   case BuiltinType::LongAccum:
907   case BuiltinType::ShortFract:
908   case BuiltinType::Fract:
909   case BuiltinType::LongFract:
910   case BuiltinType::SatShortFract:
911   case BuiltinType::SatFract:
912   case BuiltinType::SatLongFract:
913   case BuiltinType::SatShortAccum:
914   case BuiltinType::SatAccum:
915   case BuiltinType::SatLongAccum:
916     Encoding = llvm::dwarf::DW_ATE_signed_fixed;
917     break;
918   case BuiltinType::UShortAccum:
919   case BuiltinType::UAccum:
920   case BuiltinType::ULongAccum:
921   case BuiltinType::UShortFract:
922   case BuiltinType::UFract:
923   case BuiltinType::ULongFract:
924   case BuiltinType::SatUShortAccum:
925   case BuiltinType::SatUAccum:
926   case BuiltinType::SatULongAccum:
927   case BuiltinType::SatUShortFract:
928   case BuiltinType::SatUFract:
929   case BuiltinType::SatULongFract:
930     Encoding = llvm::dwarf::DW_ATE_unsigned_fixed;
931     break;
932   }
933 
934   BTName = BT->getName(CGM.getLangOpts());
935   // Bit size and offset of the type.
936   uint64_t Size = CGM.getContext().getTypeSize(BT);
937   return DBuilder.createBasicType(BTName, Size, Encoding);
938 }
939 
940 llvm::DIType *CGDebugInfo::CreateType(const BitIntType *Ty) {
941 
942   StringRef Name = Ty->isUnsigned() ? "unsigned _BitInt" : "_BitInt";
943   llvm::dwarf::TypeKind Encoding = Ty->isUnsigned()
944                                        ? llvm::dwarf::DW_ATE_unsigned
945                                        : llvm::dwarf::DW_ATE_signed;
946 
947   return DBuilder.createBasicType(Name, CGM.getContext().getTypeSize(Ty),
948                                   Encoding);
949 }
950 
951 llvm::DIType *CGDebugInfo::CreateType(const ComplexType *Ty) {
952   // Bit size and offset of the type.
953   llvm::dwarf::TypeKind Encoding = llvm::dwarf::DW_ATE_complex_float;
954   if (Ty->isComplexIntegerType())
955     Encoding = llvm::dwarf::DW_ATE_lo_user;
956 
957   uint64_t Size = CGM.getContext().getTypeSize(Ty);
958   return DBuilder.createBasicType("complex", Size, Encoding);
959 }
960 
961 static void stripUnusedQualifiers(Qualifiers &Q) {
962   // Ignore these qualifiers for now.
963   Q.removeObjCGCAttr();
964   Q.removeAddressSpace();
965   Q.removeObjCLifetime();
966   Q.removeUnaligned();
967 }
968 
969 static llvm::dwarf::Tag getNextQualifier(Qualifiers &Q) {
970   if (Q.hasConst()) {
971     Q.removeConst();
972     return llvm::dwarf::DW_TAG_const_type;
973   }
974   if (Q.hasVolatile()) {
975     Q.removeVolatile();
976     return llvm::dwarf::DW_TAG_volatile_type;
977   }
978   if (Q.hasRestrict()) {
979     Q.removeRestrict();
980     return llvm::dwarf::DW_TAG_restrict_type;
981   }
982   return (llvm::dwarf::Tag)0;
983 }
984 
985 llvm::DIType *CGDebugInfo::CreateQualifiedType(QualType Ty,
986                                                llvm::DIFile *Unit) {
987   QualifierCollector Qc;
988   const Type *T = Qc.strip(Ty);
989 
990   stripUnusedQualifiers(Qc);
991 
992   // We will create one Derived type for one qualifier and recurse to handle any
993   // additional ones.
994   llvm::dwarf::Tag Tag = getNextQualifier(Qc);
995   if (!Tag) {
996     assert(Qc.empty() && "Unknown type qualifier for debug info");
997     return getOrCreateType(QualType(T, 0), Unit);
998   }
999 
1000   auto *FromTy = getOrCreateType(Qc.apply(CGM.getContext(), T), Unit);
1001 
1002   // No need to fill in the Name, Line, Size, Alignment, Offset in case of
1003   // CVR derived types.
1004   return DBuilder.createQualifiedType(Tag, FromTy);
1005 }
1006 
1007 llvm::DIType *CGDebugInfo::CreateQualifiedType(const FunctionProtoType *F,
1008                                                llvm::DIFile *Unit) {
1009   FunctionProtoType::ExtProtoInfo EPI = F->getExtProtoInfo();
1010   Qualifiers &Q = EPI.TypeQuals;
1011   stripUnusedQualifiers(Q);
1012 
1013   // We will create one Derived type for one qualifier and recurse to handle any
1014   // additional ones.
1015   llvm::dwarf::Tag Tag = getNextQualifier(Q);
1016   if (!Tag) {
1017     assert(Q.empty() && "Unknown type qualifier for debug info");
1018     return nullptr;
1019   }
1020 
1021   auto *FromTy =
1022       getOrCreateType(CGM.getContext().getFunctionType(F->getReturnType(),
1023                                                        F->getParamTypes(), EPI),
1024                       Unit);
1025 
1026   // No need to fill in the Name, Line, Size, Alignment, Offset in case of
1027   // CVR derived types.
1028   return DBuilder.createQualifiedType(Tag, FromTy);
1029 }
1030 
1031 llvm::DIType *CGDebugInfo::CreateType(const ObjCObjectPointerType *Ty,
1032                                       llvm::DIFile *Unit) {
1033 
1034   // The frontend treats 'id' as a typedef to an ObjCObjectType,
1035   // whereas 'id<protocol>' is treated as an ObjCPointerType. For the
1036   // debug info, we want to emit 'id' in both cases.
1037   if (Ty->isObjCQualifiedIdType())
1038     return getOrCreateType(CGM.getContext().getObjCIdType(), Unit);
1039 
1040   return CreatePointerLikeType(llvm::dwarf::DW_TAG_pointer_type, Ty,
1041                                Ty->getPointeeType(), Unit);
1042 }
1043 
1044 llvm::DIType *CGDebugInfo::CreateType(const PointerType *Ty,
1045                                       llvm::DIFile *Unit) {
1046   return CreatePointerLikeType(llvm::dwarf::DW_TAG_pointer_type, Ty,
1047                                Ty->getPointeeType(), Unit);
1048 }
1049 
1050 /// \return whether a C++ mangling exists for the type defined by TD.
1051 static bool hasCXXMangling(const TagDecl *TD, llvm::DICompileUnit *TheCU) {
1052   switch (TheCU->getSourceLanguage()) {
1053   case llvm::dwarf::DW_LANG_C_plus_plus:
1054   case llvm::dwarf::DW_LANG_C_plus_plus_11:
1055   case llvm::dwarf::DW_LANG_C_plus_plus_14:
1056     return true;
1057   case llvm::dwarf::DW_LANG_ObjC_plus_plus:
1058     return isa<CXXRecordDecl>(TD) || isa<EnumDecl>(TD);
1059   default:
1060     return false;
1061   }
1062 }
1063 
1064 // Determines if the debug info for this tag declaration needs a type
1065 // identifier. The purpose of the unique identifier is to deduplicate type
1066 // information for identical types across TUs. Because of the C++ one definition
1067 // rule (ODR), it is valid to assume that the type is defined the same way in
1068 // every TU and its debug info is equivalent.
1069 //
1070 // C does not have the ODR, and it is common for codebases to contain multiple
1071 // different definitions of a struct with the same name in different TUs.
1072 // Therefore, if the type doesn't have a C++ mangling, don't give it an
1073 // identifer. Type information in C is smaller and simpler than C++ type
1074 // information, so the increase in debug info size is negligible.
1075 //
1076 // If the type is not externally visible, it should be unique to the current TU,
1077 // and should not need an identifier to participate in type deduplication.
1078 // However, when emitting CodeView, the format internally uses these
1079 // unique type name identifers for references between debug info. For example,
1080 // the method of a class in an anonymous namespace uses the identifer to refer
1081 // to its parent class. The Microsoft C++ ABI attempts to provide unique names
1082 // for such types, so when emitting CodeView, always use identifiers for C++
1083 // types. This may create problems when attempting to emit CodeView when the MS
1084 // C++ ABI is not in use.
1085 static bool needsTypeIdentifier(const TagDecl *TD, CodeGenModule &CGM,
1086                                 llvm::DICompileUnit *TheCU) {
1087   // We only add a type identifier for types with C++ name mangling.
1088   if (!hasCXXMangling(TD, TheCU))
1089     return false;
1090 
1091   // Externally visible types with C++ mangling need a type identifier.
1092   if (TD->isExternallyVisible())
1093     return true;
1094 
1095   // CodeView types with C++ mangling need a type identifier.
1096   if (CGM.getCodeGenOpts().EmitCodeView)
1097     return true;
1098 
1099   return false;
1100 }
1101 
1102 // Returns a unique type identifier string if one exists, or an empty string.
1103 static SmallString<256> getTypeIdentifier(const TagType *Ty, CodeGenModule &CGM,
1104                                           llvm::DICompileUnit *TheCU) {
1105   SmallString<256> Identifier;
1106   const TagDecl *TD = Ty->getDecl();
1107 
1108   if (!needsTypeIdentifier(TD, CGM, TheCU))
1109     return Identifier;
1110   if (const auto *RD = dyn_cast<CXXRecordDecl>(TD))
1111     if (RD->getDefinition())
1112       if (RD->isDynamicClass() &&
1113           CGM.getVTableLinkage(RD) == llvm::GlobalValue::ExternalLinkage)
1114         return Identifier;
1115 
1116   // TODO: This is using the RTTI name. Is there a better way to get
1117   // a unique string for a type?
1118   llvm::raw_svector_ostream Out(Identifier);
1119   CGM.getCXXABI().getMangleContext().mangleCXXRTTIName(QualType(Ty, 0), Out);
1120   return Identifier;
1121 }
1122 
1123 /// \return the appropriate DWARF tag for a composite type.
1124 static llvm::dwarf::Tag getTagForRecord(const RecordDecl *RD) {
1125   llvm::dwarf::Tag Tag;
1126   if (RD->isStruct() || RD->isInterface())
1127     Tag = llvm::dwarf::DW_TAG_structure_type;
1128   else if (RD->isUnion())
1129     Tag = llvm::dwarf::DW_TAG_union_type;
1130   else {
1131     // FIXME: This could be a struct type giving a default visibility different
1132     // than C++ class type, but needs llvm metadata changes first.
1133     assert(RD->isClass());
1134     Tag = llvm::dwarf::DW_TAG_class_type;
1135   }
1136   return Tag;
1137 }
1138 
1139 llvm::DICompositeType *
1140 CGDebugInfo::getOrCreateRecordFwdDecl(const RecordType *Ty,
1141                                       llvm::DIScope *Ctx) {
1142   const RecordDecl *RD = Ty->getDecl();
1143   if (llvm::DIType *T = getTypeOrNull(CGM.getContext().getRecordType(RD)))
1144     return cast<llvm::DICompositeType>(T);
1145   llvm::DIFile *DefUnit = getOrCreateFile(RD->getLocation());
1146   const unsigned Line =
1147       getLineNumber(RD->getLocation().isValid() ? RD->getLocation() : CurLoc);
1148   StringRef RDName = getClassName(RD);
1149 
1150   uint64_t Size = 0;
1151   uint32_t Align = 0;
1152 
1153   const RecordDecl *D = RD->getDefinition();
1154   if (D && D->isCompleteDefinition())
1155     Size = CGM.getContext().getTypeSize(Ty);
1156 
1157   llvm::DINode::DIFlags Flags = llvm::DINode::FlagFwdDecl;
1158 
1159   // Add flag to nontrivial forward declarations. To be consistent with MSVC,
1160   // add the flag if a record has no definition because we don't know whether
1161   // it will be trivial or not.
1162   if (const CXXRecordDecl *CXXRD = dyn_cast<CXXRecordDecl>(RD))
1163     if (!CXXRD->hasDefinition() ||
1164         (CXXRD->hasDefinition() && !CXXRD->isTrivial()))
1165       Flags |= llvm::DINode::FlagNonTrivial;
1166 
1167   // Create the type.
1168   SmallString<256> Identifier;
1169   // Don't include a linkage name in line tables only.
1170   if (CGM.getCodeGenOpts().hasReducedDebugInfo())
1171     Identifier = getTypeIdentifier(Ty, CGM, TheCU);
1172   llvm::DICompositeType *RetTy = DBuilder.createReplaceableCompositeType(
1173       getTagForRecord(RD), RDName, Ctx, DefUnit, Line, 0, Size, Align, Flags,
1174       Identifier);
1175   if (CGM.getCodeGenOpts().DebugFwdTemplateParams)
1176     if (auto *TSpecial = dyn_cast<ClassTemplateSpecializationDecl>(RD))
1177       DBuilder.replaceArrays(RetTy, llvm::DINodeArray(),
1178                              CollectCXXTemplateParams(TSpecial, DefUnit));
1179   ReplaceMap.emplace_back(
1180       std::piecewise_construct, std::make_tuple(Ty),
1181       std::make_tuple(static_cast<llvm::Metadata *>(RetTy)));
1182   return RetTy;
1183 }
1184 
1185 llvm::DIType *CGDebugInfo::CreatePointerLikeType(llvm::dwarf::Tag Tag,
1186                                                  const Type *Ty,
1187                                                  QualType PointeeTy,
1188                                                  llvm::DIFile *Unit) {
1189   // Bit size, align and offset of the type.
1190   // Size is always the size of a pointer.
1191   uint64_t Size = CGM.getContext().getTypeSize(Ty);
1192   auto Align = getTypeAlignIfRequired(Ty, CGM.getContext());
1193   std::optional<unsigned> DWARFAddressSpace =
1194       CGM.getTarget().getDWARFAddressSpace(
1195           CGM.getTypes().getTargetAddressSpace(PointeeTy));
1196 
1197   SmallVector<llvm::Metadata *, 4> Annots;
1198   auto *BTFAttrTy = dyn_cast<BTFTagAttributedType>(PointeeTy);
1199   while (BTFAttrTy) {
1200     StringRef Tag = BTFAttrTy->getAttr()->getBTFTypeTag();
1201     if (!Tag.empty()) {
1202       llvm::Metadata *Ops[2] = {
1203           llvm::MDString::get(CGM.getLLVMContext(), StringRef("btf_type_tag")),
1204           llvm::MDString::get(CGM.getLLVMContext(), Tag)};
1205       Annots.insert(Annots.begin(),
1206                     llvm::MDNode::get(CGM.getLLVMContext(), Ops));
1207     }
1208     BTFAttrTy = dyn_cast<BTFTagAttributedType>(BTFAttrTy->getWrappedType());
1209   }
1210 
1211   llvm::DINodeArray Annotations = nullptr;
1212   if (Annots.size() > 0)
1213     Annotations = DBuilder.getOrCreateArray(Annots);
1214 
1215   if (Tag == llvm::dwarf::DW_TAG_reference_type ||
1216       Tag == llvm::dwarf::DW_TAG_rvalue_reference_type)
1217     return DBuilder.createReferenceType(Tag, getOrCreateType(PointeeTy, Unit),
1218                                         Size, Align, DWARFAddressSpace);
1219   else
1220     return DBuilder.createPointerType(getOrCreateType(PointeeTy, Unit), Size,
1221                                       Align, DWARFAddressSpace, StringRef(),
1222                                       Annotations);
1223 }
1224 
1225 llvm::DIType *CGDebugInfo::getOrCreateStructPtrType(StringRef Name,
1226                                                     llvm::DIType *&Cache) {
1227   if (Cache)
1228     return Cache;
1229   Cache = DBuilder.createForwardDecl(llvm::dwarf::DW_TAG_structure_type, Name,
1230                                      TheCU, TheCU->getFile(), 0);
1231   unsigned Size = CGM.getContext().getTypeSize(CGM.getContext().VoidPtrTy);
1232   Cache = DBuilder.createPointerType(Cache, Size);
1233   return Cache;
1234 }
1235 
1236 uint64_t CGDebugInfo::collectDefaultElementTypesForBlockPointer(
1237     const BlockPointerType *Ty, llvm::DIFile *Unit, llvm::DIDerivedType *DescTy,
1238     unsigned LineNo, SmallVectorImpl<llvm::Metadata *> &EltTys) {
1239   QualType FType;
1240 
1241   // Advanced by calls to CreateMemberType in increments of FType, then
1242   // returned as the overall size of the default elements.
1243   uint64_t FieldOffset = 0;
1244 
1245   // Blocks in OpenCL have unique constraints which make the standard fields
1246   // redundant while requiring size and align fields for enqueue_kernel. See
1247   // initializeForBlockHeader in CGBlocks.cpp
1248   if (CGM.getLangOpts().OpenCL) {
1249     FType = CGM.getContext().IntTy;
1250     EltTys.push_back(CreateMemberType(Unit, FType, "__size", &FieldOffset));
1251     EltTys.push_back(CreateMemberType(Unit, FType, "__align", &FieldOffset));
1252   } else {
1253     FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy);
1254     EltTys.push_back(CreateMemberType(Unit, FType, "__isa", &FieldOffset));
1255     FType = CGM.getContext().IntTy;
1256     EltTys.push_back(CreateMemberType(Unit, FType, "__flags", &FieldOffset));
1257     EltTys.push_back(CreateMemberType(Unit, FType, "__reserved", &FieldOffset));
1258     FType = CGM.getContext().getPointerType(Ty->getPointeeType());
1259     EltTys.push_back(CreateMemberType(Unit, FType, "__FuncPtr", &FieldOffset));
1260     FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy);
1261     uint64_t FieldSize = CGM.getContext().getTypeSize(Ty);
1262     uint32_t FieldAlign = CGM.getContext().getTypeAlign(Ty);
1263     EltTys.push_back(DBuilder.createMemberType(
1264         Unit, "__descriptor", nullptr, LineNo, FieldSize, FieldAlign,
1265         FieldOffset, llvm::DINode::FlagZero, DescTy));
1266     FieldOffset += FieldSize;
1267   }
1268 
1269   return FieldOffset;
1270 }
1271 
1272 llvm::DIType *CGDebugInfo::CreateType(const BlockPointerType *Ty,
1273                                       llvm::DIFile *Unit) {
1274   SmallVector<llvm::Metadata *, 8> EltTys;
1275   QualType FType;
1276   uint64_t FieldOffset;
1277   llvm::DINodeArray Elements;
1278 
1279   FieldOffset = 0;
1280   FType = CGM.getContext().UnsignedLongTy;
1281   EltTys.push_back(CreateMemberType(Unit, FType, "reserved", &FieldOffset));
1282   EltTys.push_back(CreateMemberType(Unit, FType, "Size", &FieldOffset));
1283 
1284   Elements = DBuilder.getOrCreateArray(EltTys);
1285   EltTys.clear();
1286 
1287   llvm::DINode::DIFlags Flags = llvm::DINode::FlagAppleBlock;
1288 
1289   auto *EltTy =
1290       DBuilder.createStructType(Unit, "__block_descriptor", nullptr, 0,
1291                                 FieldOffset, 0, Flags, nullptr, Elements);
1292 
1293   // Bit size, align and offset of the type.
1294   uint64_t Size = CGM.getContext().getTypeSize(Ty);
1295 
1296   auto *DescTy = DBuilder.createPointerType(EltTy, Size);
1297 
1298   FieldOffset = collectDefaultElementTypesForBlockPointer(Ty, Unit, DescTy,
1299                                                           0, EltTys);
1300 
1301   Elements = DBuilder.getOrCreateArray(EltTys);
1302 
1303   // The __block_literal_generic structs are marked with a special
1304   // DW_AT_APPLE_BLOCK attribute and are an implementation detail only
1305   // the debugger needs to know about. To allow type uniquing, emit
1306   // them without a name or a location.
1307   EltTy = DBuilder.createStructType(Unit, "", nullptr, 0, FieldOffset, 0,
1308                                     Flags, nullptr, Elements);
1309 
1310   return DBuilder.createPointerType(EltTy, Size);
1311 }
1312 
1313 llvm::DIType *CGDebugInfo::CreateType(const TemplateSpecializationType *Ty,
1314                                       llvm::DIFile *Unit) {
1315   assert(Ty->isTypeAlias());
1316   llvm::DIType *Src = getOrCreateType(Ty->getAliasedType(), Unit);
1317 
1318   const TemplateDecl *TD = Ty->getTemplateName().getAsTemplateDecl();
1319   if (isa<BuiltinTemplateDecl>(TD))
1320     return Src;
1321 
1322   const auto *AliasDecl = cast<TypeAliasTemplateDecl>(TD)->getTemplatedDecl();
1323   if (AliasDecl->hasAttr<NoDebugAttr>())
1324     return Src;
1325 
1326   SmallString<128> NS;
1327   llvm::raw_svector_ostream OS(NS);
1328 
1329   auto PP = getPrintingPolicy();
1330   Ty->getTemplateName().print(OS, PP, TemplateName::Qualified::None);
1331 
1332   // Disable PrintCanonicalTypes here because we want
1333   // the DW_AT_name to benefit from the TypePrinter's ability
1334   // to skip defaulted template arguments.
1335   //
1336   // FIXME: Once -gsimple-template-names is enabled by default
1337   // and we attach template parameters to alias template DIEs
1338   // we don't need to worry about customizing the PrintingPolicy
1339   // here anymore.
1340   PP.PrintCanonicalTypes = false;
1341   printTemplateArgumentList(OS, Ty->template_arguments(), PP,
1342                             TD->getTemplateParameters());
1343 
1344   SourceLocation Loc = AliasDecl->getLocation();
1345   return DBuilder.createTypedef(Src, OS.str(), getOrCreateFile(Loc),
1346                                 getLineNumber(Loc),
1347                                 getDeclContextDescriptor(AliasDecl));
1348 }
1349 
1350 /// Convert an AccessSpecifier into the corresponding DINode flag.
1351 /// As an optimization, return 0 if the access specifier equals the
1352 /// default for the containing type.
1353 static llvm::DINode::DIFlags getAccessFlag(AccessSpecifier Access,
1354                                            const RecordDecl *RD) {
1355   AccessSpecifier Default = clang::AS_none;
1356   if (RD && RD->isClass())
1357     Default = clang::AS_private;
1358   else if (RD && (RD->isStruct() || RD->isUnion()))
1359     Default = clang::AS_public;
1360 
1361   if (Access == Default)
1362     return llvm::DINode::FlagZero;
1363 
1364   switch (Access) {
1365   case clang::AS_private:
1366     return llvm::DINode::FlagPrivate;
1367   case clang::AS_protected:
1368     return llvm::DINode::FlagProtected;
1369   case clang::AS_public:
1370     return llvm::DINode::FlagPublic;
1371   case clang::AS_none:
1372     return llvm::DINode::FlagZero;
1373   }
1374   llvm_unreachable("unexpected access enumerator");
1375 }
1376 
1377 llvm::DIType *CGDebugInfo::CreateType(const TypedefType *Ty,
1378                                       llvm::DIFile *Unit) {
1379   llvm::DIType *Underlying =
1380       getOrCreateType(Ty->getDecl()->getUnderlyingType(), Unit);
1381 
1382   if (Ty->getDecl()->hasAttr<NoDebugAttr>())
1383     return Underlying;
1384 
1385   // We don't set size information, but do specify where the typedef was
1386   // declared.
1387   SourceLocation Loc = Ty->getDecl()->getLocation();
1388 
1389   uint32_t Align = getDeclAlignIfRequired(Ty->getDecl(), CGM.getContext());
1390   // Typedefs are derived from some other type.
1391   llvm::DINodeArray Annotations = CollectBTFDeclTagAnnotations(Ty->getDecl());
1392 
1393   llvm::DINode::DIFlags Flags = llvm::DINode::FlagZero;
1394   const DeclContext *DC = Ty->getDecl()->getDeclContext();
1395   if (isa<RecordDecl>(DC))
1396     Flags = getAccessFlag(Ty->getDecl()->getAccess(), cast<RecordDecl>(DC));
1397 
1398   return DBuilder.createTypedef(Underlying, Ty->getDecl()->getName(),
1399                                 getOrCreateFile(Loc), getLineNumber(Loc),
1400                                 getDeclContextDescriptor(Ty->getDecl()), Align,
1401                                 Flags, Annotations);
1402 }
1403 
1404 static unsigned getDwarfCC(CallingConv CC) {
1405   switch (CC) {
1406   case CC_C:
1407     // Avoid emitting DW_AT_calling_convention if the C convention was used.
1408     return 0;
1409 
1410   case CC_X86StdCall:
1411     return llvm::dwarf::DW_CC_BORLAND_stdcall;
1412   case CC_X86FastCall:
1413     return llvm::dwarf::DW_CC_BORLAND_msfastcall;
1414   case CC_X86ThisCall:
1415     return llvm::dwarf::DW_CC_BORLAND_thiscall;
1416   case CC_X86VectorCall:
1417     return llvm::dwarf::DW_CC_LLVM_vectorcall;
1418   case CC_X86Pascal:
1419     return llvm::dwarf::DW_CC_BORLAND_pascal;
1420   case CC_Win64:
1421     return llvm::dwarf::DW_CC_LLVM_Win64;
1422   case CC_X86_64SysV:
1423     return llvm::dwarf::DW_CC_LLVM_X86_64SysV;
1424   case CC_AAPCS:
1425   case CC_AArch64VectorCall:
1426   case CC_AArch64SVEPCS:
1427     return llvm::dwarf::DW_CC_LLVM_AAPCS;
1428   case CC_AAPCS_VFP:
1429     return llvm::dwarf::DW_CC_LLVM_AAPCS_VFP;
1430   case CC_IntelOclBicc:
1431     return llvm::dwarf::DW_CC_LLVM_IntelOclBicc;
1432   case CC_SpirFunction:
1433     return llvm::dwarf::DW_CC_LLVM_SpirFunction;
1434   case CC_OpenCLKernel:
1435   case CC_AMDGPUKernelCall:
1436     return llvm::dwarf::DW_CC_LLVM_OpenCLKernel;
1437   case CC_Swift:
1438     return llvm::dwarf::DW_CC_LLVM_Swift;
1439   case CC_SwiftAsync:
1440     // [FIXME: swiftasynccc] Update to SwiftAsync once LLVM support lands.
1441     return llvm::dwarf::DW_CC_LLVM_Swift;
1442   case CC_PreserveMost:
1443     return llvm::dwarf::DW_CC_LLVM_PreserveMost;
1444   case CC_PreserveAll:
1445     return llvm::dwarf::DW_CC_LLVM_PreserveAll;
1446   case CC_X86RegCall:
1447     return llvm::dwarf::DW_CC_LLVM_X86RegCall;
1448   }
1449   return 0;
1450 }
1451 
1452 static llvm::DINode::DIFlags getRefFlags(const FunctionProtoType *Func) {
1453   llvm::DINode::DIFlags Flags = llvm::DINode::FlagZero;
1454   if (Func->getExtProtoInfo().RefQualifier == RQ_LValue)
1455     Flags |= llvm::DINode::FlagLValueReference;
1456   if (Func->getExtProtoInfo().RefQualifier == RQ_RValue)
1457     Flags |= llvm::DINode::FlagRValueReference;
1458   return Flags;
1459 }
1460 
1461 llvm::DIType *CGDebugInfo::CreateType(const FunctionType *Ty,
1462                                       llvm::DIFile *Unit) {
1463   const auto *FPT = dyn_cast<FunctionProtoType>(Ty);
1464   if (FPT) {
1465     if (llvm::DIType *QTy = CreateQualifiedType(FPT, Unit))
1466       return QTy;
1467   }
1468 
1469   // Create the type without any qualifiers
1470 
1471   SmallVector<llvm::Metadata *, 16> EltTys;
1472 
1473   // Add the result type at least.
1474   EltTys.push_back(getOrCreateType(Ty->getReturnType(), Unit));
1475 
1476   llvm::DINode::DIFlags Flags = llvm::DINode::FlagZero;
1477   // Set up remainder of arguments if there is a prototype.
1478   // otherwise emit it as a variadic function.
1479   if (!FPT) {
1480     EltTys.push_back(DBuilder.createUnspecifiedParameter());
1481   } else {
1482     Flags = getRefFlags(FPT);
1483     for (const QualType &ParamType : FPT->param_types())
1484       EltTys.push_back(getOrCreateType(ParamType, Unit));
1485     if (FPT->isVariadic())
1486       EltTys.push_back(DBuilder.createUnspecifiedParameter());
1487   }
1488 
1489   llvm::DITypeRefArray EltTypeArray = DBuilder.getOrCreateTypeArray(EltTys);
1490   llvm::DIType *F = DBuilder.createSubroutineType(
1491       EltTypeArray, Flags, getDwarfCC(Ty->getCallConv()));
1492   return F;
1493 }
1494 
1495 llvm::DIDerivedType *
1496 CGDebugInfo::createBitFieldType(const FieldDecl *BitFieldDecl,
1497                                 llvm::DIScope *RecordTy, const RecordDecl *RD) {
1498   StringRef Name = BitFieldDecl->getName();
1499   QualType Ty = BitFieldDecl->getType();
1500   SourceLocation Loc = BitFieldDecl->getLocation();
1501   llvm::DIFile *VUnit = getOrCreateFile(Loc);
1502   llvm::DIType *DebugType = getOrCreateType(Ty, VUnit);
1503 
1504   // Get the location for the field.
1505   llvm::DIFile *File = getOrCreateFile(Loc);
1506   unsigned Line = getLineNumber(Loc);
1507 
1508   const CGBitFieldInfo &BitFieldInfo =
1509       CGM.getTypes().getCGRecordLayout(RD).getBitFieldInfo(BitFieldDecl);
1510   uint64_t SizeInBits = BitFieldInfo.Size;
1511   assert(SizeInBits > 0 && "found named 0-width bitfield");
1512   uint64_t StorageOffsetInBits =
1513       CGM.getContext().toBits(BitFieldInfo.StorageOffset);
1514   uint64_t Offset = BitFieldInfo.Offset;
1515   // The bit offsets for big endian machines are reversed for big
1516   // endian target, compensate for that as the DIDerivedType requires
1517   // un-reversed offsets.
1518   if (CGM.getDataLayout().isBigEndian())
1519     Offset = BitFieldInfo.StorageSize - BitFieldInfo.Size - Offset;
1520   uint64_t OffsetInBits = StorageOffsetInBits + Offset;
1521   llvm::DINode::DIFlags Flags = getAccessFlag(BitFieldDecl->getAccess(), RD);
1522   llvm::DINodeArray Annotations = CollectBTFDeclTagAnnotations(BitFieldDecl);
1523   return DBuilder.createBitFieldMemberType(
1524       RecordTy, Name, File, Line, SizeInBits, OffsetInBits, StorageOffsetInBits,
1525       Flags, DebugType, Annotations);
1526 }
1527 
1528 llvm::DIDerivedType *CGDebugInfo::createBitFieldSeparatorIfNeeded(
1529     const FieldDecl *BitFieldDecl, const llvm::DIDerivedType *BitFieldDI,
1530     llvm::ArrayRef<llvm::Metadata *> PreviousFieldsDI, const RecordDecl *RD) {
1531 
1532   if (!CGM.getTargetCodeGenInfo().shouldEmitDWARFBitFieldSeparators())
1533     return nullptr;
1534 
1535   /*
1536   Add a *single* zero-bitfield separator between two non-zero bitfields
1537   separated by one or more zero-bitfields. This is used to distinguish between
1538   structures such the ones below, where the memory layout is the same, but how
1539   the ABI assigns fields to registers differs.
1540 
1541   struct foo {
1542     int space[4];
1543     char a : 8; // on amdgpu, passed on v4
1544     char b : 8;
1545     char x : 8;
1546     char y : 8;
1547   };
1548   struct bar {
1549     int space[4];
1550     char a : 8; // on amdgpu, passed on v4
1551     char b : 8;
1552     char : 0;
1553     char x : 8; // passed on v5
1554     char y : 8;
1555   };
1556   */
1557   if (PreviousFieldsDI.empty())
1558     return nullptr;
1559 
1560   // If we already emitted metadata for a 0-length bitfield, nothing to do here.
1561   auto *PreviousMDEntry =
1562       PreviousFieldsDI.empty() ? nullptr : PreviousFieldsDI.back();
1563   auto *PreviousMDField =
1564       dyn_cast_or_null<llvm::DIDerivedType>(PreviousMDEntry);
1565   if (!PreviousMDField || !PreviousMDField->isBitField() ||
1566       PreviousMDField->getSizeInBits() == 0)
1567     return nullptr;
1568 
1569   auto PreviousBitfield = RD->field_begin();
1570   std::advance(PreviousBitfield, BitFieldDecl->getFieldIndex() - 1);
1571 
1572   assert(PreviousBitfield->isBitField());
1573 
1574   ASTContext &Context = CGM.getContext();
1575   if (!PreviousBitfield->isZeroLengthBitField(Context))
1576     return nullptr;
1577 
1578   QualType Ty = PreviousBitfield->getType();
1579   SourceLocation Loc = PreviousBitfield->getLocation();
1580   llvm::DIFile *VUnit = getOrCreateFile(Loc);
1581   llvm::DIType *DebugType = getOrCreateType(Ty, VUnit);
1582   llvm::DIScope *RecordTy = BitFieldDI->getScope();
1583 
1584   llvm::DIFile *File = getOrCreateFile(Loc);
1585   unsigned Line = getLineNumber(Loc);
1586 
1587   uint64_t StorageOffsetInBits =
1588       cast<llvm::ConstantInt>(BitFieldDI->getStorageOffsetInBits())
1589           ->getZExtValue();
1590 
1591   llvm::DINode::DIFlags Flags =
1592       getAccessFlag(PreviousBitfield->getAccess(), RD);
1593   llvm::DINodeArray Annotations =
1594       CollectBTFDeclTagAnnotations(*PreviousBitfield);
1595   return DBuilder.createBitFieldMemberType(
1596       RecordTy, "", File, Line, 0, StorageOffsetInBits, StorageOffsetInBits,
1597       Flags, DebugType, Annotations);
1598 }
1599 
1600 llvm::DIType *CGDebugInfo::createFieldType(
1601     StringRef name, QualType type, SourceLocation loc, AccessSpecifier AS,
1602     uint64_t offsetInBits, uint32_t AlignInBits, llvm::DIFile *tunit,
1603     llvm::DIScope *scope, const RecordDecl *RD, llvm::DINodeArray Annotations) {
1604   llvm::DIType *debugType = getOrCreateType(type, tunit);
1605 
1606   // Get the location for the field.
1607   llvm::DIFile *file = getOrCreateFile(loc);
1608   const unsigned line = getLineNumber(loc.isValid() ? loc : CurLoc);
1609 
1610   uint64_t SizeInBits = 0;
1611   auto Align = AlignInBits;
1612   if (!type->isIncompleteArrayType()) {
1613     TypeInfo TI = CGM.getContext().getTypeInfo(type);
1614     SizeInBits = TI.Width;
1615     if (!Align)
1616       Align = getTypeAlignIfRequired(type, CGM.getContext());
1617   }
1618 
1619   llvm::DINode::DIFlags flags = getAccessFlag(AS, RD);
1620   return DBuilder.createMemberType(scope, name, file, line, SizeInBits, Align,
1621                                    offsetInBits, flags, debugType, Annotations);
1622 }
1623 
1624 void CGDebugInfo::CollectRecordLambdaFields(
1625     const CXXRecordDecl *CXXDecl, SmallVectorImpl<llvm::Metadata *> &elements,
1626     llvm::DIType *RecordTy) {
1627   // For C++11 Lambdas a Field will be the same as a Capture, but the Capture
1628   // has the name and the location of the variable so we should iterate over
1629   // both concurrently.
1630   const ASTRecordLayout &layout = CGM.getContext().getASTRecordLayout(CXXDecl);
1631   RecordDecl::field_iterator Field = CXXDecl->field_begin();
1632   unsigned fieldno = 0;
1633   for (CXXRecordDecl::capture_const_iterator I = CXXDecl->captures_begin(),
1634                                              E = CXXDecl->captures_end();
1635        I != E; ++I, ++Field, ++fieldno) {
1636     const LambdaCapture &C = *I;
1637     if (C.capturesVariable()) {
1638       SourceLocation Loc = C.getLocation();
1639       assert(!Field->isBitField() && "lambdas don't have bitfield members!");
1640       ValueDecl *V = C.getCapturedVar();
1641       StringRef VName = V->getName();
1642       llvm::DIFile *VUnit = getOrCreateFile(Loc);
1643       auto Align = getDeclAlignIfRequired(V, CGM.getContext());
1644       llvm::DIType *FieldType = createFieldType(
1645           VName, Field->getType(), Loc, Field->getAccess(),
1646           layout.getFieldOffset(fieldno), Align, VUnit, RecordTy, CXXDecl);
1647       elements.push_back(FieldType);
1648     } else if (C.capturesThis()) {
1649       // TODO: Need to handle 'this' in some way by probably renaming the
1650       // this of the lambda class and having a field member of 'this' or
1651       // by using AT_object_pointer for the function and having that be
1652       // used as 'this' for semantic references.
1653       FieldDecl *f = *Field;
1654       llvm::DIFile *VUnit = getOrCreateFile(f->getLocation());
1655       QualType type = f->getType();
1656       llvm::DIType *fieldType = createFieldType(
1657           "this", type, f->getLocation(), f->getAccess(),
1658           layout.getFieldOffset(fieldno), VUnit, RecordTy, CXXDecl);
1659 
1660       elements.push_back(fieldType);
1661     }
1662   }
1663 }
1664 
1665 llvm::DIDerivedType *
1666 CGDebugInfo::CreateRecordStaticField(const VarDecl *Var, llvm::DIType *RecordTy,
1667                                      const RecordDecl *RD) {
1668   // Create the descriptor for the static variable, with or without
1669   // constant initializers.
1670   Var = Var->getCanonicalDecl();
1671   llvm::DIFile *VUnit = getOrCreateFile(Var->getLocation());
1672   llvm::DIType *VTy = getOrCreateType(Var->getType(), VUnit);
1673 
1674   unsigned LineNumber = getLineNumber(Var->getLocation());
1675   StringRef VName = Var->getName();
1676   llvm::Constant *C = nullptr;
1677   if (Var->getInit()) {
1678     const APValue *Value = Var->evaluateValue();
1679     if (Value) {
1680       if (Value->isInt())
1681         C = llvm::ConstantInt::get(CGM.getLLVMContext(), Value->getInt());
1682       if (Value->isFloat())
1683         C = llvm::ConstantFP::get(CGM.getLLVMContext(), Value->getFloat());
1684     }
1685   }
1686 
1687   llvm::DINode::DIFlags Flags = getAccessFlag(Var->getAccess(), RD);
1688   auto Align = getDeclAlignIfRequired(Var, CGM.getContext());
1689   llvm::DIDerivedType *GV = DBuilder.createStaticMemberType(
1690       RecordTy, VName, VUnit, LineNumber, VTy, Flags, C, Align);
1691   StaticDataMemberCache[Var->getCanonicalDecl()].reset(GV);
1692   return GV;
1693 }
1694 
1695 void CGDebugInfo::CollectRecordNormalField(
1696     const FieldDecl *field, uint64_t OffsetInBits, llvm::DIFile *tunit,
1697     SmallVectorImpl<llvm::Metadata *> &elements, llvm::DIType *RecordTy,
1698     const RecordDecl *RD) {
1699   StringRef name = field->getName();
1700   QualType type = field->getType();
1701 
1702   // Ignore unnamed fields unless they're anonymous structs/unions.
1703   if (name.empty() && !type->isRecordType())
1704     return;
1705 
1706   llvm::DIType *FieldType;
1707   if (field->isBitField()) {
1708     llvm::DIDerivedType *BitFieldType;
1709     FieldType = BitFieldType = createBitFieldType(field, RecordTy, RD);
1710     if (llvm::DIType *Separator =
1711             createBitFieldSeparatorIfNeeded(field, BitFieldType, elements, RD))
1712       elements.push_back(Separator);
1713   } else {
1714     auto Align = getDeclAlignIfRequired(field, CGM.getContext());
1715     llvm::DINodeArray Annotations = CollectBTFDeclTagAnnotations(field);
1716     FieldType =
1717         createFieldType(name, type, field->getLocation(), field->getAccess(),
1718                         OffsetInBits, Align, tunit, RecordTy, RD, Annotations);
1719   }
1720 
1721   elements.push_back(FieldType);
1722 }
1723 
1724 void CGDebugInfo::CollectRecordNestedType(
1725     const TypeDecl *TD, SmallVectorImpl<llvm::Metadata *> &elements) {
1726   QualType Ty = CGM.getContext().getTypeDeclType(TD);
1727   // Injected class names are not considered nested records.
1728   if (isa<InjectedClassNameType>(Ty))
1729     return;
1730   SourceLocation Loc = TD->getLocation();
1731   llvm::DIType *nestedType = getOrCreateType(Ty, getOrCreateFile(Loc));
1732   elements.push_back(nestedType);
1733 }
1734 
1735 void CGDebugInfo::CollectRecordFields(
1736     const RecordDecl *record, llvm::DIFile *tunit,
1737     SmallVectorImpl<llvm::Metadata *> &elements,
1738     llvm::DICompositeType *RecordTy) {
1739   const auto *CXXDecl = dyn_cast<CXXRecordDecl>(record);
1740 
1741   if (CXXDecl && CXXDecl->isLambda())
1742     CollectRecordLambdaFields(CXXDecl, elements, RecordTy);
1743   else {
1744     const ASTRecordLayout &layout = CGM.getContext().getASTRecordLayout(record);
1745 
1746     // Field number for non-static fields.
1747     unsigned fieldNo = 0;
1748 
1749     // Static and non-static members should appear in the same order as
1750     // the corresponding declarations in the source program.
1751     for (const auto *I : record->decls())
1752       if (const auto *V = dyn_cast<VarDecl>(I)) {
1753         if (V->hasAttr<NoDebugAttr>())
1754           continue;
1755 
1756         // Skip variable template specializations when emitting CodeView. MSVC
1757         // doesn't emit them.
1758         if (CGM.getCodeGenOpts().EmitCodeView &&
1759             isa<VarTemplateSpecializationDecl>(V))
1760           continue;
1761 
1762         if (isa<VarTemplatePartialSpecializationDecl>(V))
1763           continue;
1764 
1765         // Reuse the existing static member declaration if one exists
1766         auto MI = StaticDataMemberCache.find(V->getCanonicalDecl());
1767         if (MI != StaticDataMemberCache.end()) {
1768           assert(MI->second &&
1769                  "Static data member declaration should still exist");
1770           elements.push_back(MI->second);
1771         } else {
1772           auto Field = CreateRecordStaticField(V, RecordTy, record);
1773           elements.push_back(Field);
1774         }
1775       } else if (const auto *field = dyn_cast<FieldDecl>(I)) {
1776         CollectRecordNormalField(field, layout.getFieldOffset(fieldNo), tunit,
1777                                  elements, RecordTy, record);
1778 
1779         // Bump field number for next field.
1780         ++fieldNo;
1781       } else if (CGM.getCodeGenOpts().EmitCodeView) {
1782         // Debug info for nested types is included in the member list only for
1783         // CodeView.
1784         if (const auto *nestedType = dyn_cast<TypeDecl>(I)) {
1785           // MSVC doesn't generate nested type for anonymous struct/union.
1786           if (isa<RecordDecl>(I) &&
1787               cast<RecordDecl>(I)->isAnonymousStructOrUnion())
1788             continue;
1789           if (!nestedType->isImplicit() &&
1790               nestedType->getDeclContext() == record)
1791             CollectRecordNestedType(nestedType, elements);
1792         }
1793       }
1794   }
1795 }
1796 
1797 llvm::DISubroutineType *
1798 CGDebugInfo::getOrCreateMethodType(const CXXMethodDecl *Method,
1799                                    llvm::DIFile *Unit) {
1800   const FunctionProtoType *Func = Method->getType()->getAs<FunctionProtoType>();
1801   if (Method->isStatic())
1802     return cast_or_null<llvm::DISubroutineType>(
1803         getOrCreateType(QualType(Func, 0), Unit));
1804   return getOrCreateInstanceMethodType(Method->getThisType(), Func, Unit);
1805 }
1806 
1807 llvm::DISubroutineType *CGDebugInfo::getOrCreateInstanceMethodType(
1808     QualType ThisPtr, const FunctionProtoType *Func, llvm::DIFile *Unit) {
1809   FunctionProtoType::ExtProtoInfo EPI = Func->getExtProtoInfo();
1810   Qualifiers &Qc = EPI.TypeQuals;
1811   Qc.removeConst();
1812   Qc.removeVolatile();
1813   Qc.removeRestrict();
1814   Qc.removeUnaligned();
1815   // Keep the removed qualifiers in sync with
1816   // CreateQualifiedType(const FunctionPrototype*, DIFile *Unit)
1817   // On a 'real' member function type, these qualifiers are carried on the type
1818   // of the first parameter, not as separate DW_TAG_const_type (etc) decorator
1819   // tags around them. (But, in the raw function types with qualifiers, they have
1820   // to use wrapper types.)
1821 
1822   // Add "this" pointer.
1823   const auto *OriginalFunc = cast<llvm::DISubroutineType>(
1824       getOrCreateType(CGM.getContext().getFunctionType(
1825                           Func->getReturnType(), Func->getParamTypes(), EPI),
1826                       Unit));
1827   llvm::DITypeRefArray Args = OriginalFunc->getTypeArray();
1828   assert(Args.size() && "Invalid number of arguments!");
1829 
1830   SmallVector<llvm::Metadata *, 16> Elts;
1831 
1832   // First element is always return type. For 'void' functions it is NULL.
1833   Elts.push_back(Args[0]);
1834 
1835   // "this" pointer is always first argument.
1836   const CXXRecordDecl *RD = ThisPtr->getPointeeCXXRecordDecl();
1837   if (isa<ClassTemplateSpecializationDecl>(RD)) {
1838     // Create pointer type directly in this case.
1839     const PointerType *ThisPtrTy = cast<PointerType>(ThisPtr);
1840     uint64_t Size = CGM.getContext().getTypeSize(ThisPtrTy);
1841     auto Align = getTypeAlignIfRequired(ThisPtrTy, CGM.getContext());
1842     llvm::DIType *PointeeType =
1843         getOrCreateType(ThisPtrTy->getPointeeType(), Unit);
1844     llvm::DIType *ThisPtrType =
1845         DBuilder.createPointerType(PointeeType, Size, Align);
1846     TypeCache[ThisPtr.getAsOpaquePtr()].reset(ThisPtrType);
1847     // TODO: This and the artificial type below are misleading, the
1848     // types aren't artificial the argument is, but the current
1849     // metadata doesn't represent that.
1850     ThisPtrType = DBuilder.createObjectPointerType(ThisPtrType);
1851     Elts.push_back(ThisPtrType);
1852   } else {
1853     llvm::DIType *ThisPtrType = getOrCreateType(ThisPtr, Unit);
1854     TypeCache[ThisPtr.getAsOpaquePtr()].reset(ThisPtrType);
1855     ThisPtrType = DBuilder.createObjectPointerType(ThisPtrType);
1856     Elts.push_back(ThisPtrType);
1857   }
1858 
1859   // Copy rest of the arguments.
1860   for (unsigned i = 1, e = Args.size(); i != e; ++i)
1861     Elts.push_back(Args[i]);
1862 
1863   llvm::DITypeRefArray EltTypeArray = DBuilder.getOrCreateTypeArray(Elts);
1864 
1865   return DBuilder.createSubroutineType(EltTypeArray, OriginalFunc->getFlags(),
1866                                        getDwarfCC(Func->getCallConv()));
1867 }
1868 
1869 /// isFunctionLocalClass - Return true if CXXRecordDecl is defined
1870 /// inside a function.
1871 static bool isFunctionLocalClass(const CXXRecordDecl *RD) {
1872   if (const auto *NRD = dyn_cast<CXXRecordDecl>(RD->getDeclContext()))
1873     return isFunctionLocalClass(NRD);
1874   if (isa<FunctionDecl>(RD->getDeclContext()))
1875     return true;
1876   return false;
1877 }
1878 
1879 llvm::DISubprogram *CGDebugInfo::CreateCXXMemberFunction(
1880     const CXXMethodDecl *Method, llvm::DIFile *Unit, llvm::DIType *RecordTy) {
1881   bool IsCtorOrDtor =
1882       isa<CXXConstructorDecl>(Method) || isa<CXXDestructorDecl>(Method);
1883 
1884   StringRef MethodName = getFunctionName(Method);
1885   llvm::DISubroutineType *MethodTy = getOrCreateMethodType(Method, Unit);
1886 
1887   // Since a single ctor/dtor corresponds to multiple functions, it doesn't
1888   // make sense to give a single ctor/dtor a linkage name.
1889   StringRef MethodLinkageName;
1890   // FIXME: 'isFunctionLocalClass' seems like an arbitrary/unintentional
1891   // property to use here. It may've been intended to model "is non-external
1892   // type" but misses cases of non-function-local but non-external classes such
1893   // as those in anonymous namespaces as well as the reverse - external types
1894   // that are function local, such as those in (non-local) inline functions.
1895   if (!IsCtorOrDtor && !isFunctionLocalClass(Method->getParent()))
1896     MethodLinkageName = CGM.getMangledName(Method);
1897 
1898   // Get the location for the method.
1899   llvm::DIFile *MethodDefUnit = nullptr;
1900   unsigned MethodLine = 0;
1901   if (!Method->isImplicit()) {
1902     MethodDefUnit = getOrCreateFile(Method->getLocation());
1903     MethodLine = getLineNumber(Method->getLocation());
1904   }
1905 
1906   // Collect virtual method info.
1907   llvm::DIType *ContainingType = nullptr;
1908   unsigned VIndex = 0;
1909   llvm::DINode::DIFlags Flags = llvm::DINode::FlagZero;
1910   llvm::DISubprogram::DISPFlags SPFlags = llvm::DISubprogram::SPFlagZero;
1911   int ThisAdjustment = 0;
1912 
1913   if (VTableContextBase::hasVtableSlot(Method)) {
1914     if (Method->isPure())
1915       SPFlags |= llvm::DISubprogram::SPFlagPureVirtual;
1916     else
1917       SPFlags |= llvm::DISubprogram::SPFlagVirtual;
1918 
1919     if (CGM.getTarget().getCXXABI().isItaniumFamily()) {
1920       // It doesn't make sense to give a virtual destructor a vtable index,
1921       // since a single destructor has two entries in the vtable.
1922       if (!isa<CXXDestructorDecl>(Method))
1923         VIndex = CGM.getItaniumVTableContext().getMethodVTableIndex(Method);
1924     } else {
1925       // Emit MS ABI vftable information.  There is only one entry for the
1926       // deleting dtor.
1927       const auto *DD = dyn_cast<CXXDestructorDecl>(Method);
1928       GlobalDecl GD = DD ? GlobalDecl(DD, Dtor_Deleting) : GlobalDecl(Method);
1929       MethodVFTableLocation ML =
1930           CGM.getMicrosoftVTableContext().getMethodVFTableLocation(GD);
1931       VIndex = ML.Index;
1932 
1933       // CodeView only records the vftable offset in the class that introduces
1934       // the virtual method. This is possible because, unlike Itanium, the MS
1935       // C++ ABI does not include all virtual methods from non-primary bases in
1936       // the vtable for the most derived class. For example, if C inherits from
1937       // A and B, C's primary vftable will not include B's virtual methods.
1938       if (Method->size_overridden_methods() == 0)
1939         Flags |= llvm::DINode::FlagIntroducedVirtual;
1940 
1941       // The 'this' adjustment accounts for both the virtual and non-virtual
1942       // portions of the adjustment. Presumably the debugger only uses it when
1943       // it knows the dynamic type of an object.
1944       ThisAdjustment = CGM.getCXXABI()
1945                            .getVirtualFunctionPrologueThisAdjustment(GD)
1946                            .getQuantity();
1947     }
1948     ContainingType = RecordTy;
1949   }
1950 
1951   if (Method->getCanonicalDecl()->isDeleted())
1952     SPFlags |= llvm::DISubprogram::SPFlagDeleted;
1953 
1954   if (Method->isNoReturn())
1955     Flags |= llvm::DINode::FlagNoReturn;
1956 
1957   if (Method->isStatic())
1958     Flags |= llvm::DINode::FlagStaticMember;
1959   if (Method->isImplicit())
1960     Flags |= llvm::DINode::FlagArtificial;
1961   Flags |= getAccessFlag(Method->getAccess(), Method->getParent());
1962   if (const auto *CXXC = dyn_cast<CXXConstructorDecl>(Method)) {
1963     if (CXXC->isExplicit())
1964       Flags |= llvm::DINode::FlagExplicit;
1965   } else if (const auto *CXXC = dyn_cast<CXXConversionDecl>(Method)) {
1966     if (CXXC->isExplicit())
1967       Flags |= llvm::DINode::FlagExplicit;
1968   }
1969   if (Method->hasPrototype())
1970     Flags |= llvm::DINode::FlagPrototyped;
1971   if (Method->getRefQualifier() == RQ_LValue)
1972     Flags |= llvm::DINode::FlagLValueReference;
1973   if (Method->getRefQualifier() == RQ_RValue)
1974     Flags |= llvm::DINode::FlagRValueReference;
1975   if (!Method->isExternallyVisible())
1976     SPFlags |= llvm::DISubprogram::SPFlagLocalToUnit;
1977   if (CGM.getLangOpts().Optimize)
1978     SPFlags |= llvm::DISubprogram::SPFlagOptimized;
1979 
1980   // In this debug mode, emit type info for a class when its constructor type
1981   // info is emitted.
1982   if (DebugKind == llvm::codegenoptions::DebugInfoConstructor)
1983     if (const CXXConstructorDecl *CD = dyn_cast<CXXConstructorDecl>(Method))
1984       completeUnusedClass(*CD->getParent());
1985 
1986   llvm::DINodeArray TParamsArray = CollectFunctionTemplateParams(Method, Unit);
1987   llvm::DISubprogram *SP = DBuilder.createMethod(
1988       RecordTy, MethodName, MethodLinkageName, MethodDefUnit, MethodLine,
1989       MethodTy, VIndex, ThisAdjustment, ContainingType, Flags, SPFlags,
1990       TParamsArray.get());
1991 
1992   SPCache[Method->getCanonicalDecl()].reset(SP);
1993 
1994   return SP;
1995 }
1996 
1997 void CGDebugInfo::CollectCXXMemberFunctions(
1998     const CXXRecordDecl *RD, llvm::DIFile *Unit,
1999     SmallVectorImpl<llvm::Metadata *> &EltTys, llvm::DIType *RecordTy) {
2000 
2001   // Since we want more than just the individual member decls if we
2002   // have templated functions iterate over every declaration to gather
2003   // the functions.
2004   for (const auto *I : RD->decls()) {
2005     const auto *Method = dyn_cast<CXXMethodDecl>(I);
2006     // If the member is implicit, don't add it to the member list. This avoids
2007     // the member being added to type units by LLVM, while still allowing it
2008     // to be emitted into the type declaration/reference inside the compile
2009     // unit.
2010     // Ditto 'nodebug' methods, for consistency with CodeGenFunction.cpp.
2011     // FIXME: Handle Using(Shadow?)Decls here to create
2012     // DW_TAG_imported_declarations inside the class for base decls brought into
2013     // derived classes. GDB doesn't seem to notice/leverage these when I tried
2014     // it, so I'm not rushing to fix this. (GCC seems to produce them, if
2015     // referenced)
2016     if (!Method || Method->isImplicit() || Method->hasAttr<NoDebugAttr>())
2017       continue;
2018 
2019     if (Method->getType()->castAs<FunctionProtoType>()->getContainedAutoType())
2020       continue;
2021 
2022     // Reuse the existing member function declaration if it exists.
2023     // It may be associated with the declaration of the type & should be
2024     // reused as we're building the definition.
2025     //
2026     // This situation can arise in the vtable-based debug info reduction where
2027     // implicit members are emitted in a non-vtable TU.
2028     auto MI = SPCache.find(Method->getCanonicalDecl());
2029     EltTys.push_back(MI == SPCache.end()
2030                          ? CreateCXXMemberFunction(Method, Unit, RecordTy)
2031                          : static_cast<llvm::Metadata *>(MI->second));
2032   }
2033 }
2034 
2035 void CGDebugInfo::CollectCXXBases(const CXXRecordDecl *RD, llvm::DIFile *Unit,
2036                                   SmallVectorImpl<llvm::Metadata *> &EltTys,
2037                                   llvm::DIType *RecordTy) {
2038   llvm::DenseSet<CanonicalDeclPtr<const CXXRecordDecl>> SeenTypes;
2039   CollectCXXBasesAux(RD, Unit, EltTys, RecordTy, RD->bases(), SeenTypes,
2040                      llvm::DINode::FlagZero);
2041 
2042   // If we are generating CodeView debug info, we also need to emit records for
2043   // indirect virtual base classes.
2044   if (CGM.getCodeGenOpts().EmitCodeView) {
2045     CollectCXXBasesAux(RD, Unit, EltTys, RecordTy, RD->vbases(), SeenTypes,
2046                        llvm::DINode::FlagIndirectVirtualBase);
2047   }
2048 }
2049 
2050 void CGDebugInfo::CollectCXXBasesAux(
2051     const CXXRecordDecl *RD, llvm::DIFile *Unit,
2052     SmallVectorImpl<llvm::Metadata *> &EltTys, llvm::DIType *RecordTy,
2053     const CXXRecordDecl::base_class_const_range &Bases,
2054     llvm::DenseSet<CanonicalDeclPtr<const CXXRecordDecl>> &SeenTypes,
2055     llvm::DINode::DIFlags StartingFlags) {
2056   const ASTRecordLayout &RL = CGM.getContext().getASTRecordLayout(RD);
2057   for (const auto &BI : Bases) {
2058     const auto *Base =
2059         cast<CXXRecordDecl>(BI.getType()->castAs<RecordType>()->getDecl());
2060     if (!SeenTypes.insert(Base).second)
2061       continue;
2062     auto *BaseTy = getOrCreateType(BI.getType(), Unit);
2063     llvm::DINode::DIFlags BFlags = StartingFlags;
2064     uint64_t BaseOffset;
2065     uint32_t VBPtrOffset = 0;
2066 
2067     if (BI.isVirtual()) {
2068       if (CGM.getTarget().getCXXABI().isItaniumFamily()) {
2069         // virtual base offset offset is -ve. The code generator emits dwarf
2070         // expression where it expects +ve number.
2071         BaseOffset = 0 - CGM.getItaniumVTableContext()
2072                              .getVirtualBaseOffsetOffset(RD, Base)
2073                              .getQuantity();
2074       } else {
2075         // In the MS ABI, store the vbtable offset, which is analogous to the
2076         // vbase offset offset in Itanium.
2077         BaseOffset =
2078             4 * CGM.getMicrosoftVTableContext().getVBTableIndex(RD, Base);
2079         VBPtrOffset = CGM.getContext()
2080                           .getASTRecordLayout(RD)
2081                           .getVBPtrOffset()
2082                           .getQuantity();
2083       }
2084       BFlags |= llvm::DINode::FlagVirtual;
2085     } else
2086       BaseOffset = CGM.getContext().toBits(RL.getBaseClassOffset(Base));
2087     // FIXME: Inconsistent units for BaseOffset. It is in bytes when
2088     // BI->isVirtual() and bits when not.
2089 
2090     BFlags |= getAccessFlag(BI.getAccessSpecifier(), RD);
2091     llvm::DIType *DTy = DBuilder.createInheritance(RecordTy, BaseTy, BaseOffset,
2092                                                    VBPtrOffset, BFlags);
2093     EltTys.push_back(DTy);
2094   }
2095 }
2096 
2097 llvm::DINodeArray
2098 CGDebugInfo::CollectTemplateParams(std::optional<TemplateArgs> OArgs,
2099                                    llvm::DIFile *Unit) {
2100   if (!OArgs)
2101     return llvm::DINodeArray();
2102   TemplateArgs &Args = *OArgs;
2103   SmallVector<llvm::Metadata *, 16> TemplateParams;
2104   for (unsigned i = 0, e = Args.Args.size(); i != e; ++i) {
2105     const TemplateArgument &TA = Args.Args[i];
2106     StringRef Name;
2107     const bool defaultParameter = TA.getIsDefaulted();
2108     if (Args.TList)
2109       Name = Args.TList->getParam(i)->getName();
2110 
2111     switch (TA.getKind()) {
2112     case TemplateArgument::Type: {
2113       llvm::DIType *TTy = getOrCreateType(TA.getAsType(), Unit);
2114       TemplateParams.push_back(DBuilder.createTemplateTypeParameter(
2115           TheCU, Name, TTy, defaultParameter));
2116 
2117     } break;
2118     case TemplateArgument::Integral: {
2119       llvm::DIType *TTy = getOrCreateType(TA.getIntegralType(), Unit);
2120       TemplateParams.push_back(DBuilder.createTemplateValueParameter(
2121           TheCU, Name, TTy, defaultParameter,
2122           llvm::ConstantInt::get(CGM.getLLVMContext(), TA.getAsIntegral())));
2123     } break;
2124     case TemplateArgument::Declaration: {
2125       const ValueDecl *D = TA.getAsDecl();
2126       QualType T = TA.getParamTypeForDecl().getDesugaredType(CGM.getContext());
2127       llvm::DIType *TTy = getOrCreateType(T, Unit);
2128       llvm::Constant *V = nullptr;
2129       // Skip retrieve the value if that template parameter has cuda device
2130       // attribute, i.e. that value is not available at the host side.
2131       if (!CGM.getLangOpts().CUDA || CGM.getLangOpts().CUDAIsDevice ||
2132           !D->hasAttr<CUDADeviceAttr>()) {
2133         const CXXMethodDecl *MD;
2134         // Variable pointer template parameters have a value that is the address
2135         // of the variable.
2136         if (const auto *VD = dyn_cast<VarDecl>(D))
2137           V = CGM.GetAddrOfGlobalVar(VD);
2138         // Member function pointers have special support for building them,
2139         // though this is currently unsupported in LLVM CodeGen.
2140         else if ((MD = dyn_cast<CXXMethodDecl>(D)) && MD->isInstance())
2141           V = CGM.getCXXABI().EmitMemberFunctionPointer(MD);
2142         else if (const auto *FD = dyn_cast<FunctionDecl>(D))
2143           V = CGM.GetAddrOfFunction(FD);
2144         // Member data pointers have special handling too to compute the fixed
2145         // offset within the object.
2146         else if (const auto *MPT =
2147                      dyn_cast<MemberPointerType>(T.getTypePtr())) {
2148           // These five lines (& possibly the above member function pointer
2149           // handling) might be able to be refactored to use similar code in
2150           // CodeGenModule::getMemberPointerConstant
2151           uint64_t fieldOffset = CGM.getContext().getFieldOffset(D);
2152           CharUnits chars =
2153               CGM.getContext().toCharUnitsFromBits((int64_t)fieldOffset);
2154           V = CGM.getCXXABI().EmitMemberDataPointer(MPT, chars);
2155         } else if (const auto *GD = dyn_cast<MSGuidDecl>(D)) {
2156           V = CGM.GetAddrOfMSGuidDecl(GD).getPointer();
2157         } else if (const auto *TPO = dyn_cast<TemplateParamObjectDecl>(D)) {
2158           if (T->isRecordType())
2159             V = ConstantEmitter(CGM).emitAbstract(
2160                 SourceLocation(), TPO->getValue(), TPO->getType());
2161           else
2162             V = CGM.GetAddrOfTemplateParamObject(TPO).getPointer();
2163         }
2164         assert(V && "Failed to find template parameter pointer");
2165         V = V->stripPointerCasts();
2166       }
2167       TemplateParams.push_back(DBuilder.createTemplateValueParameter(
2168           TheCU, Name, TTy, defaultParameter, cast_or_null<llvm::Constant>(V)));
2169     } break;
2170     case TemplateArgument::NullPtr: {
2171       QualType T = TA.getNullPtrType();
2172       llvm::DIType *TTy = getOrCreateType(T, Unit);
2173       llvm::Constant *V = nullptr;
2174       // Special case member data pointer null values since they're actually -1
2175       // instead of zero.
2176       if (const auto *MPT = dyn_cast<MemberPointerType>(T.getTypePtr()))
2177         // But treat member function pointers as simple zero integers because
2178         // it's easier than having a special case in LLVM's CodeGen. If LLVM
2179         // CodeGen grows handling for values of non-null member function
2180         // pointers then perhaps we could remove this special case and rely on
2181         // EmitNullMemberPointer for member function pointers.
2182         if (MPT->isMemberDataPointer())
2183           V = CGM.getCXXABI().EmitNullMemberPointer(MPT);
2184       if (!V)
2185         V = llvm::ConstantInt::get(CGM.Int8Ty, 0);
2186       TemplateParams.push_back(DBuilder.createTemplateValueParameter(
2187           TheCU, Name, TTy, defaultParameter, V));
2188     } break;
2189     case TemplateArgument::Template: {
2190       std::string QualName;
2191       llvm::raw_string_ostream OS(QualName);
2192       TA.getAsTemplate().getAsTemplateDecl()->printQualifiedName(
2193           OS, getPrintingPolicy());
2194       TemplateParams.push_back(DBuilder.createTemplateTemplateParameter(
2195           TheCU, Name, nullptr, OS.str(), defaultParameter));
2196       break;
2197     }
2198     case TemplateArgument::Pack:
2199       TemplateParams.push_back(DBuilder.createTemplateParameterPack(
2200           TheCU, Name, nullptr,
2201           CollectTemplateParams({{nullptr, TA.getPackAsArray()}}, Unit)));
2202       break;
2203     case TemplateArgument::Expression: {
2204       const Expr *E = TA.getAsExpr();
2205       QualType T = E->getType();
2206       if (E->isGLValue())
2207         T = CGM.getContext().getLValueReferenceType(T);
2208       llvm::Constant *V = ConstantEmitter(CGM).emitAbstract(E, T);
2209       assert(V && "Expression in template argument isn't constant");
2210       llvm::DIType *TTy = getOrCreateType(T, Unit);
2211       TemplateParams.push_back(DBuilder.createTemplateValueParameter(
2212           TheCU, Name, TTy, defaultParameter, V->stripPointerCasts()));
2213     } break;
2214     // And the following should never occur:
2215     case TemplateArgument::TemplateExpansion:
2216     case TemplateArgument::Null:
2217       llvm_unreachable(
2218           "These argument types shouldn't exist in concrete types");
2219     }
2220   }
2221   return DBuilder.getOrCreateArray(TemplateParams);
2222 }
2223 
2224 std::optional<CGDebugInfo::TemplateArgs>
2225 CGDebugInfo::GetTemplateArgs(const FunctionDecl *FD) const {
2226   if (FD->getTemplatedKind() ==
2227       FunctionDecl::TK_FunctionTemplateSpecialization) {
2228     const TemplateParameterList *TList = FD->getTemplateSpecializationInfo()
2229                                              ->getTemplate()
2230                                              ->getTemplateParameters();
2231     return {{TList, FD->getTemplateSpecializationArgs()->asArray()}};
2232   }
2233   return std::nullopt;
2234 }
2235 std::optional<CGDebugInfo::TemplateArgs>
2236 CGDebugInfo::GetTemplateArgs(const VarDecl *VD) const {
2237   // Always get the full list of parameters, not just the ones from the
2238   // specialization. A partial specialization may have fewer parameters than
2239   // there are arguments.
2240   auto *TS = dyn_cast<VarTemplateSpecializationDecl>(VD);
2241   if (!TS)
2242     return std::nullopt;
2243   VarTemplateDecl *T = TS->getSpecializedTemplate();
2244   const TemplateParameterList *TList = T->getTemplateParameters();
2245   auto TA = TS->getTemplateArgs().asArray();
2246   return {{TList, TA}};
2247 }
2248 std::optional<CGDebugInfo::TemplateArgs>
2249 CGDebugInfo::GetTemplateArgs(const RecordDecl *RD) const {
2250   if (auto *TSpecial = dyn_cast<ClassTemplateSpecializationDecl>(RD)) {
2251     // Always get the full list of parameters, not just the ones from the
2252     // specialization. A partial specialization may have fewer parameters than
2253     // there are arguments.
2254     TemplateParameterList *TPList =
2255         TSpecial->getSpecializedTemplate()->getTemplateParameters();
2256     const TemplateArgumentList &TAList = TSpecial->getTemplateArgs();
2257     return {{TPList, TAList.asArray()}};
2258   }
2259   return std::nullopt;
2260 }
2261 
2262 llvm::DINodeArray
2263 CGDebugInfo::CollectFunctionTemplateParams(const FunctionDecl *FD,
2264                                            llvm::DIFile *Unit) {
2265   return CollectTemplateParams(GetTemplateArgs(FD), Unit);
2266 }
2267 
2268 llvm::DINodeArray CGDebugInfo::CollectVarTemplateParams(const VarDecl *VL,
2269                                                         llvm::DIFile *Unit) {
2270   return CollectTemplateParams(GetTemplateArgs(VL), Unit);
2271 }
2272 
2273 llvm::DINodeArray CGDebugInfo::CollectCXXTemplateParams(const RecordDecl *RD,
2274                                                         llvm::DIFile *Unit) {
2275   return CollectTemplateParams(GetTemplateArgs(RD), Unit);
2276 }
2277 
2278 llvm::DINodeArray CGDebugInfo::CollectBTFDeclTagAnnotations(const Decl *D) {
2279   if (!D->hasAttr<BTFDeclTagAttr>())
2280     return nullptr;
2281 
2282   SmallVector<llvm::Metadata *, 4> Annotations;
2283   for (const auto *I : D->specific_attrs<BTFDeclTagAttr>()) {
2284     llvm::Metadata *Ops[2] = {
2285         llvm::MDString::get(CGM.getLLVMContext(), StringRef("btf_decl_tag")),
2286         llvm::MDString::get(CGM.getLLVMContext(), I->getBTFDeclTag())};
2287     Annotations.push_back(llvm::MDNode::get(CGM.getLLVMContext(), Ops));
2288   }
2289   return DBuilder.getOrCreateArray(Annotations);
2290 }
2291 
2292 llvm::DIType *CGDebugInfo::getOrCreateVTablePtrType(llvm::DIFile *Unit) {
2293   if (VTablePtrType)
2294     return VTablePtrType;
2295 
2296   ASTContext &Context = CGM.getContext();
2297 
2298   /* Function type */
2299   llvm::Metadata *STy = getOrCreateType(Context.IntTy, Unit);
2300   llvm::DITypeRefArray SElements = DBuilder.getOrCreateTypeArray(STy);
2301   llvm::DIType *SubTy = DBuilder.createSubroutineType(SElements);
2302   unsigned Size = Context.getTypeSize(Context.VoidPtrTy);
2303   unsigned VtblPtrAddressSpace = CGM.getTarget().getVtblPtrAddressSpace();
2304   std::optional<unsigned> DWARFAddressSpace =
2305       CGM.getTarget().getDWARFAddressSpace(VtblPtrAddressSpace);
2306 
2307   llvm::DIType *vtbl_ptr_type = DBuilder.createPointerType(
2308       SubTy, Size, 0, DWARFAddressSpace, "__vtbl_ptr_type");
2309   VTablePtrType = DBuilder.createPointerType(vtbl_ptr_type, Size);
2310   return VTablePtrType;
2311 }
2312 
2313 StringRef CGDebugInfo::getVTableName(const CXXRecordDecl *RD) {
2314   // Copy the gdb compatible name on the side and use its reference.
2315   return internString("_vptr$", RD->getNameAsString());
2316 }
2317 
2318 StringRef CGDebugInfo::getDynamicInitializerName(const VarDecl *VD,
2319                                                  DynamicInitKind StubKind,
2320                                                  llvm::Function *InitFn) {
2321   // If we're not emitting codeview, use the mangled name. For Itanium, this is
2322   // arbitrary.
2323   if (!CGM.getCodeGenOpts().EmitCodeView ||
2324       StubKind == DynamicInitKind::GlobalArrayDestructor)
2325     return InitFn->getName();
2326 
2327   // Print the normal qualified name for the variable, then break off the last
2328   // NNS, and add the appropriate other text. Clang always prints the global
2329   // variable name without template arguments, so we can use rsplit("::") and
2330   // then recombine the pieces.
2331   SmallString<128> QualifiedGV;
2332   StringRef Quals;
2333   StringRef GVName;
2334   {
2335     llvm::raw_svector_ostream OS(QualifiedGV);
2336     VD->printQualifiedName(OS, getPrintingPolicy());
2337     std::tie(Quals, GVName) = OS.str().rsplit("::");
2338     if (GVName.empty())
2339       std::swap(Quals, GVName);
2340   }
2341 
2342   SmallString<128> InitName;
2343   llvm::raw_svector_ostream OS(InitName);
2344   if (!Quals.empty())
2345     OS << Quals << "::";
2346 
2347   switch (StubKind) {
2348   case DynamicInitKind::NoStub:
2349   case DynamicInitKind::GlobalArrayDestructor:
2350     llvm_unreachable("not an initializer");
2351   case DynamicInitKind::Initializer:
2352     OS << "`dynamic initializer for '";
2353     break;
2354   case DynamicInitKind::AtExit:
2355     OS << "`dynamic atexit destructor for '";
2356     break;
2357   }
2358 
2359   OS << GVName;
2360 
2361   // Add any template specialization args.
2362   if (const auto *VTpl = dyn_cast<VarTemplateSpecializationDecl>(VD)) {
2363     printTemplateArgumentList(OS, VTpl->getTemplateArgs().asArray(),
2364                               getPrintingPolicy());
2365   }
2366 
2367   OS << '\'';
2368 
2369   return internString(OS.str());
2370 }
2371 
2372 void CGDebugInfo::CollectVTableInfo(const CXXRecordDecl *RD, llvm::DIFile *Unit,
2373                                     SmallVectorImpl<llvm::Metadata *> &EltTys) {
2374   // If this class is not dynamic then there is not any vtable info to collect.
2375   if (!RD->isDynamicClass())
2376     return;
2377 
2378   // Don't emit any vtable shape or vptr info if this class doesn't have an
2379   // extendable vfptr. This can happen if the class doesn't have virtual
2380   // methods, or in the MS ABI if those virtual methods only come from virtually
2381   // inherited bases.
2382   const ASTRecordLayout &RL = CGM.getContext().getASTRecordLayout(RD);
2383   if (!RL.hasExtendableVFPtr())
2384     return;
2385 
2386   // CodeView needs to know how large the vtable of every dynamic class is, so
2387   // emit a special named pointer type into the element list. The vptr type
2388   // points to this type as well.
2389   llvm::DIType *VPtrTy = nullptr;
2390   bool NeedVTableShape = CGM.getCodeGenOpts().EmitCodeView &&
2391                          CGM.getTarget().getCXXABI().isMicrosoft();
2392   if (NeedVTableShape) {
2393     uint64_t PtrWidth =
2394         CGM.getContext().getTypeSize(CGM.getContext().VoidPtrTy);
2395     const VTableLayout &VFTLayout =
2396         CGM.getMicrosoftVTableContext().getVFTableLayout(RD, CharUnits::Zero());
2397     unsigned VSlotCount =
2398         VFTLayout.vtable_components().size() - CGM.getLangOpts().RTTIData;
2399     unsigned VTableWidth = PtrWidth * VSlotCount;
2400     unsigned VtblPtrAddressSpace = CGM.getTarget().getVtblPtrAddressSpace();
2401     std::optional<unsigned> DWARFAddressSpace =
2402         CGM.getTarget().getDWARFAddressSpace(VtblPtrAddressSpace);
2403 
2404     // Create a very wide void* type and insert it directly in the element list.
2405     llvm::DIType *VTableType = DBuilder.createPointerType(
2406         nullptr, VTableWidth, 0, DWARFAddressSpace, "__vtbl_ptr_type");
2407     EltTys.push_back(VTableType);
2408 
2409     // The vptr is a pointer to this special vtable type.
2410     VPtrTy = DBuilder.createPointerType(VTableType, PtrWidth);
2411   }
2412 
2413   // If there is a primary base then the artificial vptr member lives there.
2414   if (RL.getPrimaryBase())
2415     return;
2416 
2417   if (!VPtrTy)
2418     VPtrTy = getOrCreateVTablePtrType(Unit);
2419 
2420   unsigned Size = CGM.getContext().getTypeSize(CGM.getContext().VoidPtrTy);
2421   llvm::DIType *VPtrMember =
2422       DBuilder.createMemberType(Unit, getVTableName(RD), Unit, 0, Size, 0, 0,
2423                                 llvm::DINode::FlagArtificial, VPtrTy);
2424   EltTys.push_back(VPtrMember);
2425 }
2426 
2427 llvm::DIType *CGDebugInfo::getOrCreateRecordType(QualType RTy,
2428                                                  SourceLocation Loc) {
2429   assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
2430   llvm::DIType *T = getOrCreateType(RTy, getOrCreateFile(Loc));
2431   return T;
2432 }
2433 
2434 llvm::DIType *CGDebugInfo::getOrCreateInterfaceType(QualType D,
2435                                                     SourceLocation Loc) {
2436   return getOrCreateStandaloneType(D, Loc);
2437 }
2438 
2439 llvm::DIType *CGDebugInfo::getOrCreateStandaloneType(QualType D,
2440                                                      SourceLocation Loc) {
2441   assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
2442   assert(!D.isNull() && "null type");
2443   llvm::DIType *T = getOrCreateType(D, getOrCreateFile(Loc));
2444   assert(T && "could not create debug info for type");
2445 
2446   RetainedTypes.push_back(D.getAsOpaquePtr());
2447   return T;
2448 }
2449 
2450 void CGDebugInfo::addHeapAllocSiteMetadata(llvm::CallBase *CI,
2451                                            QualType AllocatedTy,
2452                                            SourceLocation Loc) {
2453   if (CGM.getCodeGenOpts().getDebugInfo() <=
2454       llvm::codegenoptions::DebugLineTablesOnly)
2455     return;
2456   llvm::MDNode *node;
2457   if (AllocatedTy->isVoidType())
2458     node = llvm::MDNode::get(CGM.getLLVMContext(), std::nullopt);
2459   else
2460     node = getOrCreateType(AllocatedTy, getOrCreateFile(Loc));
2461 
2462   CI->setMetadata("heapallocsite", node);
2463 }
2464 
2465 void CGDebugInfo::completeType(const EnumDecl *ED) {
2466   if (DebugKind <= llvm::codegenoptions::DebugLineTablesOnly)
2467     return;
2468   QualType Ty = CGM.getContext().getEnumType(ED);
2469   void *TyPtr = Ty.getAsOpaquePtr();
2470   auto I = TypeCache.find(TyPtr);
2471   if (I == TypeCache.end() || !cast<llvm::DIType>(I->second)->isForwardDecl())
2472     return;
2473   llvm::DIType *Res = CreateTypeDefinition(Ty->castAs<EnumType>());
2474   assert(!Res->isForwardDecl());
2475   TypeCache[TyPtr].reset(Res);
2476 }
2477 
2478 void CGDebugInfo::completeType(const RecordDecl *RD) {
2479   if (DebugKind > llvm::codegenoptions::LimitedDebugInfo ||
2480       !CGM.getLangOpts().CPlusPlus)
2481     completeRequiredType(RD);
2482 }
2483 
2484 /// Return true if the class or any of its methods are marked dllimport.
2485 static bool isClassOrMethodDLLImport(const CXXRecordDecl *RD) {
2486   if (RD->hasAttr<DLLImportAttr>())
2487     return true;
2488   for (const CXXMethodDecl *MD : RD->methods())
2489     if (MD->hasAttr<DLLImportAttr>())
2490       return true;
2491   return false;
2492 }
2493 
2494 /// Does a type definition exist in an imported clang module?
2495 static bool isDefinedInClangModule(const RecordDecl *RD) {
2496   // Only definitions that where imported from an AST file come from a module.
2497   if (!RD || !RD->isFromASTFile())
2498     return false;
2499   // Anonymous entities cannot be addressed. Treat them as not from module.
2500   if (!RD->isExternallyVisible() && RD->getName().empty())
2501     return false;
2502   if (auto *CXXDecl = dyn_cast<CXXRecordDecl>(RD)) {
2503     if (!CXXDecl->isCompleteDefinition())
2504       return false;
2505     // Check wether RD is a template.
2506     auto TemplateKind = CXXDecl->getTemplateSpecializationKind();
2507     if (TemplateKind != TSK_Undeclared) {
2508       // Unfortunately getOwningModule() isn't accurate enough to find the
2509       // owning module of a ClassTemplateSpecializationDecl that is inside a
2510       // namespace spanning multiple modules.
2511       bool Explicit = false;
2512       if (auto *TD = dyn_cast<ClassTemplateSpecializationDecl>(CXXDecl))
2513         Explicit = TD->isExplicitInstantiationOrSpecialization();
2514       if (!Explicit && CXXDecl->getEnclosingNamespaceContext())
2515         return false;
2516       // This is a template, check the origin of the first member.
2517       if (CXXDecl->field_begin() == CXXDecl->field_end())
2518         return TemplateKind == TSK_ExplicitInstantiationDeclaration;
2519       if (!CXXDecl->field_begin()->isFromASTFile())
2520         return false;
2521     }
2522   }
2523   return true;
2524 }
2525 
2526 void CGDebugInfo::completeClassData(const RecordDecl *RD) {
2527   if (auto *CXXRD = dyn_cast<CXXRecordDecl>(RD))
2528     if (CXXRD->isDynamicClass() &&
2529         CGM.getVTableLinkage(CXXRD) ==
2530             llvm::GlobalValue::AvailableExternallyLinkage &&
2531         !isClassOrMethodDLLImport(CXXRD))
2532       return;
2533 
2534   if (DebugTypeExtRefs && isDefinedInClangModule(RD->getDefinition()))
2535     return;
2536 
2537   completeClass(RD);
2538 }
2539 
2540 void CGDebugInfo::completeClass(const RecordDecl *RD) {
2541   if (DebugKind <= llvm::codegenoptions::DebugLineTablesOnly)
2542     return;
2543   QualType Ty = CGM.getContext().getRecordType(RD);
2544   void *TyPtr = Ty.getAsOpaquePtr();
2545   auto I = TypeCache.find(TyPtr);
2546   if (I != TypeCache.end() && !cast<llvm::DIType>(I->second)->isForwardDecl())
2547     return;
2548 
2549   // We want the canonical definition of the structure to not
2550   // be the typedef. Since that would lead to circular typedef
2551   // metadata.
2552   auto [Res, PrefRes] = CreateTypeDefinition(Ty->castAs<RecordType>());
2553   assert(!Res->isForwardDecl());
2554   TypeCache[TyPtr].reset(Res);
2555 }
2556 
2557 static bool hasExplicitMemberDefinition(CXXRecordDecl::method_iterator I,
2558                                         CXXRecordDecl::method_iterator End) {
2559   for (CXXMethodDecl *MD : llvm::make_range(I, End))
2560     if (FunctionDecl *Tmpl = MD->getInstantiatedFromMemberFunction())
2561       if (!Tmpl->isImplicit() && Tmpl->isThisDeclarationADefinition() &&
2562           !MD->getMemberSpecializationInfo()->isExplicitSpecialization())
2563         return true;
2564   return false;
2565 }
2566 
2567 static bool canUseCtorHoming(const CXXRecordDecl *RD) {
2568   // Constructor homing can be used for classes that cannnot be constructed
2569   // without emitting code for one of their constructors. This is classes that
2570   // don't have trivial or constexpr constructors, or can be created from
2571   // aggregate initialization. Also skip lambda objects because they don't call
2572   // constructors.
2573 
2574   // Skip this optimization if the class or any of its methods are marked
2575   // dllimport.
2576   if (isClassOrMethodDLLImport(RD))
2577     return false;
2578 
2579   if (RD->isLambda() || RD->isAggregate() ||
2580       RD->hasTrivialDefaultConstructor() ||
2581       RD->hasConstexprNonCopyMoveConstructor())
2582     return false;
2583 
2584   for (const CXXConstructorDecl *Ctor : RD->ctors()) {
2585     if (Ctor->isCopyOrMoveConstructor())
2586       continue;
2587     if (!Ctor->isDeleted())
2588       return true;
2589   }
2590   return false;
2591 }
2592 
2593 static bool shouldOmitDefinition(llvm::codegenoptions::DebugInfoKind DebugKind,
2594                                  bool DebugTypeExtRefs, const RecordDecl *RD,
2595                                  const LangOptions &LangOpts) {
2596   if (DebugTypeExtRefs && isDefinedInClangModule(RD->getDefinition()))
2597     return true;
2598 
2599   if (auto *ES = RD->getASTContext().getExternalSource())
2600     if (ES->hasExternalDefinitions(RD) == ExternalASTSource::EK_Always)
2601       return true;
2602 
2603   // Only emit forward declarations in line tables only to keep debug info size
2604   // small. This only applies to CodeView, since we don't emit types in DWARF
2605   // line tables only.
2606   if (DebugKind == llvm::codegenoptions::DebugLineTablesOnly)
2607     return true;
2608 
2609   if (DebugKind > llvm::codegenoptions::LimitedDebugInfo ||
2610       RD->hasAttr<StandaloneDebugAttr>())
2611     return false;
2612 
2613   if (!LangOpts.CPlusPlus)
2614     return false;
2615 
2616   if (!RD->isCompleteDefinitionRequired())
2617     return true;
2618 
2619   const auto *CXXDecl = dyn_cast<CXXRecordDecl>(RD);
2620 
2621   if (!CXXDecl)
2622     return false;
2623 
2624   // Only emit complete debug info for a dynamic class when its vtable is
2625   // emitted.  However, Microsoft debuggers don't resolve type information
2626   // across DLL boundaries, so skip this optimization if the class or any of its
2627   // methods are marked dllimport. This isn't a complete solution, since objects
2628   // without any dllimport methods can be used in one DLL and constructed in
2629   // another, but it is the current behavior of LimitedDebugInfo.
2630   if (CXXDecl->hasDefinition() && CXXDecl->isDynamicClass() &&
2631       !isClassOrMethodDLLImport(CXXDecl))
2632     return true;
2633 
2634   TemplateSpecializationKind Spec = TSK_Undeclared;
2635   if (const auto *SD = dyn_cast<ClassTemplateSpecializationDecl>(RD))
2636     Spec = SD->getSpecializationKind();
2637 
2638   if (Spec == TSK_ExplicitInstantiationDeclaration &&
2639       hasExplicitMemberDefinition(CXXDecl->method_begin(),
2640                                   CXXDecl->method_end()))
2641     return true;
2642 
2643   // In constructor homing mode, only emit complete debug info for a class
2644   // when its constructor is emitted.
2645   if ((DebugKind == llvm::codegenoptions::DebugInfoConstructor) &&
2646       canUseCtorHoming(CXXDecl))
2647     return true;
2648 
2649   return false;
2650 }
2651 
2652 void CGDebugInfo::completeRequiredType(const RecordDecl *RD) {
2653   if (shouldOmitDefinition(DebugKind, DebugTypeExtRefs, RD, CGM.getLangOpts()))
2654     return;
2655 
2656   QualType Ty = CGM.getContext().getRecordType(RD);
2657   llvm::DIType *T = getTypeOrNull(Ty);
2658   if (T && T->isForwardDecl())
2659     completeClassData(RD);
2660 }
2661 
2662 llvm::DIType *CGDebugInfo::CreateType(const RecordType *Ty) {
2663   RecordDecl *RD = Ty->getDecl();
2664   llvm::DIType *T = cast_or_null<llvm::DIType>(getTypeOrNull(QualType(Ty, 0)));
2665   if (T || shouldOmitDefinition(DebugKind, DebugTypeExtRefs, RD,
2666                                 CGM.getLangOpts())) {
2667     if (!T)
2668       T = getOrCreateRecordFwdDecl(Ty, getDeclContextDescriptor(RD));
2669     return T;
2670   }
2671 
2672   auto [Def, Pref] = CreateTypeDefinition(Ty);
2673 
2674   return Pref ? Pref : Def;
2675 }
2676 
2677 llvm::DIType *CGDebugInfo::GetPreferredNameType(const CXXRecordDecl *RD,
2678                                                 llvm::DIFile *Unit) {
2679   if (!RD)
2680     return nullptr;
2681 
2682   auto const *PNA = RD->getAttr<PreferredNameAttr>();
2683   if (!PNA)
2684     return nullptr;
2685 
2686   return getOrCreateType(PNA->getTypedefType(), Unit);
2687 }
2688 
2689 std::pair<llvm::DIType *, llvm::DIType *>
2690 CGDebugInfo::CreateTypeDefinition(const RecordType *Ty) {
2691   RecordDecl *RD = Ty->getDecl();
2692 
2693   // Get overall information about the record type for the debug info.
2694   llvm::DIFile *DefUnit = getOrCreateFile(RD->getLocation());
2695 
2696   // Records and classes and unions can all be recursive.  To handle them, we
2697   // first generate a debug descriptor for the struct as a forward declaration.
2698   // Then (if it is a definition) we go through and get debug info for all of
2699   // its members.  Finally, we create a descriptor for the complete type (which
2700   // may refer to the forward decl if the struct is recursive) and replace all
2701   // uses of the forward declaration with the final definition.
2702   llvm::DICompositeType *FwdDecl = getOrCreateLimitedType(Ty);
2703 
2704   const RecordDecl *D = RD->getDefinition();
2705   if (!D || !D->isCompleteDefinition())
2706     return {FwdDecl, nullptr};
2707 
2708   if (const auto *CXXDecl = dyn_cast<CXXRecordDecl>(RD))
2709     CollectContainingType(CXXDecl, FwdDecl);
2710 
2711   // Push the struct on region stack.
2712   LexicalBlockStack.emplace_back(&*FwdDecl);
2713   RegionMap[Ty->getDecl()].reset(FwdDecl);
2714 
2715   // Convert all the elements.
2716   SmallVector<llvm::Metadata *, 16> EltTys;
2717   // what about nested types?
2718 
2719   // Note: The split of CXXDecl information here is intentional, the
2720   // gdb tests will depend on a certain ordering at printout. The debug
2721   // information offsets are still correct if we merge them all together
2722   // though.
2723   const auto *CXXDecl = dyn_cast<CXXRecordDecl>(RD);
2724   if (CXXDecl) {
2725     CollectCXXBases(CXXDecl, DefUnit, EltTys, FwdDecl);
2726     CollectVTableInfo(CXXDecl, DefUnit, EltTys);
2727   }
2728 
2729   // Collect data fields (including static variables and any initializers).
2730   CollectRecordFields(RD, DefUnit, EltTys, FwdDecl);
2731   if (CXXDecl)
2732     CollectCXXMemberFunctions(CXXDecl, DefUnit, EltTys, FwdDecl);
2733 
2734   LexicalBlockStack.pop_back();
2735   RegionMap.erase(Ty->getDecl());
2736 
2737   llvm::DINodeArray Elements = DBuilder.getOrCreateArray(EltTys);
2738   DBuilder.replaceArrays(FwdDecl, Elements);
2739 
2740   if (FwdDecl->isTemporary())
2741     FwdDecl =
2742         llvm::MDNode::replaceWithPermanent(llvm::TempDICompositeType(FwdDecl));
2743 
2744   RegionMap[Ty->getDecl()].reset(FwdDecl);
2745 
2746   if (CGM.getCodeGenOpts().getDebuggerTuning() == llvm::DebuggerKind::LLDB)
2747     if (auto *PrefDI = GetPreferredNameType(CXXDecl, DefUnit))
2748       return {FwdDecl, PrefDI};
2749 
2750   return {FwdDecl, nullptr};
2751 }
2752 
2753 llvm::DIType *CGDebugInfo::CreateType(const ObjCObjectType *Ty,
2754                                       llvm::DIFile *Unit) {
2755   // Ignore protocols.
2756   return getOrCreateType(Ty->getBaseType(), Unit);
2757 }
2758 
2759 llvm::DIType *CGDebugInfo::CreateType(const ObjCTypeParamType *Ty,
2760                                       llvm::DIFile *Unit) {
2761   // Ignore protocols.
2762   SourceLocation Loc = Ty->getDecl()->getLocation();
2763 
2764   // Use Typedefs to represent ObjCTypeParamType.
2765   return DBuilder.createTypedef(
2766       getOrCreateType(Ty->getDecl()->getUnderlyingType(), Unit),
2767       Ty->getDecl()->getName(), getOrCreateFile(Loc), getLineNumber(Loc),
2768       getDeclContextDescriptor(Ty->getDecl()));
2769 }
2770 
2771 /// \return true if Getter has the default name for the property PD.
2772 static bool hasDefaultGetterName(const ObjCPropertyDecl *PD,
2773                                  const ObjCMethodDecl *Getter) {
2774   assert(PD);
2775   if (!Getter)
2776     return true;
2777 
2778   assert(Getter->getDeclName().isObjCZeroArgSelector());
2779   return PD->getName() ==
2780          Getter->getDeclName().getObjCSelector().getNameForSlot(0);
2781 }
2782 
2783 /// \return true if Setter has the default name for the property PD.
2784 static bool hasDefaultSetterName(const ObjCPropertyDecl *PD,
2785                                  const ObjCMethodDecl *Setter) {
2786   assert(PD);
2787   if (!Setter)
2788     return true;
2789 
2790   assert(Setter->getDeclName().isObjCOneArgSelector());
2791   return SelectorTable::constructSetterName(PD->getName()) ==
2792          Setter->getDeclName().getObjCSelector().getNameForSlot(0);
2793 }
2794 
2795 llvm::DIType *CGDebugInfo::CreateType(const ObjCInterfaceType *Ty,
2796                                       llvm::DIFile *Unit) {
2797   ObjCInterfaceDecl *ID = Ty->getDecl();
2798   if (!ID)
2799     return nullptr;
2800 
2801   // Return a forward declaration if this type was imported from a clang module,
2802   // and this is not the compile unit with the implementation of the type (which
2803   // may contain hidden ivars).
2804   if (DebugTypeExtRefs && ID->isFromASTFile() && ID->getDefinition() &&
2805       !ID->getImplementation())
2806     return DBuilder.createForwardDecl(llvm::dwarf::DW_TAG_structure_type,
2807                                       ID->getName(),
2808                                       getDeclContextDescriptor(ID), Unit, 0);
2809 
2810   // Get overall information about the record type for the debug info.
2811   llvm::DIFile *DefUnit = getOrCreateFile(ID->getLocation());
2812   unsigned Line = getLineNumber(ID->getLocation());
2813   auto RuntimeLang =
2814       static_cast<llvm::dwarf::SourceLanguage>(TheCU->getSourceLanguage());
2815 
2816   // If this is just a forward declaration return a special forward-declaration
2817   // debug type since we won't be able to lay out the entire type.
2818   ObjCInterfaceDecl *Def = ID->getDefinition();
2819   if (!Def || !Def->getImplementation()) {
2820     llvm::DIScope *Mod = getParentModuleOrNull(ID);
2821     llvm::DIType *FwdDecl = DBuilder.createReplaceableCompositeType(
2822         llvm::dwarf::DW_TAG_structure_type, ID->getName(), Mod ? Mod : TheCU,
2823         DefUnit, Line, RuntimeLang);
2824     ObjCInterfaceCache.push_back(ObjCInterfaceCacheEntry(Ty, FwdDecl, Unit));
2825     return FwdDecl;
2826   }
2827 
2828   return CreateTypeDefinition(Ty, Unit);
2829 }
2830 
2831 llvm::DIModule *CGDebugInfo::getOrCreateModuleRef(ASTSourceDescriptor Mod,
2832                                                   bool CreateSkeletonCU) {
2833   // Use the Module pointer as the key into the cache. This is a
2834   // nullptr if the "Module" is a PCH, which is safe because we don't
2835   // support chained PCH debug info, so there can only be a single PCH.
2836   const Module *M = Mod.getModuleOrNull();
2837   auto ModRef = ModuleCache.find(M);
2838   if (ModRef != ModuleCache.end())
2839     return cast<llvm::DIModule>(ModRef->second);
2840 
2841   // Macro definitions that were defined with "-D" on the command line.
2842   SmallString<128> ConfigMacros;
2843   {
2844     llvm::raw_svector_ostream OS(ConfigMacros);
2845     const auto &PPOpts = CGM.getPreprocessorOpts();
2846     unsigned I = 0;
2847     // Translate the macro definitions back into a command line.
2848     for (auto &M : PPOpts.Macros) {
2849       if (++I > 1)
2850         OS << " ";
2851       const std::string &Macro = M.first;
2852       bool Undef = M.second;
2853       OS << "\"-" << (Undef ? 'U' : 'D');
2854       for (char c : Macro)
2855         switch (c) {
2856         case '\\':
2857           OS << "\\\\";
2858           break;
2859         case '"':
2860           OS << "\\\"";
2861           break;
2862         default:
2863           OS << c;
2864         }
2865       OS << '\"';
2866     }
2867   }
2868 
2869   bool IsRootModule = M ? !M->Parent : true;
2870   // When a module name is specified as -fmodule-name, that module gets a
2871   // clang::Module object, but it won't actually be built or imported; it will
2872   // be textual.
2873   if (CreateSkeletonCU && IsRootModule && Mod.getASTFile().empty() && M)
2874     assert(StringRef(M->Name).startswith(CGM.getLangOpts().ModuleName) &&
2875            "clang module without ASTFile must be specified by -fmodule-name");
2876 
2877   // Return a StringRef to the remapped Path.
2878   auto RemapPath = [this](StringRef Path) -> std::string {
2879     std::string Remapped = remapDIPath(Path);
2880     StringRef Relative(Remapped);
2881     StringRef CompDir = TheCU->getDirectory();
2882     if (Relative.consume_front(CompDir))
2883       Relative.consume_front(llvm::sys::path::get_separator());
2884 
2885     return Relative.str();
2886   };
2887 
2888   if (CreateSkeletonCU && IsRootModule && !Mod.getASTFile().empty()) {
2889     // PCH files don't have a signature field in the control block,
2890     // but LLVM detects skeleton CUs by looking for a non-zero DWO id.
2891     // We use the lower 64 bits for debug info.
2892 
2893     uint64_t Signature = 0;
2894     if (const auto &ModSig = Mod.getSignature())
2895       Signature = ModSig.truncatedValue();
2896     else
2897       Signature = ~1ULL;
2898 
2899     llvm::DIBuilder DIB(CGM.getModule());
2900     SmallString<0> PCM;
2901     if (!llvm::sys::path::is_absolute(Mod.getASTFile())) {
2902       if (CGM.getHeaderSearchOpts().ModuleFileHomeIsCwd)
2903         PCM = getCurrentDirname();
2904       else
2905         PCM = Mod.getPath();
2906     }
2907     llvm::sys::path::append(PCM, Mod.getASTFile());
2908     DIB.createCompileUnit(
2909         TheCU->getSourceLanguage(),
2910         // TODO: Support "Source" from external AST providers?
2911         DIB.createFile(Mod.getModuleName(), TheCU->getDirectory()),
2912         TheCU->getProducer(), false, StringRef(), 0, RemapPath(PCM),
2913         llvm::DICompileUnit::FullDebug, Signature);
2914     DIB.finalize();
2915   }
2916 
2917   llvm::DIModule *Parent =
2918       IsRootModule ? nullptr
2919                    : getOrCreateModuleRef(ASTSourceDescriptor(*M->Parent),
2920                                           CreateSkeletonCU);
2921   std::string IncludePath = Mod.getPath().str();
2922   llvm::DIModule *DIMod =
2923       DBuilder.createModule(Parent, Mod.getModuleName(), ConfigMacros,
2924                             RemapPath(IncludePath));
2925   ModuleCache[M].reset(DIMod);
2926   return DIMod;
2927 }
2928 
2929 llvm::DIType *CGDebugInfo::CreateTypeDefinition(const ObjCInterfaceType *Ty,
2930                                                 llvm::DIFile *Unit) {
2931   ObjCInterfaceDecl *ID = Ty->getDecl();
2932   llvm::DIFile *DefUnit = getOrCreateFile(ID->getLocation());
2933   unsigned Line = getLineNumber(ID->getLocation());
2934   unsigned RuntimeLang = TheCU->getSourceLanguage();
2935 
2936   // Bit size, align and offset of the type.
2937   uint64_t Size = CGM.getContext().getTypeSize(Ty);
2938   auto Align = getTypeAlignIfRequired(Ty, CGM.getContext());
2939 
2940   llvm::DINode::DIFlags Flags = llvm::DINode::FlagZero;
2941   if (ID->getImplementation())
2942     Flags |= llvm::DINode::FlagObjcClassComplete;
2943 
2944   llvm::DIScope *Mod = getParentModuleOrNull(ID);
2945   llvm::DICompositeType *RealDecl = DBuilder.createStructType(
2946       Mod ? Mod : Unit, ID->getName(), DefUnit, Line, Size, Align, Flags,
2947       nullptr, llvm::DINodeArray(), RuntimeLang);
2948 
2949   QualType QTy(Ty, 0);
2950   TypeCache[QTy.getAsOpaquePtr()].reset(RealDecl);
2951 
2952   // Push the struct on region stack.
2953   LexicalBlockStack.emplace_back(RealDecl);
2954   RegionMap[Ty->getDecl()].reset(RealDecl);
2955 
2956   // Convert all the elements.
2957   SmallVector<llvm::Metadata *, 16> EltTys;
2958 
2959   ObjCInterfaceDecl *SClass = ID->getSuperClass();
2960   if (SClass) {
2961     llvm::DIType *SClassTy =
2962         getOrCreateType(CGM.getContext().getObjCInterfaceType(SClass), Unit);
2963     if (!SClassTy)
2964       return nullptr;
2965 
2966     llvm::DIType *InhTag = DBuilder.createInheritance(RealDecl, SClassTy, 0, 0,
2967                                                       llvm::DINode::FlagZero);
2968     EltTys.push_back(InhTag);
2969   }
2970 
2971   // Create entries for all of the properties.
2972   auto AddProperty = [&](const ObjCPropertyDecl *PD) {
2973     SourceLocation Loc = PD->getLocation();
2974     llvm::DIFile *PUnit = getOrCreateFile(Loc);
2975     unsigned PLine = getLineNumber(Loc);
2976     ObjCMethodDecl *Getter = PD->getGetterMethodDecl();
2977     ObjCMethodDecl *Setter = PD->getSetterMethodDecl();
2978     llvm::MDNode *PropertyNode = DBuilder.createObjCProperty(
2979         PD->getName(), PUnit, PLine,
2980         hasDefaultGetterName(PD, Getter) ? ""
2981                                          : getSelectorName(PD->getGetterName()),
2982         hasDefaultSetterName(PD, Setter) ? ""
2983                                          : getSelectorName(PD->getSetterName()),
2984         PD->getPropertyAttributes(), getOrCreateType(PD->getType(), PUnit));
2985     EltTys.push_back(PropertyNode);
2986   };
2987   {
2988     // Use 'char' for the isClassProperty bit as DenseSet requires space for
2989     // empty/tombstone keys in the data type (and bool is too small for that).
2990     typedef std::pair<char, const IdentifierInfo *> IsClassAndIdent;
2991     /// List of already emitted properties. Two distinct class and instance
2992     /// properties can share the same identifier (but not two instance
2993     /// properties or two class properties).
2994     llvm::DenseSet<IsClassAndIdent> PropertySet;
2995     /// Returns the IsClassAndIdent key for the given property.
2996     auto GetIsClassAndIdent = [](const ObjCPropertyDecl *PD) {
2997       return std::make_pair(PD->isClassProperty(), PD->getIdentifier());
2998     };
2999     for (const ObjCCategoryDecl *ClassExt : ID->known_extensions())
3000       for (auto *PD : ClassExt->properties()) {
3001         PropertySet.insert(GetIsClassAndIdent(PD));
3002         AddProperty(PD);
3003       }
3004     for (const auto *PD : ID->properties()) {
3005       // Don't emit duplicate metadata for properties that were already in a
3006       // class extension.
3007       if (!PropertySet.insert(GetIsClassAndIdent(PD)).second)
3008         continue;
3009       AddProperty(PD);
3010     }
3011   }
3012 
3013   const ASTRecordLayout &RL = CGM.getContext().getASTObjCInterfaceLayout(ID);
3014   unsigned FieldNo = 0;
3015   for (ObjCIvarDecl *Field = ID->all_declared_ivar_begin(); Field;
3016        Field = Field->getNextIvar(), ++FieldNo) {
3017     llvm::DIType *FieldTy = getOrCreateType(Field->getType(), Unit);
3018     if (!FieldTy)
3019       return nullptr;
3020 
3021     StringRef FieldName = Field->getName();
3022 
3023     // Ignore unnamed fields.
3024     if (FieldName.empty())
3025       continue;
3026 
3027     // Get the location for the field.
3028     llvm::DIFile *FieldDefUnit = getOrCreateFile(Field->getLocation());
3029     unsigned FieldLine = getLineNumber(Field->getLocation());
3030     QualType FType = Field->getType();
3031     uint64_t FieldSize = 0;
3032     uint32_t FieldAlign = 0;
3033 
3034     if (!FType->isIncompleteArrayType()) {
3035 
3036       // Bit size, align and offset of the type.
3037       FieldSize = Field->isBitField()
3038                       ? Field->getBitWidthValue(CGM.getContext())
3039                       : CGM.getContext().getTypeSize(FType);
3040       FieldAlign = getTypeAlignIfRequired(FType, CGM.getContext());
3041     }
3042 
3043     uint64_t FieldOffset;
3044     if (CGM.getLangOpts().ObjCRuntime.isNonFragile()) {
3045       // We don't know the runtime offset of an ivar if we're using the
3046       // non-fragile ABI.  For bitfields, use the bit offset into the first
3047       // byte of storage of the bitfield.  For other fields, use zero.
3048       if (Field->isBitField()) {
3049         FieldOffset =
3050             CGM.getObjCRuntime().ComputeBitfieldBitOffset(CGM, ID, Field);
3051         FieldOffset %= CGM.getContext().getCharWidth();
3052       } else {
3053         FieldOffset = 0;
3054       }
3055     } else {
3056       FieldOffset = RL.getFieldOffset(FieldNo);
3057     }
3058 
3059     llvm::DINode::DIFlags Flags = llvm::DINode::FlagZero;
3060     if (Field->getAccessControl() == ObjCIvarDecl::Protected)
3061       Flags = llvm::DINode::FlagProtected;
3062     else if (Field->getAccessControl() == ObjCIvarDecl::Private)
3063       Flags = llvm::DINode::FlagPrivate;
3064     else if (Field->getAccessControl() == ObjCIvarDecl::Public)
3065       Flags = llvm::DINode::FlagPublic;
3066 
3067     if (Field->isBitField())
3068       Flags |= llvm::DINode::FlagBitField;
3069 
3070     llvm::MDNode *PropertyNode = nullptr;
3071     if (ObjCImplementationDecl *ImpD = ID->getImplementation()) {
3072       if (ObjCPropertyImplDecl *PImpD =
3073               ImpD->FindPropertyImplIvarDecl(Field->getIdentifier())) {
3074         if (ObjCPropertyDecl *PD = PImpD->getPropertyDecl()) {
3075           SourceLocation Loc = PD->getLocation();
3076           llvm::DIFile *PUnit = getOrCreateFile(Loc);
3077           unsigned PLine = getLineNumber(Loc);
3078           ObjCMethodDecl *Getter = PImpD->getGetterMethodDecl();
3079           ObjCMethodDecl *Setter = PImpD->getSetterMethodDecl();
3080           PropertyNode = DBuilder.createObjCProperty(
3081               PD->getName(), PUnit, PLine,
3082               hasDefaultGetterName(PD, Getter)
3083                   ? ""
3084                   : getSelectorName(PD->getGetterName()),
3085               hasDefaultSetterName(PD, Setter)
3086                   ? ""
3087                   : getSelectorName(PD->getSetterName()),
3088               PD->getPropertyAttributes(),
3089               getOrCreateType(PD->getType(), PUnit));
3090         }
3091       }
3092     }
3093     FieldTy = DBuilder.createObjCIVar(FieldName, FieldDefUnit, FieldLine,
3094                                       FieldSize, FieldAlign, FieldOffset, Flags,
3095                                       FieldTy, PropertyNode);
3096     EltTys.push_back(FieldTy);
3097   }
3098 
3099   llvm::DINodeArray Elements = DBuilder.getOrCreateArray(EltTys);
3100   DBuilder.replaceArrays(RealDecl, Elements);
3101 
3102   LexicalBlockStack.pop_back();
3103   return RealDecl;
3104 }
3105 
3106 llvm::DIType *CGDebugInfo::CreateType(const VectorType *Ty,
3107                                       llvm::DIFile *Unit) {
3108   if (Ty->isExtVectorBoolType()) {
3109     // Boolean ext_vector_type(N) are special because their real element type
3110     // (bits of bit size) is not their Clang element type (_Bool of size byte).
3111     // For now, we pretend the boolean vector were actually a vector of bytes
3112     // (where each byte represents 8 bits of the actual vector).
3113     // FIXME Debug info should actually represent this proper as a vector mask
3114     // type.
3115     auto &Ctx = CGM.getContext();
3116     uint64_t Size = CGM.getContext().getTypeSize(Ty);
3117     uint64_t NumVectorBytes = Size / Ctx.getCharWidth();
3118 
3119     // Construct the vector of 'char' type.
3120     QualType CharVecTy = Ctx.getVectorType(Ctx.CharTy, NumVectorBytes,
3121                                            VectorType::GenericVector);
3122     return CreateType(CharVecTy->getAs<VectorType>(), Unit);
3123   }
3124 
3125   llvm::DIType *ElementTy = getOrCreateType(Ty->getElementType(), Unit);
3126   int64_t Count = Ty->getNumElements();
3127 
3128   llvm::Metadata *Subscript;
3129   QualType QTy(Ty, 0);
3130   auto SizeExpr = SizeExprCache.find(QTy);
3131   if (SizeExpr != SizeExprCache.end())
3132     Subscript = DBuilder.getOrCreateSubrange(
3133         SizeExpr->getSecond() /*count*/, nullptr /*lowerBound*/,
3134         nullptr /*upperBound*/, nullptr /*stride*/);
3135   else {
3136     auto *CountNode =
3137         llvm::ConstantAsMetadata::get(llvm::ConstantInt::getSigned(
3138             llvm::Type::getInt64Ty(CGM.getLLVMContext()), Count ? Count : -1));
3139     Subscript = DBuilder.getOrCreateSubrange(
3140         CountNode /*count*/, nullptr /*lowerBound*/, nullptr /*upperBound*/,
3141         nullptr /*stride*/);
3142   }
3143   llvm::DINodeArray SubscriptArray = DBuilder.getOrCreateArray(Subscript);
3144 
3145   uint64_t Size = CGM.getContext().getTypeSize(Ty);
3146   auto Align = getTypeAlignIfRequired(Ty, CGM.getContext());
3147 
3148   return DBuilder.createVectorType(Size, Align, ElementTy, SubscriptArray);
3149 }
3150 
3151 llvm::DIType *CGDebugInfo::CreateType(const ConstantMatrixType *Ty,
3152                                       llvm::DIFile *Unit) {
3153   // FIXME: Create another debug type for matrices
3154   // For the time being, it treats it like a nested ArrayType.
3155 
3156   llvm::DIType *ElementTy = getOrCreateType(Ty->getElementType(), Unit);
3157   uint64_t Size = CGM.getContext().getTypeSize(Ty);
3158   uint32_t Align = getTypeAlignIfRequired(Ty, CGM.getContext());
3159 
3160   // Create ranges for both dimensions.
3161   llvm::SmallVector<llvm::Metadata *, 2> Subscripts;
3162   auto *ColumnCountNode =
3163       llvm::ConstantAsMetadata::get(llvm::ConstantInt::getSigned(
3164           llvm::Type::getInt64Ty(CGM.getLLVMContext()), Ty->getNumColumns()));
3165   auto *RowCountNode =
3166       llvm::ConstantAsMetadata::get(llvm::ConstantInt::getSigned(
3167           llvm::Type::getInt64Ty(CGM.getLLVMContext()), Ty->getNumRows()));
3168   Subscripts.push_back(DBuilder.getOrCreateSubrange(
3169       ColumnCountNode /*count*/, nullptr /*lowerBound*/, nullptr /*upperBound*/,
3170       nullptr /*stride*/));
3171   Subscripts.push_back(DBuilder.getOrCreateSubrange(
3172       RowCountNode /*count*/, nullptr /*lowerBound*/, nullptr /*upperBound*/,
3173       nullptr /*stride*/));
3174   llvm::DINodeArray SubscriptArray = DBuilder.getOrCreateArray(Subscripts);
3175   return DBuilder.createArrayType(Size, Align, ElementTy, SubscriptArray);
3176 }
3177 
3178 llvm::DIType *CGDebugInfo::CreateType(const ArrayType *Ty, llvm::DIFile *Unit) {
3179   uint64_t Size;
3180   uint32_t Align;
3181 
3182   // FIXME: make getTypeAlign() aware of VLAs and incomplete array types
3183   if (const auto *VAT = dyn_cast<VariableArrayType>(Ty)) {
3184     Size = 0;
3185     Align = getTypeAlignIfRequired(CGM.getContext().getBaseElementType(VAT),
3186                                    CGM.getContext());
3187   } else if (Ty->isIncompleteArrayType()) {
3188     Size = 0;
3189     if (Ty->getElementType()->isIncompleteType())
3190       Align = 0;
3191     else
3192       Align = getTypeAlignIfRequired(Ty->getElementType(), CGM.getContext());
3193   } else if (Ty->isIncompleteType()) {
3194     Size = 0;
3195     Align = 0;
3196   } else {
3197     // Size and align of the whole array, not the element type.
3198     Size = CGM.getContext().getTypeSize(Ty);
3199     Align = getTypeAlignIfRequired(Ty, CGM.getContext());
3200   }
3201 
3202   // Add the dimensions of the array.  FIXME: This loses CV qualifiers from
3203   // interior arrays, do we care?  Why aren't nested arrays represented the
3204   // obvious/recursive way?
3205   SmallVector<llvm::Metadata *, 8> Subscripts;
3206   QualType EltTy(Ty, 0);
3207   while ((Ty = dyn_cast<ArrayType>(EltTy))) {
3208     // If the number of elements is known, then count is that number. Otherwise,
3209     // it's -1. This allows us to represent a subrange with an array of 0
3210     // elements, like this:
3211     //
3212     //   struct foo {
3213     //     int x[0];
3214     //   };
3215     int64_t Count = -1; // Count == -1 is an unbounded array.
3216     if (const auto *CAT = dyn_cast<ConstantArrayType>(Ty))
3217       Count = CAT->getSize().getZExtValue();
3218     else if (const auto *VAT = dyn_cast<VariableArrayType>(Ty)) {
3219       if (Expr *Size = VAT->getSizeExpr()) {
3220         Expr::EvalResult Result;
3221         if (Size->EvaluateAsInt(Result, CGM.getContext()))
3222           Count = Result.Val.getInt().getExtValue();
3223       }
3224     }
3225 
3226     auto SizeNode = SizeExprCache.find(EltTy);
3227     if (SizeNode != SizeExprCache.end())
3228       Subscripts.push_back(DBuilder.getOrCreateSubrange(
3229           SizeNode->getSecond() /*count*/, nullptr /*lowerBound*/,
3230           nullptr /*upperBound*/, nullptr /*stride*/));
3231     else {
3232       auto *CountNode =
3233           llvm::ConstantAsMetadata::get(llvm::ConstantInt::getSigned(
3234               llvm::Type::getInt64Ty(CGM.getLLVMContext()), Count));
3235       Subscripts.push_back(DBuilder.getOrCreateSubrange(
3236           CountNode /*count*/, nullptr /*lowerBound*/, nullptr /*upperBound*/,
3237           nullptr /*stride*/));
3238     }
3239     EltTy = Ty->getElementType();
3240   }
3241 
3242   llvm::DINodeArray SubscriptArray = DBuilder.getOrCreateArray(Subscripts);
3243 
3244   return DBuilder.createArrayType(Size, Align, getOrCreateType(EltTy, Unit),
3245                                   SubscriptArray);
3246 }
3247 
3248 llvm::DIType *CGDebugInfo::CreateType(const LValueReferenceType *Ty,
3249                                       llvm::DIFile *Unit) {
3250   return CreatePointerLikeType(llvm::dwarf::DW_TAG_reference_type, Ty,
3251                                Ty->getPointeeType(), Unit);
3252 }
3253 
3254 llvm::DIType *CGDebugInfo::CreateType(const RValueReferenceType *Ty,
3255                                       llvm::DIFile *Unit) {
3256   llvm::dwarf::Tag Tag = llvm::dwarf::DW_TAG_rvalue_reference_type;
3257   // DW_TAG_rvalue_reference_type was introduced in DWARF 4.
3258   if (CGM.getCodeGenOpts().DebugStrictDwarf &&
3259       CGM.getCodeGenOpts().DwarfVersion < 4)
3260     Tag = llvm::dwarf::DW_TAG_reference_type;
3261 
3262   return CreatePointerLikeType(Tag, Ty, Ty->getPointeeType(), Unit);
3263 }
3264 
3265 llvm::DIType *CGDebugInfo::CreateType(const MemberPointerType *Ty,
3266                                       llvm::DIFile *U) {
3267   llvm::DINode::DIFlags Flags = llvm::DINode::FlagZero;
3268   uint64_t Size = 0;
3269 
3270   if (!Ty->isIncompleteType()) {
3271     Size = CGM.getContext().getTypeSize(Ty);
3272 
3273     // Set the MS inheritance model. There is no flag for the unspecified model.
3274     if (CGM.getTarget().getCXXABI().isMicrosoft()) {
3275       switch (Ty->getMostRecentCXXRecordDecl()->getMSInheritanceModel()) {
3276       case MSInheritanceModel::Single:
3277         Flags |= llvm::DINode::FlagSingleInheritance;
3278         break;
3279       case MSInheritanceModel::Multiple:
3280         Flags |= llvm::DINode::FlagMultipleInheritance;
3281         break;
3282       case MSInheritanceModel::Virtual:
3283         Flags |= llvm::DINode::FlagVirtualInheritance;
3284         break;
3285       case MSInheritanceModel::Unspecified:
3286         break;
3287       }
3288     }
3289   }
3290 
3291   llvm::DIType *ClassType = getOrCreateType(QualType(Ty->getClass(), 0), U);
3292   if (Ty->isMemberDataPointerType())
3293     return DBuilder.createMemberPointerType(
3294         getOrCreateType(Ty->getPointeeType(), U), ClassType, Size, /*Align=*/0,
3295         Flags);
3296 
3297   const FunctionProtoType *FPT =
3298       Ty->getPointeeType()->castAs<FunctionProtoType>();
3299   return DBuilder.createMemberPointerType(
3300       getOrCreateInstanceMethodType(
3301           CXXMethodDecl::getThisType(FPT, Ty->getMostRecentCXXRecordDecl()),
3302           FPT, U),
3303       ClassType, Size, /*Align=*/0, Flags);
3304 }
3305 
3306 llvm::DIType *CGDebugInfo::CreateType(const AtomicType *Ty, llvm::DIFile *U) {
3307   auto *FromTy = getOrCreateType(Ty->getValueType(), U);
3308   return DBuilder.createQualifiedType(llvm::dwarf::DW_TAG_atomic_type, FromTy);
3309 }
3310 
3311 llvm::DIType *CGDebugInfo::CreateType(const PipeType *Ty, llvm::DIFile *U) {
3312   return getOrCreateType(Ty->getElementType(), U);
3313 }
3314 
3315 llvm::DIType *CGDebugInfo::CreateEnumType(const EnumType *Ty) {
3316   const EnumDecl *ED = Ty->getDecl();
3317 
3318   uint64_t Size = 0;
3319   uint32_t Align = 0;
3320   if (!ED->getTypeForDecl()->isIncompleteType()) {
3321     Size = CGM.getContext().getTypeSize(ED->getTypeForDecl());
3322     Align = getDeclAlignIfRequired(ED, CGM.getContext());
3323   }
3324 
3325   SmallString<256> Identifier = getTypeIdentifier(Ty, CGM, TheCU);
3326 
3327   bool isImportedFromModule =
3328       DebugTypeExtRefs && ED->isFromASTFile() && ED->getDefinition();
3329 
3330   // If this is just a forward declaration, construct an appropriately
3331   // marked node and just return it.
3332   if (isImportedFromModule || !ED->getDefinition()) {
3333     // Note that it is possible for enums to be created as part of
3334     // their own declcontext. In this case a FwdDecl will be created
3335     // twice. This doesn't cause a problem because both FwdDecls are
3336     // entered into the ReplaceMap: finalize() will replace the first
3337     // FwdDecl with the second and then replace the second with
3338     // complete type.
3339     llvm::DIScope *EDContext = getDeclContextDescriptor(ED);
3340     llvm::DIFile *DefUnit = getOrCreateFile(ED->getLocation());
3341     llvm::TempDIScope TmpContext(DBuilder.createReplaceableCompositeType(
3342         llvm::dwarf::DW_TAG_enumeration_type, "", TheCU, DefUnit, 0));
3343 
3344     unsigned Line = getLineNumber(ED->getLocation());
3345     StringRef EDName = ED->getName();
3346     llvm::DIType *RetTy = DBuilder.createReplaceableCompositeType(
3347         llvm::dwarf::DW_TAG_enumeration_type, EDName, EDContext, DefUnit, Line,
3348         0, Size, Align, llvm::DINode::FlagFwdDecl, Identifier);
3349 
3350     ReplaceMap.emplace_back(
3351         std::piecewise_construct, std::make_tuple(Ty),
3352         std::make_tuple(static_cast<llvm::Metadata *>(RetTy)));
3353     return RetTy;
3354   }
3355 
3356   return CreateTypeDefinition(Ty);
3357 }
3358 
3359 llvm::DIType *CGDebugInfo::CreateTypeDefinition(const EnumType *Ty) {
3360   const EnumDecl *ED = Ty->getDecl();
3361   uint64_t Size = 0;
3362   uint32_t Align = 0;
3363   if (!ED->getTypeForDecl()->isIncompleteType()) {
3364     Size = CGM.getContext().getTypeSize(ED->getTypeForDecl());
3365     Align = getDeclAlignIfRequired(ED, CGM.getContext());
3366   }
3367 
3368   SmallString<256> Identifier = getTypeIdentifier(Ty, CGM, TheCU);
3369 
3370   SmallVector<llvm::Metadata *, 16> Enumerators;
3371   ED = ED->getDefinition();
3372   for (const auto *Enum : ED->enumerators()) {
3373     Enumerators.push_back(
3374         DBuilder.createEnumerator(Enum->getName(), Enum->getInitVal()));
3375   }
3376 
3377   // Return a CompositeType for the enum itself.
3378   llvm::DINodeArray EltArray = DBuilder.getOrCreateArray(Enumerators);
3379 
3380   llvm::DIFile *DefUnit = getOrCreateFile(ED->getLocation());
3381   unsigned Line = getLineNumber(ED->getLocation());
3382   llvm::DIScope *EnumContext = getDeclContextDescriptor(ED);
3383   llvm::DIType *ClassTy = getOrCreateType(ED->getIntegerType(), DefUnit);
3384   return DBuilder.createEnumerationType(EnumContext, ED->getName(), DefUnit,
3385                                         Line, Size, Align, EltArray, ClassTy,
3386                                         Identifier, ED->isScoped());
3387 }
3388 
3389 llvm::DIMacro *CGDebugInfo::CreateMacro(llvm::DIMacroFile *Parent,
3390                                         unsigned MType, SourceLocation LineLoc,
3391                                         StringRef Name, StringRef Value) {
3392   unsigned Line = LineLoc.isInvalid() ? 0 : getLineNumber(LineLoc);
3393   return DBuilder.createMacro(Parent, Line, MType, Name, Value);
3394 }
3395 
3396 llvm::DIMacroFile *CGDebugInfo::CreateTempMacroFile(llvm::DIMacroFile *Parent,
3397                                                     SourceLocation LineLoc,
3398                                                     SourceLocation FileLoc) {
3399   llvm::DIFile *FName = getOrCreateFile(FileLoc);
3400   unsigned Line = LineLoc.isInvalid() ? 0 : getLineNumber(LineLoc);
3401   return DBuilder.createTempMacroFile(Parent, Line, FName);
3402 }
3403 
3404 static QualType UnwrapTypeForDebugInfo(QualType T, const ASTContext &C) {
3405   Qualifiers Quals;
3406   do {
3407     Qualifiers InnerQuals = T.getLocalQualifiers();
3408     // Qualifiers::operator+() doesn't like it if you add a Qualifier
3409     // that is already there.
3410     Quals += Qualifiers::removeCommonQualifiers(Quals, InnerQuals);
3411     Quals += InnerQuals;
3412     QualType LastT = T;
3413     switch (T->getTypeClass()) {
3414     default:
3415       return C.getQualifiedType(T.getTypePtr(), Quals);
3416     case Type::TemplateSpecialization: {
3417       const auto *Spec = cast<TemplateSpecializationType>(T);
3418       if (Spec->isTypeAlias())
3419         return C.getQualifiedType(T.getTypePtr(), Quals);
3420       T = Spec->desugar();
3421       break;
3422     }
3423     case Type::TypeOfExpr:
3424       T = cast<TypeOfExprType>(T)->getUnderlyingExpr()->getType();
3425       break;
3426     case Type::TypeOf:
3427       T = cast<TypeOfType>(T)->getUnmodifiedType();
3428       break;
3429     case Type::Decltype:
3430       T = cast<DecltypeType>(T)->getUnderlyingType();
3431       break;
3432     case Type::UnaryTransform:
3433       T = cast<UnaryTransformType>(T)->getUnderlyingType();
3434       break;
3435     case Type::Attributed:
3436       T = cast<AttributedType>(T)->getEquivalentType();
3437       break;
3438     case Type::BTFTagAttributed:
3439       T = cast<BTFTagAttributedType>(T)->getWrappedType();
3440       break;
3441     case Type::Elaborated:
3442       T = cast<ElaboratedType>(T)->getNamedType();
3443       break;
3444     case Type::Using:
3445       T = cast<UsingType>(T)->getUnderlyingType();
3446       break;
3447     case Type::Paren:
3448       T = cast<ParenType>(T)->getInnerType();
3449       break;
3450     case Type::MacroQualified:
3451       T = cast<MacroQualifiedType>(T)->getUnderlyingType();
3452       break;
3453     case Type::SubstTemplateTypeParm:
3454       T = cast<SubstTemplateTypeParmType>(T)->getReplacementType();
3455       break;
3456     case Type::Auto:
3457     case Type::DeducedTemplateSpecialization: {
3458       QualType DT = cast<DeducedType>(T)->getDeducedType();
3459       assert(!DT.isNull() && "Undeduced types shouldn't reach here.");
3460       T = DT;
3461       break;
3462     }
3463     case Type::Adjusted:
3464     case Type::Decayed:
3465       // Decayed and adjusted types use the adjusted type in LLVM and DWARF.
3466       T = cast<AdjustedType>(T)->getAdjustedType();
3467       break;
3468     }
3469 
3470     assert(T != LastT && "Type unwrapping failed to unwrap!");
3471     (void)LastT;
3472   } while (true);
3473 }
3474 
3475 llvm::DIType *CGDebugInfo::getTypeOrNull(QualType Ty) {
3476   assert(Ty == UnwrapTypeForDebugInfo(Ty, CGM.getContext()));
3477   auto It = TypeCache.find(Ty.getAsOpaquePtr());
3478   if (It != TypeCache.end()) {
3479     // Verify that the debug info still exists.
3480     if (llvm::Metadata *V = It->second)
3481       return cast<llvm::DIType>(V);
3482   }
3483 
3484   return nullptr;
3485 }
3486 
3487 void CGDebugInfo::completeTemplateDefinition(
3488     const ClassTemplateSpecializationDecl &SD) {
3489   completeUnusedClass(SD);
3490 }
3491 
3492 void CGDebugInfo::completeUnusedClass(const CXXRecordDecl &D) {
3493   if (DebugKind <= llvm::codegenoptions::DebugLineTablesOnly ||
3494       D.isDynamicClass())
3495     return;
3496 
3497   completeClassData(&D);
3498   // In case this type has no member function definitions being emitted, ensure
3499   // it is retained
3500   RetainedTypes.push_back(CGM.getContext().getRecordType(&D).getAsOpaquePtr());
3501 }
3502 
3503 llvm::DIType *CGDebugInfo::getOrCreateType(QualType Ty, llvm::DIFile *Unit) {
3504   if (Ty.isNull())
3505     return nullptr;
3506 
3507   llvm::TimeTraceScope TimeScope("DebugType", [&]() {
3508     std::string Name;
3509     llvm::raw_string_ostream OS(Name);
3510     Ty.print(OS, getPrintingPolicy());
3511     return Name;
3512   });
3513 
3514   // Unwrap the type as needed for debug information.
3515   Ty = UnwrapTypeForDebugInfo(Ty, CGM.getContext());
3516 
3517   if (auto *T = getTypeOrNull(Ty))
3518     return T;
3519 
3520   llvm::DIType *Res = CreateTypeNode(Ty, Unit);
3521   void *TyPtr = Ty.getAsOpaquePtr();
3522 
3523   // And update the type cache.
3524   TypeCache[TyPtr].reset(Res);
3525 
3526   return Res;
3527 }
3528 
3529 llvm::DIModule *CGDebugInfo::getParentModuleOrNull(const Decl *D) {
3530   // A forward declaration inside a module header does not belong to the module.
3531   if (isa<RecordDecl>(D) && !cast<RecordDecl>(D)->getDefinition())
3532     return nullptr;
3533   if (DebugTypeExtRefs && D->isFromASTFile()) {
3534     // Record a reference to an imported clang module or precompiled header.
3535     auto *Reader = CGM.getContext().getExternalSource();
3536     auto Idx = D->getOwningModuleID();
3537     auto Info = Reader->getSourceDescriptor(Idx);
3538     if (Info)
3539       return getOrCreateModuleRef(*Info, /*SkeletonCU=*/true);
3540   } else if (ClangModuleMap) {
3541     // We are building a clang module or a precompiled header.
3542     //
3543     // TODO: When D is a CXXRecordDecl or a C++ Enum, the ODR applies
3544     // and it wouldn't be necessary to specify the parent scope
3545     // because the type is already unique by definition (it would look
3546     // like the output of -fno-standalone-debug). On the other hand,
3547     // the parent scope helps a consumer to quickly locate the object
3548     // file where the type's definition is located, so it might be
3549     // best to make this behavior a command line or debugger tuning
3550     // option.
3551     if (Module *M = D->getOwningModule()) {
3552       // This is a (sub-)module.
3553       auto Info = ASTSourceDescriptor(*M);
3554       return getOrCreateModuleRef(Info, /*SkeletonCU=*/false);
3555     } else {
3556       // This the precompiled header being built.
3557       return getOrCreateModuleRef(PCHDescriptor, /*SkeletonCU=*/false);
3558     }
3559   }
3560 
3561   return nullptr;
3562 }
3563 
3564 llvm::DIType *CGDebugInfo::CreateTypeNode(QualType Ty, llvm::DIFile *Unit) {
3565   // Handle qualifiers, which recursively handles what they refer to.
3566   if (Ty.hasLocalQualifiers())
3567     return CreateQualifiedType(Ty, Unit);
3568 
3569   // Work out details of type.
3570   switch (Ty->getTypeClass()) {
3571 #define TYPE(Class, Base)
3572 #define ABSTRACT_TYPE(Class, Base)
3573 #define NON_CANONICAL_TYPE(Class, Base)
3574 #define DEPENDENT_TYPE(Class, Base) case Type::Class:
3575 #include "clang/AST/TypeNodes.inc"
3576     llvm_unreachable("Dependent types cannot show up in debug information");
3577 
3578   case Type::ExtVector:
3579   case Type::Vector:
3580     return CreateType(cast<VectorType>(Ty), Unit);
3581   case Type::ConstantMatrix:
3582     return CreateType(cast<ConstantMatrixType>(Ty), Unit);
3583   case Type::ObjCObjectPointer:
3584     return CreateType(cast<ObjCObjectPointerType>(Ty), Unit);
3585   case Type::ObjCObject:
3586     return CreateType(cast<ObjCObjectType>(Ty), Unit);
3587   case Type::ObjCTypeParam:
3588     return CreateType(cast<ObjCTypeParamType>(Ty), Unit);
3589   case Type::ObjCInterface:
3590     return CreateType(cast<ObjCInterfaceType>(Ty), Unit);
3591   case Type::Builtin:
3592     return CreateType(cast<BuiltinType>(Ty));
3593   case Type::Complex:
3594     return CreateType(cast<ComplexType>(Ty));
3595   case Type::Pointer:
3596     return CreateType(cast<PointerType>(Ty), Unit);
3597   case Type::BlockPointer:
3598     return CreateType(cast<BlockPointerType>(Ty), Unit);
3599   case Type::Typedef:
3600     return CreateType(cast<TypedefType>(Ty), Unit);
3601   case Type::Record:
3602     return CreateType(cast<RecordType>(Ty));
3603   case Type::Enum:
3604     return CreateEnumType(cast<EnumType>(Ty));
3605   case Type::FunctionProto:
3606   case Type::FunctionNoProto:
3607     return CreateType(cast<FunctionType>(Ty), Unit);
3608   case Type::ConstantArray:
3609   case Type::VariableArray:
3610   case Type::IncompleteArray:
3611     return CreateType(cast<ArrayType>(Ty), Unit);
3612 
3613   case Type::LValueReference:
3614     return CreateType(cast<LValueReferenceType>(Ty), Unit);
3615   case Type::RValueReference:
3616     return CreateType(cast<RValueReferenceType>(Ty), Unit);
3617 
3618   case Type::MemberPointer:
3619     return CreateType(cast<MemberPointerType>(Ty), Unit);
3620 
3621   case Type::Atomic:
3622     return CreateType(cast<AtomicType>(Ty), Unit);
3623 
3624   case Type::BitInt:
3625     return CreateType(cast<BitIntType>(Ty));
3626   case Type::Pipe:
3627     return CreateType(cast<PipeType>(Ty), Unit);
3628 
3629   case Type::TemplateSpecialization:
3630     return CreateType(cast<TemplateSpecializationType>(Ty), Unit);
3631 
3632   case Type::Auto:
3633   case Type::Attributed:
3634   case Type::BTFTagAttributed:
3635   case Type::Adjusted:
3636   case Type::Decayed:
3637   case Type::DeducedTemplateSpecialization:
3638   case Type::Elaborated:
3639   case Type::Using:
3640   case Type::Paren:
3641   case Type::MacroQualified:
3642   case Type::SubstTemplateTypeParm:
3643   case Type::TypeOfExpr:
3644   case Type::TypeOf:
3645   case Type::Decltype:
3646   case Type::UnaryTransform:
3647     break;
3648   }
3649 
3650   llvm_unreachable("type should have been unwrapped!");
3651 }
3652 
3653 llvm::DICompositeType *
3654 CGDebugInfo::getOrCreateLimitedType(const RecordType *Ty) {
3655   QualType QTy(Ty, 0);
3656 
3657   auto *T = cast_or_null<llvm::DICompositeType>(getTypeOrNull(QTy));
3658 
3659   // We may have cached a forward decl when we could have created
3660   // a non-forward decl. Go ahead and create a non-forward decl
3661   // now.
3662   if (T && !T->isForwardDecl())
3663     return T;
3664 
3665   // Otherwise create the type.
3666   llvm::DICompositeType *Res = CreateLimitedType(Ty);
3667 
3668   // Propagate members from the declaration to the definition
3669   // CreateType(const RecordType*) will overwrite this with the members in the
3670   // correct order if the full type is needed.
3671   DBuilder.replaceArrays(Res, T ? T->getElements() : llvm::DINodeArray());
3672 
3673   // And update the type cache.
3674   TypeCache[QTy.getAsOpaquePtr()].reset(Res);
3675   return Res;
3676 }
3677 
3678 // TODO: Currently used for context chains when limiting debug info.
3679 llvm::DICompositeType *CGDebugInfo::CreateLimitedType(const RecordType *Ty) {
3680   RecordDecl *RD = Ty->getDecl();
3681 
3682   // Get overall information about the record type for the debug info.
3683   StringRef RDName = getClassName(RD);
3684   const SourceLocation Loc = RD->getLocation();
3685   llvm::DIFile *DefUnit = nullptr;
3686   unsigned Line = 0;
3687   if (Loc.isValid()) {
3688     DefUnit = getOrCreateFile(Loc);
3689     Line = getLineNumber(Loc);
3690   }
3691 
3692   llvm::DIScope *RDContext = getDeclContextDescriptor(RD);
3693 
3694   // If we ended up creating the type during the context chain construction,
3695   // just return that.
3696   auto *T = cast_or_null<llvm::DICompositeType>(
3697       getTypeOrNull(CGM.getContext().getRecordType(RD)));
3698   if (T && (!T->isForwardDecl() || !RD->getDefinition()))
3699     return T;
3700 
3701   // If this is just a forward or incomplete declaration, construct an
3702   // appropriately marked node and just return it.
3703   const RecordDecl *D = RD->getDefinition();
3704   if (!D || !D->isCompleteDefinition())
3705     return getOrCreateRecordFwdDecl(Ty, RDContext);
3706 
3707   uint64_t Size = CGM.getContext().getTypeSize(Ty);
3708   // __attribute__((aligned)) can increase or decrease alignment *except* on a
3709   // struct or struct member, where it only increases  alignment unless 'packed'
3710   // is also specified. To handle this case, the `getTypeAlignIfRequired` needs
3711   // to be used.
3712   auto Align = getTypeAlignIfRequired(Ty, CGM.getContext());
3713 
3714   SmallString<256> Identifier = getTypeIdentifier(Ty, CGM, TheCU);
3715 
3716   // Explicitly record the calling convention and export symbols for C++
3717   // records.
3718   auto Flags = llvm::DINode::FlagZero;
3719   if (auto CXXRD = dyn_cast<CXXRecordDecl>(RD)) {
3720     if (CGM.getCXXABI().getRecordArgABI(CXXRD) == CGCXXABI::RAA_Indirect)
3721       Flags |= llvm::DINode::FlagTypePassByReference;
3722     else
3723       Flags |= llvm::DINode::FlagTypePassByValue;
3724 
3725     // Record if a C++ record is non-trivial type.
3726     if (!CXXRD->isTrivial())
3727       Flags |= llvm::DINode::FlagNonTrivial;
3728 
3729     // Record exports it symbols to the containing structure.
3730     if (CXXRD->isAnonymousStructOrUnion())
3731         Flags |= llvm::DINode::FlagExportSymbols;
3732 
3733     Flags |= getAccessFlag(CXXRD->getAccess(),
3734                            dyn_cast<CXXRecordDecl>(CXXRD->getDeclContext()));
3735   }
3736 
3737   llvm::DINodeArray Annotations = CollectBTFDeclTagAnnotations(D);
3738   llvm::DICompositeType *RealDecl = DBuilder.createReplaceableCompositeType(
3739       getTagForRecord(RD), RDName, RDContext, DefUnit, Line, 0, Size, Align,
3740       Flags, Identifier, Annotations);
3741 
3742   // Elements of composite types usually have back to the type, creating
3743   // uniquing cycles.  Distinct nodes are more efficient.
3744   switch (RealDecl->getTag()) {
3745   default:
3746     llvm_unreachable("invalid composite type tag");
3747 
3748   case llvm::dwarf::DW_TAG_array_type:
3749   case llvm::dwarf::DW_TAG_enumeration_type:
3750     // Array elements and most enumeration elements don't have back references,
3751     // so they don't tend to be involved in uniquing cycles and there is some
3752     // chance of merging them when linking together two modules.  Only make
3753     // them distinct if they are ODR-uniqued.
3754     if (Identifier.empty())
3755       break;
3756     [[fallthrough]];
3757 
3758   case llvm::dwarf::DW_TAG_structure_type:
3759   case llvm::dwarf::DW_TAG_union_type:
3760   case llvm::dwarf::DW_TAG_class_type:
3761     // Immediately resolve to a distinct node.
3762     RealDecl =
3763         llvm::MDNode::replaceWithDistinct(llvm::TempDICompositeType(RealDecl));
3764     break;
3765   }
3766 
3767   RegionMap[Ty->getDecl()].reset(RealDecl);
3768   TypeCache[QualType(Ty, 0).getAsOpaquePtr()].reset(RealDecl);
3769 
3770   if (const auto *TSpecial = dyn_cast<ClassTemplateSpecializationDecl>(RD))
3771     DBuilder.replaceArrays(RealDecl, llvm::DINodeArray(),
3772                            CollectCXXTemplateParams(TSpecial, DefUnit));
3773   return RealDecl;
3774 }
3775 
3776 void CGDebugInfo::CollectContainingType(const CXXRecordDecl *RD,
3777                                         llvm::DICompositeType *RealDecl) {
3778   // A class's primary base or the class itself contains the vtable.
3779   llvm::DIType *ContainingType = nullptr;
3780   const ASTRecordLayout &RL = CGM.getContext().getASTRecordLayout(RD);
3781   if (const CXXRecordDecl *PBase = RL.getPrimaryBase()) {
3782     // Seek non-virtual primary base root.
3783     while (true) {
3784       const ASTRecordLayout &BRL = CGM.getContext().getASTRecordLayout(PBase);
3785       const CXXRecordDecl *PBT = BRL.getPrimaryBase();
3786       if (PBT && !BRL.isPrimaryBaseVirtual())
3787         PBase = PBT;
3788       else
3789         break;
3790     }
3791     ContainingType = getOrCreateType(QualType(PBase->getTypeForDecl(), 0),
3792                                      getOrCreateFile(RD->getLocation()));
3793   } else if (RD->isDynamicClass())
3794     ContainingType = RealDecl;
3795 
3796   DBuilder.replaceVTableHolder(RealDecl, ContainingType);
3797 }
3798 
3799 llvm::DIType *CGDebugInfo::CreateMemberType(llvm::DIFile *Unit, QualType FType,
3800                                             StringRef Name, uint64_t *Offset) {
3801   llvm::DIType *FieldTy = CGDebugInfo::getOrCreateType(FType, Unit);
3802   uint64_t FieldSize = CGM.getContext().getTypeSize(FType);
3803   auto FieldAlign = getTypeAlignIfRequired(FType, CGM.getContext());
3804   llvm::DIType *Ty =
3805       DBuilder.createMemberType(Unit, Name, Unit, 0, FieldSize, FieldAlign,
3806                                 *Offset, llvm::DINode::FlagZero, FieldTy);
3807   *Offset += FieldSize;
3808   return Ty;
3809 }
3810 
3811 void CGDebugInfo::collectFunctionDeclProps(GlobalDecl GD, llvm::DIFile *Unit,
3812                                            StringRef &Name,
3813                                            StringRef &LinkageName,
3814                                            llvm::DIScope *&FDContext,
3815                                            llvm::DINodeArray &TParamsArray,
3816                                            llvm::DINode::DIFlags &Flags) {
3817   const auto *FD = cast<FunctionDecl>(GD.getCanonicalDecl().getDecl());
3818   Name = getFunctionName(FD);
3819   // Use mangled name as linkage name for C/C++ functions.
3820   if (FD->getType()->getAs<FunctionProtoType>())
3821     LinkageName = CGM.getMangledName(GD);
3822   if (FD->hasPrototype())
3823     Flags |= llvm::DINode::FlagPrototyped;
3824   // No need to replicate the linkage name if it isn't different from the
3825   // subprogram name, no need to have it at all unless coverage is enabled or
3826   // debug is set to more than just line tables or extra debug info is needed.
3827   if (LinkageName == Name ||
3828       (CGM.getCodeGenOpts().CoverageNotesFile.empty() &&
3829        CGM.getCodeGenOpts().CoverageDataFile.empty() &&
3830        !CGM.getCodeGenOpts().DebugInfoForProfiling &&
3831        !CGM.getCodeGenOpts().PseudoProbeForProfiling &&
3832        DebugKind <= llvm::codegenoptions::DebugLineTablesOnly))
3833     LinkageName = StringRef();
3834 
3835   // Emit the function scope in line tables only mode (if CodeView) to
3836   // differentiate between function names.
3837   if (CGM.getCodeGenOpts().hasReducedDebugInfo() ||
3838       (DebugKind == llvm::codegenoptions::DebugLineTablesOnly &&
3839        CGM.getCodeGenOpts().EmitCodeView)) {
3840     if (const NamespaceDecl *NSDecl =
3841             dyn_cast_or_null<NamespaceDecl>(FD->getDeclContext()))
3842       FDContext = getOrCreateNamespace(NSDecl);
3843     else if (const RecordDecl *RDecl =
3844                  dyn_cast_or_null<RecordDecl>(FD->getDeclContext())) {
3845       llvm::DIScope *Mod = getParentModuleOrNull(RDecl);
3846       FDContext = getContextDescriptor(RDecl, Mod ? Mod : TheCU);
3847     }
3848   }
3849   if (CGM.getCodeGenOpts().hasReducedDebugInfo()) {
3850     // Check if it is a noreturn-marked function
3851     if (FD->isNoReturn())
3852       Flags |= llvm::DINode::FlagNoReturn;
3853     // Collect template parameters.
3854     TParamsArray = CollectFunctionTemplateParams(FD, Unit);
3855   }
3856 }
3857 
3858 void CGDebugInfo::collectVarDeclProps(const VarDecl *VD, llvm::DIFile *&Unit,
3859                                       unsigned &LineNo, QualType &T,
3860                                       StringRef &Name, StringRef &LinkageName,
3861                                       llvm::MDTuple *&TemplateParameters,
3862                                       llvm::DIScope *&VDContext) {
3863   Unit = getOrCreateFile(VD->getLocation());
3864   LineNo = getLineNumber(VD->getLocation());
3865 
3866   setLocation(VD->getLocation());
3867 
3868   T = VD->getType();
3869   if (T->isIncompleteArrayType()) {
3870     // CodeGen turns int[] into int[1] so we'll do the same here.
3871     llvm::APInt ConstVal(32, 1);
3872     QualType ET = CGM.getContext().getAsArrayType(T)->getElementType();
3873 
3874     T = CGM.getContext().getConstantArrayType(ET, ConstVal, nullptr,
3875                                               ArrayType::Normal, 0);
3876   }
3877 
3878   Name = VD->getName();
3879   if (VD->getDeclContext() && !isa<FunctionDecl>(VD->getDeclContext()) &&
3880       !isa<ObjCMethodDecl>(VD->getDeclContext()))
3881     LinkageName = CGM.getMangledName(VD);
3882   if (LinkageName == Name)
3883     LinkageName = StringRef();
3884 
3885   if (isa<VarTemplateSpecializationDecl>(VD)) {
3886     llvm::DINodeArray parameterNodes = CollectVarTemplateParams(VD, &*Unit);
3887     TemplateParameters = parameterNodes.get();
3888   } else {
3889     TemplateParameters = nullptr;
3890   }
3891 
3892   // Since we emit declarations (DW_AT_members) for static members, place the
3893   // definition of those static members in the namespace they were declared in
3894   // in the source code (the lexical decl context).
3895   // FIXME: Generalize this for even non-member global variables where the
3896   // declaration and definition may have different lexical decl contexts, once
3897   // we have support for emitting declarations of (non-member) global variables.
3898   const DeclContext *DC = VD->isStaticDataMember() ? VD->getLexicalDeclContext()
3899                                                    : VD->getDeclContext();
3900   // When a record type contains an in-line initialization of a static data
3901   // member, and the record type is marked as __declspec(dllexport), an implicit
3902   // definition of the member will be created in the record context.  DWARF
3903   // doesn't seem to have a nice way to describe this in a form that consumers
3904   // are likely to understand, so fake the "normal" situation of a definition
3905   // outside the class by putting it in the global scope.
3906   if (DC->isRecord())
3907     DC = CGM.getContext().getTranslationUnitDecl();
3908 
3909   llvm::DIScope *Mod = getParentModuleOrNull(VD);
3910   VDContext = getContextDescriptor(cast<Decl>(DC), Mod ? Mod : TheCU);
3911 }
3912 
3913 llvm::DISubprogram *CGDebugInfo::getFunctionFwdDeclOrStub(GlobalDecl GD,
3914                                                           bool Stub) {
3915   llvm::DINodeArray TParamsArray;
3916   StringRef Name, LinkageName;
3917   llvm::DINode::DIFlags Flags = llvm::DINode::FlagZero;
3918   llvm::DISubprogram::DISPFlags SPFlags = llvm::DISubprogram::SPFlagZero;
3919   SourceLocation Loc = GD.getDecl()->getLocation();
3920   llvm::DIFile *Unit = getOrCreateFile(Loc);
3921   llvm::DIScope *DContext = Unit;
3922   unsigned Line = getLineNumber(Loc);
3923   collectFunctionDeclProps(GD, Unit, Name, LinkageName, DContext, TParamsArray,
3924                            Flags);
3925   auto *FD = cast<FunctionDecl>(GD.getDecl());
3926 
3927   // Build function type.
3928   SmallVector<QualType, 16> ArgTypes;
3929   for (const ParmVarDecl *Parm : FD->parameters())
3930     ArgTypes.push_back(Parm->getType());
3931 
3932   CallingConv CC = FD->getType()->castAs<FunctionType>()->getCallConv();
3933   QualType FnType = CGM.getContext().getFunctionType(
3934       FD->getReturnType(), ArgTypes, FunctionProtoType::ExtProtoInfo(CC));
3935   if (!FD->isExternallyVisible())
3936     SPFlags |= llvm::DISubprogram::SPFlagLocalToUnit;
3937   if (CGM.getLangOpts().Optimize)
3938     SPFlags |= llvm::DISubprogram::SPFlagOptimized;
3939 
3940   if (Stub) {
3941     Flags |= getCallSiteRelatedAttrs();
3942     SPFlags |= llvm::DISubprogram::SPFlagDefinition;
3943     return DBuilder.createFunction(
3944         DContext, Name, LinkageName, Unit, Line,
3945         getOrCreateFunctionType(GD.getDecl(), FnType, Unit), 0, Flags, SPFlags,
3946         TParamsArray.get(), getFunctionDeclaration(FD));
3947   }
3948 
3949   llvm::DISubprogram *SP = DBuilder.createTempFunctionFwdDecl(
3950       DContext, Name, LinkageName, Unit, Line,
3951       getOrCreateFunctionType(GD.getDecl(), FnType, Unit), 0, Flags, SPFlags,
3952       TParamsArray.get(), getFunctionDeclaration(FD));
3953   const FunctionDecl *CanonDecl = FD->getCanonicalDecl();
3954   FwdDeclReplaceMap.emplace_back(std::piecewise_construct,
3955                                  std::make_tuple(CanonDecl),
3956                                  std::make_tuple(SP));
3957   return SP;
3958 }
3959 
3960 llvm::DISubprogram *CGDebugInfo::getFunctionForwardDeclaration(GlobalDecl GD) {
3961   return getFunctionFwdDeclOrStub(GD, /* Stub = */ false);
3962 }
3963 
3964 llvm::DISubprogram *CGDebugInfo::getFunctionStub(GlobalDecl GD) {
3965   return getFunctionFwdDeclOrStub(GD, /* Stub = */ true);
3966 }
3967 
3968 llvm::DIGlobalVariable *
3969 CGDebugInfo::getGlobalVariableForwardDeclaration(const VarDecl *VD) {
3970   QualType T;
3971   StringRef Name, LinkageName;
3972   SourceLocation Loc = VD->getLocation();
3973   llvm::DIFile *Unit = getOrCreateFile(Loc);
3974   llvm::DIScope *DContext = Unit;
3975   unsigned Line = getLineNumber(Loc);
3976   llvm::MDTuple *TemplateParameters = nullptr;
3977 
3978   collectVarDeclProps(VD, Unit, Line, T, Name, LinkageName, TemplateParameters,
3979                       DContext);
3980   auto Align = getDeclAlignIfRequired(VD, CGM.getContext());
3981   auto *GV = DBuilder.createTempGlobalVariableFwdDecl(
3982       DContext, Name, LinkageName, Unit, Line, getOrCreateType(T, Unit),
3983       !VD->isExternallyVisible(), nullptr, TemplateParameters, Align);
3984   FwdDeclReplaceMap.emplace_back(
3985       std::piecewise_construct,
3986       std::make_tuple(cast<VarDecl>(VD->getCanonicalDecl())),
3987       std::make_tuple(static_cast<llvm::Metadata *>(GV)));
3988   return GV;
3989 }
3990 
3991 llvm::DINode *CGDebugInfo::getDeclarationOrDefinition(const Decl *D) {
3992   // We only need a declaration (not a definition) of the type - so use whatever
3993   // we would otherwise do to get a type for a pointee. (forward declarations in
3994   // limited debug info, full definitions (if the type definition is available)
3995   // in unlimited debug info)
3996   if (const auto *TD = dyn_cast<TypeDecl>(D))
3997     return getOrCreateType(CGM.getContext().getTypeDeclType(TD),
3998                            getOrCreateFile(TD->getLocation()));
3999   auto I = DeclCache.find(D->getCanonicalDecl());
4000 
4001   if (I != DeclCache.end()) {
4002     auto N = I->second;
4003     if (auto *GVE = dyn_cast_or_null<llvm::DIGlobalVariableExpression>(N))
4004       return GVE->getVariable();
4005     return cast<llvm::DINode>(N);
4006   }
4007 
4008   // Search imported declaration cache if it is already defined
4009   // as imported declaration.
4010   auto IE = ImportedDeclCache.find(D->getCanonicalDecl());
4011 
4012   if (IE != ImportedDeclCache.end()) {
4013     auto N = IE->second;
4014     if (auto *GVE = dyn_cast_or_null<llvm::DIImportedEntity>(N))
4015       return cast<llvm::DINode>(GVE);
4016     return dyn_cast_or_null<llvm::DINode>(N);
4017   }
4018 
4019   // No definition for now. Emit a forward definition that might be
4020   // merged with a potential upcoming definition.
4021   if (const auto *FD = dyn_cast<FunctionDecl>(D))
4022     return getFunctionForwardDeclaration(FD);
4023   else if (const auto *VD = dyn_cast<VarDecl>(D))
4024     return getGlobalVariableForwardDeclaration(VD);
4025 
4026   return nullptr;
4027 }
4028 
4029 llvm::DISubprogram *CGDebugInfo::getFunctionDeclaration(const Decl *D) {
4030   if (!D || DebugKind <= llvm::codegenoptions::DebugLineTablesOnly)
4031     return nullptr;
4032 
4033   const auto *FD = dyn_cast<FunctionDecl>(D);
4034   if (!FD)
4035     return nullptr;
4036 
4037   // Setup context.
4038   auto *S = getDeclContextDescriptor(D);
4039 
4040   auto MI = SPCache.find(FD->getCanonicalDecl());
4041   if (MI == SPCache.end()) {
4042     if (const auto *MD = dyn_cast<CXXMethodDecl>(FD->getCanonicalDecl())) {
4043       return CreateCXXMemberFunction(MD, getOrCreateFile(MD->getLocation()),
4044                                      cast<llvm::DICompositeType>(S));
4045     }
4046   }
4047   if (MI != SPCache.end()) {
4048     auto *SP = dyn_cast_or_null<llvm::DISubprogram>(MI->second);
4049     if (SP && !SP->isDefinition())
4050       return SP;
4051   }
4052 
4053   for (auto *NextFD : FD->redecls()) {
4054     auto MI = SPCache.find(NextFD->getCanonicalDecl());
4055     if (MI != SPCache.end()) {
4056       auto *SP = dyn_cast_or_null<llvm::DISubprogram>(MI->second);
4057       if (SP && !SP->isDefinition())
4058         return SP;
4059     }
4060   }
4061   return nullptr;
4062 }
4063 
4064 llvm::DISubprogram *CGDebugInfo::getObjCMethodDeclaration(
4065     const Decl *D, llvm::DISubroutineType *FnType, unsigned LineNo,
4066     llvm::DINode::DIFlags Flags, llvm::DISubprogram::DISPFlags SPFlags) {
4067   if (!D || DebugKind <= llvm::codegenoptions::DebugLineTablesOnly)
4068     return nullptr;
4069 
4070   const auto *OMD = dyn_cast<ObjCMethodDecl>(D);
4071   if (!OMD)
4072     return nullptr;
4073 
4074   if (CGM.getCodeGenOpts().DwarfVersion < 5 && !OMD->isDirectMethod())
4075     return nullptr;
4076 
4077   if (OMD->isDirectMethod())
4078     SPFlags |= llvm::DISubprogram::SPFlagObjCDirect;
4079 
4080   // Starting with DWARF V5 method declarations are emitted as children of
4081   // the interface type.
4082   auto *ID = dyn_cast_or_null<ObjCInterfaceDecl>(D->getDeclContext());
4083   if (!ID)
4084     ID = OMD->getClassInterface();
4085   if (!ID)
4086     return nullptr;
4087   QualType QTy(ID->getTypeForDecl(), 0);
4088   auto It = TypeCache.find(QTy.getAsOpaquePtr());
4089   if (It == TypeCache.end())
4090     return nullptr;
4091   auto *InterfaceType = cast<llvm::DICompositeType>(It->second);
4092   llvm::DISubprogram *FD = DBuilder.createFunction(
4093       InterfaceType, getObjCMethodName(OMD), StringRef(),
4094       InterfaceType->getFile(), LineNo, FnType, LineNo, Flags, SPFlags);
4095   DBuilder.finalizeSubprogram(FD);
4096   ObjCMethodCache[ID].push_back({FD, OMD->isDirectMethod()});
4097   return FD;
4098 }
4099 
4100 // getOrCreateFunctionType - Construct type. If it is a c++ method, include
4101 // implicit parameter "this".
4102 llvm::DISubroutineType *CGDebugInfo::getOrCreateFunctionType(const Decl *D,
4103                                                              QualType FnType,
4104                                                              llvm::DIFile *F) {
4105   // In CodeView, we emit the function types in line tables only because the
4106   // only way to distinguish between functions is by display name and type.
4107   if (!D || (DebugKind <= llvm::codegenoptions::DebugLineTablesOnly &&
4108              !CGM.getCodeGenOpts().EmitCodeView))
4109     // Create fake but valid subroutine type. Otherwise -verify would fail, and
4110     // subprogram DIE will miss DW_AT_decl_file and DW_AT_decl_line fields.
4111     return DBuilder.createSubroutineType(
4112         DBuilder.getOrCreateTypeArray(std::nullopt));
4113 
4114   if (const auto *Method = dyn_cast<CXXMethodDecl>(D))
4115     return getOrCreateMethodType(Method, F);
4116 
4117   const auto *FTy = FnType->getAs<FunctionType>();
4118   CallingConv CC = FTy ? FTy->getCallConv() : CallingConv::CC_C;
4119 
4120   if (const auto *OMethod = dyn_cast<ObjCMethodDecl>(D)) {
4121     // Add "self" and "_cmd"
4122     SmallVector<llvm::Metadata *, 16> Elts;
4123 
4124     // First element is always return type. For 'void' functions it is NULL.
4125     QualType ResultTy = OMethod->getReturnType();
4126 
4127     // Replace the instancetype keyword with the actual type.
4128     if (ResultTy == CGM.getContext().getObjCInstanceType())
4129       ResultTy = CGM.getContext().getPointerType(
4130           QualType(OMethod->getClassInterface()->getTypeForDecl(), 0));
4131 
4132     Elts.push_back(getOrCreateType(ResultTy, F));
4133     // "self" pointer is always first argument.
4134     QualType SelfDeclTy;
4135     if (auto *SelfDecl = OMethod->getSelfDecl())
4136       SelfDeclTy = SelfDecl->getType();
4137     else if (auto *FPT = dyn_cast<FunctionProtoType>(FnType))
4138       if (FPT->getNumParams() > 1)
4139         SelfDeclTy = FPT->getParamType(0);
4140     if (!SelfDeclTy.isNull())
4141       Elts.push_back(
4142           CreateSelfType(SelfDeclTy, getOrCreateType(SelfDeclTy, F)));
4143     // "_cmd" pointer is always second argument.
4144     Elts.push_back(DBuilder.createArtificialType(
4145         getOrCreateType(CGM.getContext().getObjCSelType(), F)));
4146     // Get rest of the arguments.
4147     for (const auto *PI : OMethod->parameters())
4148       Elts.push_back(getOrCreateType(PI->getType(), F));
4149     // Variadic methods need a special marker at the end of the type list.
4150     if (OMethod->isVariadic())
4151       Elts.push_back(DBuilder.createUnspecifiedParameter());
4152 
4153     llvm::DITypeRefArray EltTypeArray = DBuilder.getOrCreateTypeArray(Elts);
4154     return DBuilder.createSubroutineType(EltTypeArray, llvm::DINode::FlagZero,
4155                                          getDwarfCC(CC));
4156   }
4157 
4158   // Handle variadic function types; they need an additional
4159   // unspecified parameter.
4160   if (const auto *FD = dyn_cast<FunctionDecl>(D))
4161     if (FD->isVariadic()) {
4162       SmallVector<llvm::Metadata *, 16> EltTys;
4163       EltTys.push_back(getOrCreateType(FD->getReturnType(), F));
4164       if (const auto *FPT = dyn_cast<FunctionProtoType>(FnType))
4165         for (QualType ParamType : FPT->param_types())
4166           EltTys.push_back(getOrCreateType(ParamType, F));
4167       EltTys.push_back(DBuilder.createUnspecifiedParameter());
4168       llvm::DITypeRefArray EltTypeArray = DBuilder.getOrCreateTypeArray(EltTys);
4169       return DBuilder.createSubroutineType(EltTypeArray, llvm::DINode::FlagZero,
4170                                            getDwarfCC(CC));
4171     }
4172 
4173   return cast<llvm::DISubroutineType>(getOrCreateType(FnType, F));
4174 }
4175 
4176 QualType
4177 CGDebugInfo::getFunctionType(const FunctionDecl *FD, QualType RetTy,
4178                              const SmallVectorImpl<const VarDecl *> &Args) {
4179   CallingConv CC = CallingConv::CC_C;
4180   if (FD)
4181     if (const auto *SrcFnTy = FD->getType()->getAs<FunctionType>())
4182       CC = SrcFnTy->getCallConv();
4183   SmallVector<QualType, 16> ArgTypes;
4184   for (const VarDecl *VD : Args)
4185     ArgTypes.push_back(VD->getType());
4186   return CGM.getContext().getFunctionType(RetTy, ArgTypes,
4187                                           FunctionProtoType::ExtProtoInfo(CC));
4188 }
4189 
4190 void CGDebugInfo::emitFunctionStart(GlobalDecl GD, SourceLocation Loc,
4191                                     SourceLocation ScopeLoc, QualType FnType,
4192                                     llvm::Function *Fn, bool CurFuncIsThunk) {
4193   StringRef Name;
4194   StringRef LinkageName;
4195 
4196   FnBeginRegionCount.push_back(LexicalBlockStack.size());
4197 
4198   const Decl *D = GD.getDecl();
4199   bool HasDecl = (D != nullptr);
4200 
4201   llvm::DINode::DIFlags Flags = llvm::DINode::FlagZero;
4202   llvm::DISubprogram::DISPFlags SPFlags = llvm::DISubprogram::SPFlagZero;
4203   llvm::DIFile *Unit = getOrCreateFile(Loc);
4204   llvm::DIScope *FDContext = Unit;
4205   llvm::DINodeArray TParamsArray;
4206   if (!HasDecl) {
4207     // Use llvm function name.
4208     LinkageName = Fn->getName();
4209   } else if (const auto *FD = dyn_cast<FunctionDecl>(D)) {
4210     // If there is a subprogram for this function available then use it.
4211     auto FI = SPCache.find(FD->getCanonicalDecl());
4212     if (FI != SPCache.end()) {
4213       auto *SP = dyn_cast_or_null<llvm::DISubprogram>(FI->second);
4214       if (SP && SP->isDefinition()) {
4215         LexicalBlockStack.emplace_back(SP);
4216         RegionMap[D].reset(SP);
4217         return;
4218       }
4219     }
4220     collectFunctionDeclProps(GD, Unit, Name, LinkageName, FDContext,
4221                              TParamsArray, Flags);
4222   } else if (const auto *OMD = dyn_cast<ObjCMethodDecl>(D)) {
4223     Name = getObjCMethodName(OMD);
4224     Flags |= llvm::DINode::FlagPrototyped;
4225   } else if (isa<VarDecl>(D) &&
4226              GD.getDynamicInitKind() != DynamicInitKind::NoStub) {
4227     // This is a global initializer or atexit destructor for a global variable.
4228     Name = getDynamicInitializerName(cast<VarDecl>(D), GD.getDynamicInitKind(),
4229                                      Fn);
4230   } else {
4231     Name = Fn->getName();
4232 
4233     if (isa<BlockDecl>(D))
4234       LinkageName = Name;
4235 
4236     Flags |= llvm::DINode::FlagPrototyped;
4237   }
4238   if (Name.startswith("\01"))
4239     Name = Name.substr(1);
4240 
4241   assert((!D || !isa<VarDecl>(D) ||
4242           GD.getDynamicInitKind() != DynamicInitKind::NoStub) &&
4243          "Unexpected DynamicInitKind !");
4244 
4245   if (!HasDecl || D->isImplicit() || D->hasAttr<ArtificialAttr>() ||
4246       isa<VarDecl>(D) || isa<CapturedDecl>(D)) {
4247     Flags |= llvm::DINode::FlagArtificial;
4248     // Artificial functions should not silently reuse CurLoc.
4249     CurLoc = SourceLocation();
4250   }
4251 
4252   if (CurFuncIsThunk)
4253     Flags |= llvm::DINode::FlagThunk;
4254 
4255   if (Fn->hasLocalLinkage())
4256     SPFlags |= llvm::DISubprogram::SPFlagLocalToUnit;
4257   if (CGM.getLangOpts().Optimize)
4258     SPFlags |= llvm::DISubprogram::SPFlagOptimized;
4259 
4260   llvm::DINode::DIFlags FlagsForDef = Flags | getCallSiteRelatedAttrs();
4261   llvm::DISubprogram::DISPFlags SPFlagsForDef =
4262       SPFlags | llvm::DISubprogram::SPFlagDefinition;
4263 
4264   const unsigned LineNo = getLineNumber(Loc.isValid() ? Loc : CurLoc);
4265   unsigned ScopeLine = getLineNumber(ScopeLoc);
4266   llvm::DISubroutineType *DIFnType = getOrCreateFunctionType(D, FnType, Unit);
4267   llvm::DISubprogram *Decl = nullptr;
4268   llvm::DINodeArray Annotations = nullptr;
4269   if (D) {
4270     Decl = isa<ObjCMethodDecl>(D)
4271                ? getObjCMethodDeclaration(D, DIFnType, LineNo, Flags, SPFlags)
4272                : getFunctionDeclaration(D);
4273     Annotations = CollectBTFDeclTagAnnotations(D);
4274   }
4275 
4276   // FIXME: The function declaration we're constructing here is mostly reusing
4277   // declarations from CXXMethodDecl and not constructing new ones for arbitrary
4278   // FunctionDecls. When/if we fix this we can have FDContext be TheCU/null for
4279   // all subprograms instead of the actual context since subprogram definitions
4280   // are emitted as CU level entities by the backend.
4281   llvm::DISubprogram *SP = DBuilder.createFunction(
4282       FDContext, Name, LinkageName, Unit, LineNo, DIFnType, ScopeLine,
4283       FlagsForDef, SPFlagsForDef, TParamsArray.get(), Decl, nullptr,
4284       Annotations);
4285   Fn->setSubprogram(SP);
4286   // We might get here with a VarDecl in the case we're generating
4287   // code for the initialization of globals. Do not record these decls
4288   // as they will overwrite the actual VarDecl Decl in the cache.
4289   if (HasDecl && isa<FunctionDecl>(D))
4290     DeclCache[D->getCanonicalDecl()].reset(SP);
4291 
4292   // Push the function onto the lexical block stack.
4293   LexicalBlockStack.emplace_back(SP);
4294 
4295   if (HasDecl)
4296     RegionMap[D].reset(SP);
4297 }
4298 
4299 void CGDebugInfo::EmitFunctionDecl(GlobalDecl GD, SourceLocation Loc,
4300                                    QualType FnType, llvm::Function *Fn) {
4301   StringRef Name;
4302   StringRef LinkageName;
4303 
4304   const Decl *D = GD.getDecl();
4305   if (!D)
4306     return;
4307 
4308   llvm::TimeTraceScope TimeScope("DebugFunction", [&]() {
4309     return GetName(D, true);
4310   });
4311 
4312   llvm::DINode::DIFlags Flags = llvm::DINode::FlagZero;
4313   llvm::DIFile *Unit = getOrCreateFile(Loc);
4314   bool IsDeclForCallSite = Fn ? true : false;
4315   llvm::DIScope *FDContext =
4316       IsDeclForCallSite ? Unit : getDeclContextDescriptor(D);
4317   llvm::DINodeArray TParamsArray;
4318   if (isa<FunctionDecl>(D)) {
4319     // If there is a DISubprogram for this function available then use it.
4320     collectFunctionDeclProps(GD, Unit, Name, LinkageName, FDContext,
4321                              TParamsArray, Flags);
4322   } else if (const auto *OMD = dyn_cast<ObjCMethodDecl>(D)) {
4323     Name = getObjCMethodName(OMD);
4324     Flags |= llvm::DINode::FlagPrototyped;
4325   } else {
4326     llvm_unreachable("not a function or ObjC method");
4327   }
4328   if (!Name.empty() && Name[0] == '\01')
4329     Name = Name.substr(1);
4330 
4331   if (D->isImplicit()) {
4332     Flags |= llvm::DINode::FlagArtificial;
4333     // Artificial functions without a location should not silently reuse CurLoc.
4334     if (Loc.isInvalid())
4335       CurLoc = SourceLocation();
4336   }
4337   unsigned LineNo = getLineNumber(Loc);
4338   unsigned ScopeLine = 0;
4339   llvm::DISubprogram::DISPFlags SPFlags = llvm::DISubprogram::SPFlagZero;
4340   if (CGM.getLangOpts().Optimize)
4341     SPFlags |= llvm::DISubprogram::SPFlagOptimized;
4342 
4343   llvm::DINodeArray Annotations = CollectBTFDeclTagAnnotations(D);
4344   llvm::DISubroutineType *STy = getOrCreateFunctionType(D, FnType, Unit);
4345   llvm::DISubprogram *SP = DBuilder.createFunction(
4346       FDContext, Name, LinkageName, Unit, LineNo, STy, ScopeLine, Flags,
4347       SPFlags, TParamsArray.get(), nullptr, nullptr, Annotations);
4348 
4349   // Preserve btf_decl_tag attributes for parameters of extern functions
4350   // for BPF target. The parameters created in this loop are attached as
4351   // DISubprogram's retainedNodes in the subsequent finalizeSubprogram call.
4352   if (IsDeclForCallSite && CGM.getTarget().getTriple().isBPF()) {
4353     if (auto *FD = dyn_cast<FunctionDecl>(D)) {
4354       llvm::DITypeRefArray ParamTypes = STy->getTypeArray();
4355       unsigned ArgNo = 1;
4356       for (ParmVarDecl *PD : FD->parameters()) {
4357         llvm::DINodeArray ParamAnnotations = CollectBTFDeclTagAnnotations(PD);
4358         DBuilder.createParameterVariable(
4359             SP, PD->getName(), ArgNo, Unit, LineNo, ParamTypes[ArgNo], true,
4360             llvm::DINode::FlagZero, ParamAnnotations);
4361         ++ArgNo;
4362       }
4363     }
4364   }
4365 
4366   if (IsDeclForCallSite)
4367     Fn->setSubprogram(SP);
4368 
4369   DBuilder.finalizeSubprogram(SP);
4370 }
4371 
4372 void CGDebugInfo::EmitFuncDeclForCallSite(llvm::CallBase *CallOrInvoke,
4373                                           QualType CalleeType,
4374                                           const FunctionDecl *CalleeDecl) {
4375   if (!CallOrInvoke)
4376     return;
4377   auto *Func = CallOrInvoke->getCalledFunction();
4378   if (!Func)
4379     return;
4380   if (Func->getSubprogram())
4381     return;
4382 
4383   // Do not emit a declaration subprogram for a function with nodebug
4384   // attribute, or if call site info isn't required.
4385   if (CalleeDecl->hasAttr<NoDebugAttr>() ||
4386       getCallSiteRelatedAttrs() == llvm::DINode::FlagZero)
4387     return;
4388 
4389   // If there is no DISubprogram attached to the function being called,
4390   // create the one describing the function in order to have complete
4391   // call site debug info.
4392   if (!CalleeDecl->isStatic() && !CalleeDecl->isInlined())
4393     EmitFunctionDecl(CalleeDecl, CalleeDecl->getLocation(), CalleeType, Func);
4394 }
4395 
4396 void CGDebugInfo::EmitInlineFunctionStart(CGBuilderTy &Builder, GlobalDecl GD) {
4397   const auto *FD = cast<FunctionDecl>(GD.getDecl());
4398   // If there is a subprogram for this function available then use it.
4399   auto FI = SPCache.find(FD->getCanonicalDecl());
4400   llvm::DISubprogram *SP = nullptr;
4401   if (FI != SPCache.end())
4402     SP = dyn_cast_or_null<llvm::DISubprogram>(FI->second);
4403   if (!SP || !SP->isDefinition())
4404     SP = getFunctionStub(GD);
4405   FnBeginRegionCount.push_back(LexicalBlockStack.size());
4406   LexicalBlockStack.emplace_back(SP);
4407   setInlinedAt(Builder.getCurrentDebugLocation());
4408   EmitLocation(Builder, FD->getLocation());
4409 }
4410 
4411 void CGDebugInfo::EmitInlineFunctionEnd(CGBuilderTy &Builder) {
4412   assert(CurInlinedAt && "unbalanced inline scope stack");
4413   EmitFunctionEnd(Builder, nullptr);
4414   setInlinedAt(llvm::DebugLoc(CurInlinedAt).getInlinedAt());
4415 }
4416 
4417 void CGDebugInfo::EmitLocation(CGBuilderTy &Builder, SourceLocation Loc) {
4418   // Update our current location
4419   setLocation(Loc);
4420 
4421   if (CurLoc.isInvalid() || CurLoc.isMacroID() || LexicalBlockStack.empty())
4422     return;
4423 
4424   llvm::MDNode *Scope = LexicalBlockStack.back();
4425   Builder.SetCurrentDebugLocation(
4426       llvm::DILocation::get(CGM.getLLVMContext(), getLineNumber(CurLoc),
4427                             getColumnNumber(CurLoc), Scope, CurInlinedAt));
4428 }
4429 
4430 void CGDebugInfo::CreateLexicalBlock(SourceLocation Loc) {
4431   llvm::MDNode *Back = nullptr;
4432   if (!LexicalBlockStack.empty())
4433     Back = LexicalBlockStack.back().get();
4434   LexicalBlockStack.emplace_back(DBuilder.createLexicalBlock(
4435       cast<llvm::DIScope>(Back), getOrCreateFile(CurLoc), getLineNumber(CurLoc),
4436       getColumnNumber(CurLoc)));
4437 }
4438 
4439 void CGDebugInfo::AppendAddressSpaceXDeref(
4440     unsigned AddressSpace, SmallVectorImpl<uint64_t> &Expr) const {
4441   std::optional<unsigned> DWARFAddressSpace =
4442       CGM.getTarget().getDWARFAddressSpace(AddressSpace);
4443   if (!DWARFAddressSpace)
4444     return;
4445 
4446   Expr.push_back(llvm::dwarf::DW_OP_constu);
4447   Expr.push_back(*DWARFAddressSpace);
4448   Expr.push_back(llvm::dwarf::DW_OP_swap);
4449   Expr.push_back(llvm::dwarf::DW_OP_xderef);
4450 }
4451 
4452 void CGDebugInfo::EmitLexicalBlockStart(CGBuilderTy &Builder,
4453                                         SourceLocation Loc) {
4454   // Set our current location.
4455   setLocation(Loc);
4456 
4457   // Emit a line table change for the current location inside the new scope.
4458   Builder.SetCurrentDebugLocation(llvm::DILocation::get(
4459       CGM.getLLVMContext(), getLineNumber(Loc), getColumnNumber(Loc),
4460       LexicalBlockStack.back(), CurInlinedAt));
4461 
4462   if (DebugKind <= llvm::codegenoptions::DebugLineTablesOnly)
4463     return;
4464 
4465   // Create a new lexical block and push it on the stack.
4466   CreateLexicalBlock(Loc);
4467 }
4468 
4469 void CGDebugInfo::EmitLexicalBlockEnd(CGBuilderTy &Builder,
4470                                       SourceLocation Loc) {
4471   assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
4472 
4473   // Provide an entry in the line table for the end of the block.
4474   EmitLocation(Builder, Loc);
4475 
4476   if (DebugKind <= llvm::codegenoptions::DebugLineTablesOnly)
4477     return;
4478 
4479   LexicalBlockStack.pop_back();
4480 }
4481 
4482 void CGDebugInfo::EmitFunctionEnd(CGBuilderTy &Builder, llvm::Function *Fn) {
4483   assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
4484   unsigned RCount = FnBeginRegionCount.back();
4485   assert(RCount <= LexicalBlockStack.size() && "Region stack mismatch");
4486 
4487   // Pop all regions for this function.
4488   while (LexicalBlockStack.size() != RCount) {
4489     // Provide an entry in the line table for the end of the block.
4490     EmitLocation(Builder, CurLoc);
4491     LexicalBlockStack.pop_back();
4492   }
4493   FnBeginRegionCount.pop_back();
4494 
4495   if (Fn && Fn->getSubprogram())
4496     DBuilder.finalizeSubprogram(Fn->getSubprogram());
4497 }
4498 
4499 CGDebugInfo::BlockByRefType
4500 CGDebugInfo::EmitTypeForVarWithBlocksAttr(const VarDecl *VD,
4501                                           uint64_t *XOffset) {
4502   SmallVector<llvm::Metadata *, 5> EltTys;
4503   QualType FType;
4504   uint64_t FieldSize, FieldOffset;
4505   uint32_t FieldAlign;
4506 
4507   llvm::DIFile *Unit = getOrCreateFile(VD->getLocation());
4508   QualType Type = VD->getType();
4509 
4510   FieldOffset = 0;
4511   FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy);
4512   EltTys.push_back(CreateMemberType(Unit, FType, "__isa", &FieldOffset));
4513   EltTys.push_back(CreateMemberType(Unit, FType, "__forwarding", &FieldOffset));
4514   FType = CGM.getContext().IntTy;
4515   EltTys.push_back(CreateMemberType(Unit, FType, "__flags", &FieldOffset));
4516   EltTys.push_back(CreateMemberType(Unit, FType, "__size", &FieldOffset));
4517 
4518   bool HasCopyAndDispose = CGM.getContext().BlockRequiresCopying(Type, VD);
4519   if (HasCopyAndDispose) {
4520     FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy);
4521     EltTys.push_back(
4522         CreateMemberType(Unit, FType, "__copy_helper", &FieldOffset));
4523     EltTys.push_back(
4524         CreateMemberType(Unit, FType, "__destroy_helper", &FieldOffset));
4525   }
4526   bool HasByrefExtendedLayout;
4527   Qualifiers::ObjCLifetime Lifetime;
4528   if (CGM.getContext().getByrefLifetime(Type, Lifetime,
4529                                         HasByrefExtendedLayout) &&
4530       HasByrefExtendedLayout) {
4531     FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy);
4532     EltTys.push_back(
4533         CreateMemberType(Unit, FType, "__byref_variable_layout", &FieldOffset));
4534   }
4535 
4536   CharUnits Align = CGM.getContext().getDeclAlign(VD);
4537   if (Align > CGM.getContext().toCharUnitsFromBits(
4538                   CGM.getTarget().getPointerAlign(LangAS::Default))) {
4539     CharUnits FieldOffsetInBytes =
4540         CGM.getContext().toCharUnitsFromBits(FieldOffset);
4541     CharUnits AlignedOffsetInBytes = FieldOffsetInBytes.alignTo(Align);
4542     CharUnits NumPaddingBytes = AlignedOffsetInBytes - FieldOffsetInBytes;
4543 
4544     if (NumPaddingBytes.isPositive()) {
4545       llvm::APInt pad(32, NumPaddingBytes.getQuantity());
4546       FType = CGM.getContext().getConstantArrayType(
4547           CGM.getContext().CharTy, pad, nullptr, ArrayType::Normal, 0);
4548       EltTys.push_back(CreateMemberType(Unit, FType, "", &FieldOffset));
4549     }
4550   }
4551 
4552   FType = Type;
4553   llvm::DIType *WrappedTy = getOrCreateType(FType, Unit);
4554   FieldSize = CGM.getContext().getTypeSize(FType);
4555   FieldAlign = CGM.getContext().toBits(Align);
4556 
4557   *XOffset = FieldOffset;
4558   llvm::DIType *FieldTy = DBuilder.createMemberType(
4559       Unit, VD->getName(), Unit, 0, FieldSize, FieldAlign, FieldOffset,
4560       llvm::DINode::FlagZero, WrappedTy);
4561   EltTys.push_back(FieldTy);
4562   FieldOffset += FieldSize;
4563 
4564   llvm::DINodeArray Elements = DBuilder.getOrCreateArray(EltTys);
4565   return {DBuilder.createStructType(Unit, "", Unit, 0, FieldOffset, 0,
4566                                     llvm::DINode::FlagZero, nullptr, Elements),
4567           WrappedTy};
4568 }
4569 
4570 llvm::DILocalVariable *CGDebugInfo::EmitDeclare(const VarDecl *VD,
4571                                                 llvm::Value *Storage,
4572                                                 std::optional<unsigned> ArgNo,
4573                                                 CGBuilderTy &Builder,
4574                                                 const bool UsePointerValue) {
4575   assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
4576   assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
4577   if (VD->hasAttr<NoDebugAttr>())
4578     return nullptr;
4579 
4580   bool Unwritten =
4581       VD->isImplicit() || (isa<Decl>(VD->getDeclContext()) &&
4582                            cast<Decl>(VD->getDeclContext())->isImplicit());
4583   llvm::DIFile *Unit = nullptr;
4584   if (!Unwritten)
4585     Unit = getOrCreateFile(VD->getLocation());
4586   llvm::DIType *Ty;
4587   uint64_t XOffset = 0;
4588   if (VD->hasAttr<BlocksAttr>())
4589     Ty = EmitTypeForVarWithBlocksAttr(VD, &XOffset).WrappedType;
4590   else
4591     Ty = getOrCreateType(VD->getType(), Unit);
4592 
4593   // If there is no debug info for this type then do not emit debug info
4594   // for this variable.
4595   if (!Ty)
4596     return nullptr;
4597 
4598   // Get location information.
4599   unsigned Line = 0;
4600   unsigned Column = 0;
4601   if (!Unwritten) {
4602     Line = getLineNumber(VD->getLocation());
4603     Column = getColumnNumber(VD->getLocation());
4604   }
4605   SmallVector<uint64_t, 13> Expr;
4606   llvm::DINode::DIFlags Flags = llvm::DINode::FlagZero;
4607   if (VD->isImplicit())
4608     Flags |= llvm::DINode::FlagArtificial;
4609 
4610   auto Align = getDeclAlignIfRequired(VD, CGM.getContext());
4611 
4612   unsigned AddressSpace = CGM.getTypes().getTargetAddressSpace(VD->getType());
4613   AppendAddressSpaceXDeref(AddressSpace, Expr);
4614 
4615   // If this is implicit parameter of CXXThis or ObjCSelf kind, then give it an
4616   // object pointer flag.
4617   if (const auto *IPD = dyn_cast<ImplicitParamDecl>(VD)) {
4618     if (IPD->getParameterKind() == ImplicitParamDecl::CXXThis ||
4619         IPD->getParameterKind() == ImplicitParamDecl::ObjCSelf)
4620       Flags |= llvm::DINode::FlagObjectPointer;
4621   }
4622 
4623   // Note: Older versions of clang used to emit byval references with an extra
4624   // DW_OP_deref, because they referenced the IR arg directly instead of
4625   // referencing an alloca. Newer versions of LLVM don't treat allocas
4626   // differently from other function arguments when used in a dbg.declare.
4627   auto *Scope = cast<llvm::DIScope>(LexicalBlockStack.back());
4628   StringRef Name = VD->getName();
4629   if (!Name.empty()) {
4630     // __block vars are stored on the heap if they are captured by a block that
4631     // can escape the local scope.
4632     if (VD->isEscapingByref()) {
4633       // Here, we need an offset *into* the alloca.
4634       CharUnits offset = CharUnits::fromQuantity(32);
4635       Expr.push_back(llvm::dwarf::DW_OP_plus_uconst);
4636       // offset of __forwarding field
4637       offset = CGM.getContext().toCharUnitsFromBits(
4638           CGM.getTarget().getPointerWidth(LangAS::Default));
4639       Expr.push_back(offset.getQuantity());
4640       Expr.push_back(llvm::dwarf::DW_OP_deref);
4641       Expr.push_back(llvm::dwarf::DW_OP_plus_uconst);
4642       // offset of x field
4643       offset = CGM.getContext().toCharUnitsFromBits(XOffset);
4644       Expr.push_back(offset.getQuantity());
4645     }
4646   } else if (const auto *RT = dyn_cast<RecordType>(VD->getType())) {
4647     // If VD is an anonymous union then Storage represents value for
4648     // all union fields.
4649     const RecordDecl *RD = RT->getDecl();
4650     if (RD->isUnion() && RD->isAnonymousStructOrUnion()) {
4651       // GDB has trouble finding local variables in anonymous unions, so we emit
4652       // artificial local variables for each of the members.
4653       //
4654       // FIXME: Remove this code as soon as GDB supports this.
4655       // The debug info verifier in LLVM operates based on the assumption that a
4656       // variable has the same size as its storage and we had to disable the
4657       // check for artificial variables.
4658       for (const auto *Field : RD->fields()) {
4659         llvm::DIType *FieldTy = getOrCreateType(Field->getType(), Unit);
4660         StringRef FieldName = Field->getName();
4661 
4662         // Ignore unnamed fields. Do not ignore unnamed records.
4663         if (FieldName.empty() && !isa<RecordType>(Field->getType()))
4664           continue;
4665 
4666         // Use VarDecl's Tag, Scope and Line number.
4667         auto FieldAlign = getDeclAlignIfRequired(Field, CGM.getContext());
4668         auto *D = DBuilder.createAutoVariable(
4669             Scope, FieldName, Unit, Line, FieldTy, CGM.getLangOpts().Optimize,
4670             Flags | llvm::DINode::FlagArtificial, FieldAlign);
4671 
4672         // Insert an llvm.dbg.declare into the current block.
4673         DBuilder.insertDeclare(Storage, D, DBuilder.createExpression(Expr),
4674                                llvm::DILocation::get(CGM.getLLVMContext(), Line,
4675                                                      Column, Scope,
4676                                                      CurInlinedAt),
4677                                Builder.GetInsertBlock());
4678       }
4679     }
4680   }
4681 
4682   // Clang stores the sret pointer provided by the caller in a static alloca.
4683   // Use DW_OP_deref to tell the debugger to load the pointer and treat it as
4684   // the address of the variable.
4685   if (UsePointerValue) {
4686     assert(!llvm::is_contained(Expr, llvm::dwarf::DW_OP_deref) &&
4687            "Debug info already contains DW_OP_deref.");
4688     Expr.push_back(llvm::dwarf::DW_OP_deref);
4689   }
4690 
4691   // Create the descriptor for the variable.
4692   llvm::DILocalVariable *D = nullptr;
4693   if (ArgNo) {
4694     llvm::DINodeArray Annotations = CollectBTFDeclTagAnnotations(VD);
4695     D = DBuilder.createParameterVariable(Scope, Name, *ArgNo, Unit, Line, Ty,
4696                                          CGM.getLangOpts().Optimize, Flags,
4697                                          Annotations);
4698   } else {
4699     // For normal local variable, we will try to find out whether 'VD' is the
4700     // copy parameter of coroutine.
4701     // If yes, we are going to use DIVariable of the origin parameter instead
4702     // of creating the new one.
4703     // If no, it might be a normal alloc, we just create a new one for it.
4704 
4705     // Check whether the VD is move parameters.
4706     auto RemapCoroArgToLocalVar = [&]() -> llvm::DILocalVariable * {
4707       // The scope of parameter and move-parameter should be distinct
4708       // DISubprogram.
4709       if (!isa<llvm::DISubprogram>(Scope) || !Scope->isDistinct())
4710         return nullptr;
4711 
4712       auto Iter = llvm::find_if(CoroutineParameterMappings, [&](auto &Pair) {
4713         Stmt *StmtPtr = const_cast<Stmt *>(Pair.second);
4714         if (DeclStmt *DeclStmtPtr = dyn_cast<DeclStmt>(StmtPtr)) {
4715           DeclGroupRef DeclGroup = DeclStmtPtr->getDeclGroup();
4716           Decl *Decl = DeclGroup.getSingleDecl();
4717           if (VD == dyn_cast_or_null<VarDecl>(Decl))
4718             return true;
4719         }
4720         return false;
4721       });
4722 
4723       if (Iter != CoroutineParameterMappings.end()) {
4724         ParmVarDecl *PD = const_cast<ParmVarDecl *>(Iter->first);
4725         auto Iter2 = llvm::find_if(ParamDbgMappings, [&](auto &DbgPair) {
4726           return DbgPair.first == PD && DbgPair.second->getScope() == Scope;
4727         });
4728         if (Iter2 != ParamDbgMappings.end())
4729           return const_cast<llvm::DILocalVariable *>(Iter2->second);
4730       }
4731       return nullptr;
4732     };
4733 
4734     // If we couldn't find a move param DIVariable, create a new one.
4735     D = RemapCoroArgToLocalVar();
4736     // Or we will create a new DIVariable for this Decl if D dose not exists.
4737     if (!D)
4738       D = DBuilder.createAutoVariable(Scope, Name, Unit, Line, Ty,
4739                                       CGM.getLangOpts().Optimize, Flags, Align);
4740   }
4741   // Insert an llvm.dbg.declare into the current block.
4742   DBuilder.insertDeclare(Storage, D, DBuilder.createExpression(Expr),
4743                          llvm::DILocation::get(CGM.getLLVMContext(), Line,
4744                                                Column, Scope, CurInlinedAt),
4745                          Builder.GetInsertBlock());
4746 
4747   return D;
4748 }
4749 
4750 llvm::DILocalVariable *CGDebugInfo::EmitDeclare(const BindingDecl *BD,
4751                                                 llvm::Value *Storage,
4752                                                 std::optional<unsigned> ArgNo,
4753                                                 CGBuilderTy &Builder,
4754                                                 const bool UsePointerValue) {
4755   assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
4756   assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
4757   if (BD->hasAttr<NoDebugAttr>())
4758     return nullptr;
4759 
4760   // Skip the tuple like case, we don't handle that here
4761   if (isa<DeclRefExpr>(BD->getBinding()))
4762     return nullptr;
4763 
4764   llvm::DIFile *Unit = getOrCreateFile(BD->getLocation());
4765   llvm::DIType *Ty = getOrCreateType(BD->getType(), Unit);
4766 
4767   // If there is no debug info for this type then do not emit debug info
4768   // for this variable.
4769   if (!Ty)
4770     return nullptr;
4771 
4772   auto Align = getDeclAlignIfRequired(BD, CGM.getContext());
4773   unsigned AddressSpace = CGM.getTypes().getTargetAddressSpace(BD->getType());
4774 
4775   SmallVector<uint64_t, 3> Expr;
4776   AppendAddressSpaceXDeref(AddressSpace, Expr);
4777 
4778   // Clang stores the sret pointer provided by the caller in a static alloca.
4779   // Use DW_OP_deref to tell the debugger to load the pointer and treat it as
4780   // the address of the variable.
4781   if (UsePointerValue) {
4782     assert(!llvm::is_contained(Expr, llvm::dwarf::DW_OP_deref) &&
4783            "Debug info already contains DW_OP_deref.");
4784     Expr.push_back(llvm::dwarf::DW_OP_deref);
4785   }
4786 
4787   unsigned Line = getLineNumber(BD->getLocation());
4788   unsigned Column = getColumnNumber(BD->getLocation());
4789   StringRef Name = BD->getName();
4790   auto *Scope = cast<llvm::DIScope>(LexicalBlockStack.back());
4791   // Create the descriptor for the variable.
4792   llvm::DILocalVariable *D = DBuilder.createAutoVariable(
4793       Scope, Name, Unit, Line, Ty, CGM.getLangOpts().Optimize,
4794       llvm::DINode::FlagZero, Align);
4795 
4796   if (const MemberExpr *ME = dyn_cast<MemberExpr>(BD->getBinding())) {
4797     if (const FieldDecl *FD = dyn_cast<FieldDecl>(ME->getMemberDecl())) {
4798       const unsigned fieldIndex = FD->getFieldIndex();
4799       const clang::CXXRecordDecl *parent =
4800           (const CXXRecordDecl *)FD->getParent();
4801       const ASTRecordLayout &layout =
4802           CGM.getContext().getASTRecordLayout(parent);
4803       const uint64_t fieldOffset = layout.getFieldOffset(fieldIndex);
4804 
4805       if (fieldOffset != 0) {
4806         Expr.push_back(llvm::dwarf::DW_OP_plus_uconst);
4807         Expr.push_back(
4808             CGM.getContext().toCharUnitsFromBits(fieldOffset).getQuantity());
4809       }
4810     }
4811   } else if (const ArraySubscriptExpr *ASE =
4812                  dyn_cast<ArraySubscriptExpr>(BD->getBinding())) {
4813     if (const IntegerLiteral *IL = dyn_cast<IntegerLiteral>(ASE->getIdx())) {
4814       const uint64_t value = IL->getValue().getZExtValue();
4815       const uint64_t typeSize = CGM.getContext().getTypeSize(BD->getType());
4816 
4817       if (value != 0) {
4818         Expr.push_back(llvm::dwarf::DW_OP_plus_uconst);
4819         Expr.push_back(CGM.getContext()
4820                            .toCharUnitsFromBits(value * typeSize)
4821                            .getQuantity());
4822       }
4823     }
4824   }
4825 
4826   // Insert an llvm.dbg.declare into the current block.
4827   DBuilder.insertDeclare(Storage, D, DBuilder.createExpression(Expr),
4828                          llvm::DILocation::get(CGM.getLLVMContext(), Line,
4829                                                Column, Scope, CurInlinedAt),
4830                          Builder.GetInsertBlock());
4831 
4832   return D;
4833 }
4834 
4835 llvm::DILocalVariable *
4836 CGDebugInfo::EmitDeclareOfAutoVariable(const VarDecl *VD, llvm::Value *Storage,
4837                                        CGBuilderTy &Builder,
4838                                        const bool UsePointerValue) {
4839   assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
4840 
4841   if (auto *DD = dyn_cast<DecompositionDecl>(VD))
4842     for (auto *B : DD->bindings()) {
4843       EmitDeclare(B, Storage, std::nullopt, Builder,
4844                   VD->getType()->isReferenceType());
4845     }
4846 
4847   return EmitDeclare(VD, Storage, std::nullopt, Builder, UsePointerValue);
4848 }
4849 
4850 void CGDebugInfo::EmitLabel(const LabelDecl *D, CGBuilderTy &Builder) {
4851   assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
4852   assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
4853 
4854   if (D->hasAttr<NoDebugAttr>())
4855     return;
4856 
4857   auto *Scope = cast<llvm::DIScope>(LexicalBlockStack.back());
4858   llvm::DIFile *Unit = getOrCreateFile(D->getLocation());
4859 
4860   // Get location information.
4861   unsigned Line = getLineNumber(D->getLocation());
4862   unsigned Column = getColumnNumber(D->getLocation());
4863 
4864   StringRef Name = D->getName();
4865 
4866   // Create the descriptor for the label.
4867   auto *L =
4868       DBuilder.createLabel(Scope, Name, Unit, Line, CGM.getLangOpts().Optimize);
4869 
4870   // Insert an llvm.dbg.label into the current block.
4871   DBuilder.insertLabel(L,
4872                        llvm::DILocation::get(CGM.getLLVMContext(), Line, Column,
4873                                              Scope, CurInlinedAt),
4874                        Builder.GetInsertBlock());
4875 }
4876 
4877 llvm::DIType *CGDebugInfo::CreateSelfType(const QualType &QualTy,
4878                                           llvm::DIType *Ty) {
4879   llvm::DIType *CachedTy = getTypeOrNull(QualTy);
4880   if (CachedTy)
4881     Ty = CachedTy;
4882   return DBuilder.createObjectPointerType(Ty);
4883 }
4884 
4885 void CGDebugInfo::EmitDeclareOfBlockDeclRefVariable(
4886     const VarDecl *VD, llvm::Value *Storage, CGBuilderTy &Builder,
4887     const CGBlockInfo &blockInfo, llvm::Instruction *InsertPoint) {
4888   assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
4889   assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
4890 
4891   if (Builder.GetInsertBlock() == nullptr)
4892     return;
4893   if (VD->hasAttr<NoDebugAttr>())
4894     return;
4895 
4896   bool isByRef = VD->hasAttr<BlocksAttr>();
4897 
4898   uint64_t XOffset = 0;
4899   llvm::DIFile *Unit = getOrCreateFile(VD->getLocation());
4900   llvm::DIType *Ty;
4901   if (isByRef)
4902     Ty = EmitTypeForVarWithBlocksAttr(VD, &XOffset).WrappedType;
4903   else
4904     Ty = getOrCreateType(VD->getType(), Unit);
4905 
4906   // Self is passed along as an implicit non-arg variable in a
4907   // block. Mark it as the object pointer.
4908   if (const auto *IPD = dyn_cast<ImplicitParamDecl>(VD))
4909     if (IPD->getParameterKind() == ImplicitParamDecl::ObjCSelf)
4910       Ty = CreateSelfType(VD->getType(), Ty);
4911 
4912   // Get location information.
4913   const unsigned Line =
4914       getLineNumber(VD->getLocation().isValid() ? VD->getLocation() : CurLoc);
4915   unsigned Column = getColumnNumber(VD->getLocation());
4916 
4917   const llvm::DataLayout &target = CGM.getDataLayout();
4918 
4919   CharUnits offset = CharUnits::fromQuantity(
4920       target.getStructLayout(blockInfo.StructureType)
4921           ->getElementOffset(blockInfo.getCapture(VD).getIndex()));
4922 
4923   SmallVector<uint64_t, 9> addr;
4924   addr.push_back(llvm::dwarf::DW_OP_deref);
4925   addr.push_back(llvm::dwarf::DW_OP_plus_uconst);
4926   addr.push_back(offset.getQuantity());
4927   if (isByRef) {
4928     addr.push_back(llvm::dwarf::DW_OP_deref);
4929     addr.push_back(llvm::dwarf::DW_OP_plus_uconst);
4930     // offset of __forwarding field
4931     offset =
4932         CGM.getContext().toCharUnitsFromBits(target.getPointerSizeInBits(0));
4933     addr.push_back(offset.getQuantity());
4934     addr.push_back(llvm::dwarf::DW_OP_deref);
4935     addr.push_back(llvm::dwarf::DW_OP_plus_uconst);
4936     // offset of x field
4937     offset = CGM.getContext().toCharUnitsFromBits(XOffset);
4938     addr.push_back(offset.getQuantity());
4939   }
4940 
4941   // Create the descriptor for the variable.
4942   auto Align = getDeclAlignIfRequired(VD, CGM.getContext());
4943   auto *D = DBuilder.createAutoVariable(
4944       cast<llvm::DILocalScope>(LexicalBlockStack.back()), VD->getName(), Unit,
4945       Line, Ty, false, llvm::DINode::FlagZero, Align);
4946 
4947   // Insert an llvm.dbg.declare into the current block.
4948   auto DL = llvm::DILocation::get(CGM.getLLVMContext(), Line, Column,
4949                                   LexicalBlockStack.back(), CurInlinedAt);
4950   auto *Expr = DBuilder.createExpression(addr);
4951   if (InsertPoint)
4952     DBuilder.insertDeclare(Storage, D, Expr, DL, InsertPoint);
4953   else
4954     DBuilder.insertDeclare(Storage, D, Expr, DL, Builder.GetInsertBlock());
4955 }
4956 
4957 llvm::DILocalVariable *
4958 CGDebugInfo::EmitDeclareOfArgVariable(const VarDecl *VD, llvm::Value *AI,
4959                                       unsigned ArgNo, CGBuilderTy &Builder,
4960                                       bool UsePointerValue) {
4961   assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
4962   return EmitDeclare(VD, AI, ArgNo, Builder, UsePointerValue);
4963 }
4964 
4965 namespace {
4966 struct BlockLayoutChunk {
4967   uint64_t OffsetInBits;
4968   const BlockDecl::Capture *Capture;
4969 };
4970 bool operator<(const BlockLayoutChunk &l, const BlockLayoutChunk &r) {
4971   return l.OffsetInBits < r.OffsetInBits;
4972 }
4973 } // namespace
4974 
4975 void CGDebugInfo::collectDefaultFieldsForBlockLiteralDeclare(
4976     const CGBlockInfo &Block, const ASTContext &Context, SourceLocation Loc,
4977     const llvm::StructLayout &BlockLayout, llvm::DIFile *Unit,
4978     SmallVectorImpl<llvm::Metadata *> &Fields) {
4979   // Blocks in OpenCL have unique constraints which make the standard fields
4980   // redundant while requiring size and align fields for enqueue_kernel. See
4981   // initializeForBlockHeader in CGBlocks.cpp
4982   if (CGM.getLangOpts().OpenCL) {
4983     Fields.push_back(createFieldType("__size", Context.IntTy, Loc, AS_public,
4984                                      BlockLayout.getElementOffsetInBits(0),
4985                                      Unit, Unit));
4986     Fields.push_back(createFieldType("__align", Context.IntTy, Loc, AS_public,
4987                                      BlockLayout.getElementOffsetInBits(1),
4988                                      Unit, Unit));
4989   } else {
4990     Fields.push_back(createFieldType("__isa", Context.VoidPtrTy, Loc, AS_public,
4991                                      BlockLayout.getElementOffsetInBits(0),
4992                                      Unit, Unit));
4993     Fields.push_back(createFieldType("__flags", Context.IntTy, Loc, AS_public,
4994                                      BlockLayout.getElementOffsetInBits(1),
4995                                      Unit, Unit));
4996     Fields.push_back(
4997         createFieldType("__reserved", Context.IntTy, Loc, AS_public,
4998                         BlockLayout.getElementOffsetInBits(2), Unit, Unit));
4999     auto *FnTy = Block.getBlockExpr()->getFunctionType();
5000     auto FnPtrType = CGM.getContext().getPointerType(FnTy->desugar());
5001     Fields.push_back(createFieldType("__FuncPtr", FnPtrType, Loc, AS_public,
5002                                      BlockLayout.getElementOffsetInBits(3),
5003                                      Unit, Unit));
5004     Fields.push_back(createFieldType(
5005         "__descriptor",
5006         Context.getPointerType(Block.NeedsCopyDispose
5007                                    ? Context.getBlockDescriptorExtendedType()
5008                                    : Context.getBlockDescriptorType()),
5009         Loc, AS_public, BlockLayout.getElementOffsetInBits(4), Unit, Unit));
5010   }
5011 }
5012 
5013 void CGDebugInfo::EmitDeclareOfBlockLiteralArgVariable(const CGBlockInfo &block,
5014                                                        StringRef Name,
5015                                                        unsigned ArgNo,
5016                                                        llvm::AllocaInst *Alloca,
5017                                                        CGBuilderTy &Builder) {
5018   assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
5019   ASTContext &C = CGM.getContext();
5020   const BlockDecl *blockDecl = block.getBlockDecl();
5021 
5022   // Collect some general information about the block's location.
5023   SourceLocation loc = blockDecl->getCaretLocation();
5024   llvm::DIFile *tunit = getOrCreateFile(loc);
5025   unsigned line = getLineNumber(loc);
5026   unsigned column = getColumnNumber(loc);
5027 
5028   // Build the debug-info type for the block literal.
5029   getDeclContextDescriptor(blockDecl);
5030 
5031   const llvm::StructLayout *blockLayout =
5032       CGM.getDataLayout().getStructLayout(block.StructureType);
5033 
5034   SmallVector<llvm::Metadata *, 16> fields;
5035   collectDefaultFieldsForBlockLiteralDeclare(block, C, loc, *blockLayout, tunit,
5036                                              fields);
5037 
5038   // We want to sort the captures by offset, not because DWARF
5039   // requires this, but because we're paranoid about debuggers.
5040   SmallVector<BlockLayoutChunk, 8> chunks;
5041 
5042   // 'this' capture.
5043   if (blockDecl->capturesCXXThis()) {
5044     BlockLayoutChunk chunk;
5045     chunk.OffsetInBits =
5046         blockLayout->getElementOffsetInBits(block.CXXThisIndex);
5047     chunk.Capture = nullptr;
5048     chunks.push_back(chunk);
5049   }
5050 
5051   // Variable captures.
5052   for (const auto &capture : blockDecl->captures()) {
5053     const VarDecl *variable = capture.getVariable();
5054     const CGBlockInfo::Capture &captureInfo = block.getCapture(variable);
5055 
5056     // Ignore constant captures.
5057     if (captureInfo.isConstant())
5058       continue;
5059 
5060     BlockLayoutChunk chunk;
5061     chunk.OffsetInBits =
5062         blockLayout->getElementOffsetInBits(captureInfo.getIndex());
5063     chunk.Capture = &capture;
5064     chunks.push_back(chunk);
5065   }
5066 
5067   // Sort by offset.
5068   llvm::array_pod_sort(chunks.begin(), chunks.end());
5069 
5070   for (const BlockLayoutChunk &Chunk : chunks) {
5071     uint64_t offsetInBits = Chunk.OffsetInBits;
5072     const BlockDecl::Capture *capture = Chunk.Capture;
5073 
5074     // If we have a null capture, this must be the C++ 'this' capture.
5075     if (!capture) {
5076       QualType type;
5077       if (auto *Method =
5078               cast_or_null<CXXMethodDecl>(blockDecl->getNonClosureContext()))
5079         type = Method->getThisType();
5080       else if (auto *RDecl = dyn_cast<CXXRecordDecl>(blockDecl->getParent()))
5081         type = QualType(RDecl->getTypeForDecl(), 0);
5082       else
5083         llvm_unreachable("unexpected block declcontext");
5084 
5085       fields.push_back(createFieldType("this", type, loc, AS_public,
5086                                        offsetInBits, tunit, tunit));
5087       continue;
5088     }
5089 
5090     const VarDecl *variable = capture->getVariable();
5091     StringRef name = variable->getName();
5092 
5093     llvm::DIType *fieldType;
5094     if (capture->isByRef()) {
5095       TypeInfo PtrInfo = C.getTypeInfo(C.VoidPtrTy);
5096       auto Align = PtrInfo.isAlignRequired() ? PtrInfo.Align : 0;
5097       // FIXME: This recomputes the layout of the BlockByRefWrapper.
5098       uint64_t xoffset;
5099       fieldType =
5100           EmitTypeForVarWithBlocksAttr(variable, &xoffset).BlockByRefWrapper;
5101       fieldType = DBuilder.createPointerType(fieldType, PtrInfo.Width);
5102       fieldType = DBuilder.createMemberType(tunit, name, tunit, line,
5103                                             PtrInfo.Width, Align, offsetInBits,
5104                                             llvm::DINode::FlagZero, fieldType);
5105     } else {
5106       auto Align = getDeclAlignIfRequired(variable, CGM.getContext());
5107       fieldType = createFieldType(name, variable->getType(), loc, AS_public,
5108                                   offsetInBits, Align, tunit, tunit);
5109     }
5110     fields.push_back(fieldType);
5111   }
5112 
5113   SmallString<36> typeName;
5114   llvm::raw_svector_ostream(typeName)
5115       << "__block_literal_" << CGM.getUniqueBlockCount();
5116 
5117   llvm::DINodeArray fieldsArray = DBuilder.getOrCreateArray(fields);
5118 
5119   llvm::DIType *type =
5120       DBuilder.createStructType(tunit, typeName.str(), tunit, line,
5121                                 CGM.getContext().toBits(block.BlockSize), 0,
5122                                 llvm::DINode::FlagZero, nullptr, fieldsArray);
5123   type = DBuilder.createPointerType(type, CGM.PointerWidthInBits);
5124 
5125   // Get overall information about the block.
5126   llvm::DINode::DIFlags flags = llvm::DINode::FlagArtificial;
5127   auto *scope = cast<llvm::DILocalScope>(LexicalBlockStack.back());
5128 
5129   // Create the descriptor for the parameter.
5130   auto *debugVar = DBuilder.createParameterVariable(
5131       scope, Name, ArgNo, tunit, line, type, CGM.getLangOpts().Optimize, flags);
5132 
5133   // Insert an llvm.dbg.declare into the current block.
5134   DBuilder.insertDeclare(Alloca, debugVar, DBuilder.createExpression(),
5135                          llvm::DILocation::get(CGM.getLLVMContext(), line,
5136                                                column, scope, CurInlinedAt),
5137                          Builder.GetInsertBlock());
5138 }
5139 
5140 llvm::DIDerivedType *
5141 CGDebugInfo::getOrCreateStaticDataMemberDeclarationOrNull(const VarDecl *D) {
5142   if (!D || !D->isStaticDataMember())
5143     return nullptr;
5144 
5145   auto MI = StaticDataMemberCache.find(D->getCanonicalDecl());
5146   if (MI != StaticDataMemberCache.end()) {
5147     assert(MI->second && "Static data member declaration should still exist");
5148     return MI->second;
5149   }
5150 
5151   // If the member wasn't found in the cache, lazily construct and add it to the
5152   // type (used when a limited form of the type is emitted).
5153   auto DC = D->getDeclContext();
5154   auto *Ctxt = cast<llvm::DICompositeType>(getDeclContextDescriptor(D));
5155   return CreateRecordStaticField(D, Ctxt, cast<RecordDecl>(DC));
5156 }
5157 
5158 llvm::DIGlobalVariableExpression *CGDebugInfo::CollectAnonRecordDecls(
5159     const RecordDecl *RD, llvm::DIFile *Unit, unsigned LineNo,
5160     StringRef LinkageName, llvm::GlobalVariable *Var, llvm::DIScope *DContext) {
5161   llvm::DIGlobalVariableExpression *GVE = nullptr;
5162 
5163   for (const auto *Field : RD->fields()) {
5164     llvm::DIType *FieldTy = getOrCreateType(Field->getType(), Unit);
5165     StringRef FieldName = Field->getName();
5166 
5167     // Ignore unnamed fields, but recurse into anonymous records.
5168     if (FieldName.empty()) {
5169       if (const auto *RT = dyn_cast<RecordType>(Field->getType()))
5170         GVE = CollectAnonRecordDecls(RT->getDecl(), Unit, LineNo, LinkageName,
5171                                      Var, DContext);
5172       continue;
5173     }
5174     // Use VarDecl's Tag, Scope and Line number.
5175     GVE = DBuilder.createGlobalVariableExpression(
5176         DContext, FieldName, LinkageName, Unit, LineNo, FieldTy,
5177         Var->hasLocalLinkage());
5178     Var->addDebugInfo(GVE);
5179   }
5180   return GVE;
5181 }
5182 
5183 static bool ReferencesAnonymousEntity(ArrayRef<TemplateArgument> Args);
5184 static bool ReferencesAnonymousEntity(RecordType *RT) {
5185   // Unnamed classes/lambdas can't be reconstituted due to a lack of column
5186   // info we produce in the DWARF, so we can't get Clang's full name back.
5187   // But so long as it's not one of those, it doesn't matter if some sub-type
5188   // of the record (a template parameter) can't be reconstituted - because the
5189   // un-reconstitutable type itself will carry its own name.
5190   const auto *RD = dyn_cast<CXXRecordDecl>(RT->getDecl());
5191   if (!RD)
5192     return false;
5193   if (!RD->getIdentifier())
5194     return true;
5195   auto *TSpecial = dyn_cast<ClassTemplateSpecializationDecl>(RD);
5196   if (!TSpecial)
5197     return false;
5198   return ReferencesAnonymousEntity(TSpecial->getTemplateArgs().asArray());
5199 }
5200 static bool ReferencesAnonymousEntity(ArrayRef<TemplateArgument> Args) {
5201   return llvm::any_of(Args, [&](const TemplateArgument &TA) {
5202     switch (TA.getKind()) {
5203     case TemplateArgument::Pack:
5204       return ReferencesAnonymousEntity(TA.getPackAsArray());
5205     case TemplateArgument::Type: {
5206       struct ReferencesAnonymous
5207           : public RecursiveASTVisitor<ReferencesAnonymous> {
5208         bool RefAnon = false;
5209         bool VisitRecordType(RecordType *RT) {
5210           if (ReferencesAnonymousEntity(RT)) {
5211             RefAnon = true;
5212             return false;
5213           }
5214           return true;
5215         }
5216       };
5217       ReferencesAnonymous RT;
5218       RT.TraverseType(TA.getAsType());
5219       if (RT.RefAnon)
5220         return true;
5221       break;
5222     }
5223     default:
5224       break;
5225     }
5226     return false;
5227   });
5228 }
5229 namespace {
5230 struct ReconstitutableType : public RecursiveASTVisitor<ReconstitutableType> {
5231   bool Reconstitutable = true;
5232   bool VisitVectorType(VectorType *FT) {
5233     Reconstitutable = false;
5234     return false;
5235   }
5236   bool VisitAtomicType(AtomicType *FT) {
5237     Reconstitutable = false;
5238     return false;
5239   }
5240   bool VisitType(Type *T) {
5241     // _BitInt(N) isn't reconstitutable because the bit width isn't encoded in
5242     // the DWARF, only the byte width.
5243     if (T->isBitIntType()) {
5244       Reconstitutable = false;
5245       return false;
5246     }
5247     return true;
5248   }
5249   bool TraverseEnumType(EnumType *ET) {
5250     // Unnamed enums can't be reconstituted due to a lack of column info we
5251     // produce in the DWARF, so we can't get Clang's full name back.
5252     if (const auto *ED = dyn_cast<EnumDecl>(ET->getDecl())) {
5253       if (!ED->getIdentifier()) {
5254         Reconstitutable = false;
5255         return false;
5256       }
5257       if (!ED->isExternallyVisible()) {
5258         Reconstitutable = false;
5259         return false;
5260       }
5261     }
5262     return true;
5263   }
5264   bool VisitFunctionProtoType(FunctionProtoType *FT) {
5265     // noexcept is not encoded in DWARF, so the reversi
5266     Reconstitutable &= !isNoexceptExceptionSpec(FT->getExceptionSpecType());
5267     Reconstitutable &= !FT->getNoReturnAttr();
5268     return Reconstitutable;
5269   }
5270   bool VisitRecordType(RecordType *RT) {
5271     if (ReferencesAnonymousEntity(RT)) {
5272       Reconstitutable = false;
5273       return false;
5274     }
5275     return true;
5276   }
5277 };
5278 } // anonymous namespace
5279 
5280 // Test whether a type name could be rebuilt from emitted debug info.
5281 static bool IsReconstitutableType(QualType QT) {
5282   ReconstitutableType T;
5283   T.TraverseType(QT);
5284   return T.Reconstitutable;
5285 }
5286 
5287 std::string CGDebugInfo::GetName(const Decl *D, bool Qualified) const {
5288   std::string Name;
5289   llvm::raw_string_ostream OS(Name);
5290   const NamedDecl *ND = dyn_cast<NamedDecl>(D);
5291   if (!ND)
5292     return Name;
5293   llvm::codegenoptions::DebugTemplateNamesKind TemplateNamesKind =
5294       CGM.getCodeGenOpts().getDebugSimpleTemplateNames();
5295 
5296   if (!CGM.getCodeGenOpts().hasReducedDebugInfo())
5297     TemplateNamesKind = llvm::codegenoptions::DebugTemplateNamesKind::Full;
5298 
5299   std::optional<TemplateArgs> Args;
5300 
5301   bool IsOperatorOverload = false; // isa<CXXConversionDecl>(ND);
5302   if (auto *RD = dyn_cast<CXXRecordDecl>(ND)) {
5303     Args = GetTemplateArgs(RD);
5304   } else if (auto *FD = dyn_cast<FunctionDecl>(ND)) {
5305     Args = GetTemplateArgs(FD);
5306     auto NameKind = ND->getDeclName().getNameKind();
5307     IsOperatorOverload |=
5308         NameKind == DeclarationName::CXXOperatorName ||
5309         NameKind == DeclarationName::CXXConversionFunctionName;
5310   } else if (auto *VD = dyn_cast<VarDecl>(ND)) {
5311     Args = GetTemplateArgs(VD);
5312   }
5313   std::function<bool(ArrayRef<TemplateArgument>)> HasReconstitutableArgs =
5314       [&](ArrayRef<TemplateArgument> Args) {
5315         return llvm::all_of(Args, [&](const TemplateArgument &TA) {
5316           switch (TA.getKind()) {
5317           case TemplateArgument::Template:
5318             // Easy to reconstitute - the value of the parameter in the debug
5319             // info is the string name of the template. (so the template name
5320             // itself won't benefit from any name rebuilding, but that's a
5321             // representational limitation - maybe DWARF could be
5322             // changed/improved to use some more structural representation)
5323             return true;
5324           case TemplateArgument::Declaration:
5325             // Reference and pointer non-type template parameters point to
5326             // variables, functions, etc and their value is, at best (for
5327             // variables) represented as an address - not a reference to the
5328             // DWARF describing the variable/function/etc. This makes it hard,
5329             // possibly impossible to rebuild the original name - looking up the
5330             // address in the executable file's symbol table would be needed.
5331             return false;
5332           case TemplateArgument::NullPtr:
5333             // These could be rebuilt, but figured they're close enough to the
5334             // declaration case, and not worth rebuilding.
5335             return false;
5336           case TemplateArgument::Pack:
5337             // A pack is invalid if any of the elements of the pack are invalid.
5338             return HasReconstitutableArgs(TA.getPackAsArray());
5339           case TemplateArgument::Integral:
5340             // Larger integers get encoded as DWARF blocks which are a bit
5341             // harder to parse back into a large integer, etc - so punting on
5342             // this for now. Re-parsing the integers back into APInt is probably
5343             // feasible some day.
5344             return TA.getAsIntegral().getBitWidth() <= 64 &&
5345                    IsReconstitutableType(TA.getIntegralType());
5346           case TemplateArgument::Type:
5347             return IsReconstitutableType(TA.getAsType());
5348           default:
5349             llvm_unreachable("Other, unresolved, template arguments should "
5350                              "not be seen here");
5351           }
5352         });
5353       };
5354   // A conversion operator presents complications/ambiguity if there's a
5355   // conversion to class template that is itself a template, eg:
5356   // template<typename T>
5357   // operator ns::t1<T, int>();
5358   // This should be named, eg: "operator ns::t1<float, int><float>"
5359   // (ignoring clang bug that means this is currently "operator t1<float>")
5360   // but if the arguments were stripped, the consumer couldn't differentiate
5361   // whether the template argument list for the conversion type was the
5362   // function's argument list (& no reconstitution was needed) or not.
5363   // This could be handled if reconstitutable names had a separate attribute
5364   // annotating them as such - this would remove the ambiguity.
5365   //
5366   // Alternatively the template argument list could be parsed enough to check
5367   // whether there's one list or two, then compare that with the DWARF
5368   // description of the return type and the template argument lists to determine
5369   // how many lists there should be and if one is missing it could be assumed(?)
5370   // to be the function's template argument list  & then be rebuilt.
5371   //
5372   // Other operator overloads that aren't conversion operators could be
5373   // reconstituted but would require a bit more nuance about detecting the
5374   // difference between these different operators during that rebuilding.
5375   bool Reconstitutable =
5376       Args && HasReconstitutableArgs(Args->Args) && !IsOperatorOverload;
5377 
5378   PrintingPolicy PP = getPrintingPolicy();
5379 
5380   if (TemplateNamesKind == llvm::codegenoptions::DebugTemplateNamesKind::Full ||
5381       !Reconstitutable) {
5382     ND->getNameForDiagnostic(OS, PP, Qualified);
5383   } else {
5384     bool Mangled = TemplateNamesKind ==
5385                    llvm::codegenoptions::DebugTemplateNamesKind::Mangled;
5386     // check if it's a template
5387     if (Mangled)
5388       OS << "_STN|";
5389 
5390     OS << ND->getDeclName();
5391     std::string EncodedOriginalName;
5392     llvm::raw_string_ostream EncodedOriginalNameOS(EncodedOriginalName);
5393     EncodedOriginalNameOS << ND->getDeclName();
5394 
5395     if (Mangled) {
5396       OS << "|";
5397       printTemplateArgumentList(OS, Args->Args, PP);
5398       printTemplateArgumentList(EncodedOriginalNameOS, Args->Args, PP);
5399 #ifndef NDEBUG
5400       std::string CanonicalOriginalName;
5401       llvm::raw_string_ostream OriginalOS(CanonicalOriginalName);
5402       ND->getNameForDiagnostic(OriginalOS, PP, Qualified);
5403       assert(EncodedOriginalNameOS.str() == OriginalOS.str());
5404 #endif
5405     }
5406   }
5407   return Name;
5408 }
5409 
5410 void CGDebugInfo::EmitGlobalVariable(llvm::GlobalVariable *Var,
5411                                      const VarDecl *D) {
5412   assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
5413   if (D->hasAttr<NoDebugAttr>())
5414     return;
5415 
5416   llvm::TimeTraceScope TimeScope("DebugGlobalVariable", [&]() {
5417     return GetName(D, true);
5418   });
5419 
5420   // If we already created a DIGlobalVariable for this declaration, just attach
5421   // it to the llvm::GlobalVariable.
5422   auto Cached = DeclCache.find(D->getCanonicalDecl());
5423   if (Cached != DeclCache.end())
5424     return Var->addDebugInfo(
5425         cast<llvm::DIGlobalVariableExpression>(Cached->second));
5426 
5427   // Create global variable debug descriptor.
5428   llvm::DIFile *Unit = nullptr;
5429   llvm::DIScope *DContext = nullptr;
5430   unsigned LineNo;
5431   StringRef DeclName, LinkageName;
5432   QualType T;
5433   llvm::MDTuple *TemplateParameters = nullptr;
5434   collectVarDeclProps(D, Unit, LineNo, T, DeclName, LinkageName,
5435                       TemplateParameters, DContext);
5436 
5437   // Attempt to store one global variable for the declaration - even if we
5438   // emit a lot of fields.
5439   llvm::DIGlobalVariableExpression *GVE = nullptr;
5440 
5441   // If this is an anonymous union then we'll want to emit a global
5442   // variable for each member of the anonymous union so that it's possible
5443   // to find the name of any field in the union.
5444   if (T->isUnionType() && DeclName.empty()) {
5445     const RecordDecl *RD = T->castAs<RecordType>()->getDecl();
5446     assert(RD->isAnonymousStructOrUnion() &&
5447            "unnamed non-anonymous struct or union?");
5448     GVE = CollectAnonRecordDecls(RD, Unit, LineNo, LinkageName, Var, DContext);
5449   } else {
5450     auto Align = getDeclAlignIfRequired(D, CGM.getContext());
5451 
5452     SmallVector<uint64_t, 4> Expr;
5453     unsigned AddressSpace = CGM.getTypes().getTargetAddressSpace(D->getType());
5454     if (CGM.getLangOpts().CUDA && CGM.getLangOpts().CUDAIsDevice) {
5455       if (D->hasAttr<CUDASharedAttr>())
5456         AddressSpace =
5457             CGM.getContext().getTargetAddressSpace(LangAS::cuda_shared);
5458       else if (D->hasAttr<CUDAConstantAttr>())
5459         AddressSpace =
5460             CGM.getContext().getTargetAddressSpace(LangAS::cuda_constant);
5461     }
5462     AppendAddressSpaceXDeref(AddressSpace, Expr);
5463 
5464     llvm::DINodeArray Annotations = CollectBTFDeclTagAnnotations(D);
5465     GVE = DBuilder.createGlobalVariableExpression(
5466         DContext, DeclName, LinkageName, Unit, LineNo, getOrCreateType(T, Unit),
5467         Var->hasLocalLinkage(), true,
5468         Expr.empty() ? nullptr : DBuilder.createExpression(Expr),
5469         getOrCreateStaticDataMemberDeclarationOrNull(D), TemplateParameters,
5470         Align, Annotations);
5471     Var->addDebugInfo(GVE);
5472   }
5473   DeclCache[D->getCanonicalDecl()].reset(GVE);
5474 }
5475 
5476 void CGDebugInfo::EmitGlobalVariable(const ValueDecl *VD, const APValue &Init) {
5477   assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
5478   if (VD->hasAttr<NoDebugAttr>())
5479     return;
5480   llvm::TimeTraceScope TimeScope("DebugConstGlobalVariable", [&]() {
5481     return GetName(VD, true);
5482   });
5483 
5484   auto Align = getDeclAlignIfRequired(VD, CGM.getContext());
5485   // Create the descriptor for the variable.
5486   llvm::DIFile *Unit = getOrCreateFile(VD->getLocation());
5487   StringRef Name = VD->getName();
5488   llvm::DIType *Ty = getOrCreateType(VD->getType(), Unit);
5489 
5490   if (const auto *ECD = dyn_cast<EnumConstantDecl>(VD)) {
5491     const auto *ED = cast<EnumDecl>(ECD->getDeclContext());
5492     assert(isa<EnumType>(ED->getTypeForDecl()) && "Enum without EnumType?");
5493 
5494     if (CGM.getCodeGenOpts().EmitCodeView) {
5495       // If CodeView, emit enums as global variables, unless they are defined
5496       // inside a class. We do this because MSVC doesn't emit S_CONSTANTs for
5497       // enums in classes, and because it is difficult to attach this scope
5498       // information to the global variable.
5499       if (isa<RecordDecl>(ED->getDeclContext()))
5500         return;
5501     } else {
5502       // If not CodeView, emit DW_TAG_enumeration_type if necessary. For
5503       // example: for "enum { ZERO };", a DW_TAG_enumeration_type is created the
5504       // first time `ZERO` is referenced in a function.
5505       llvm::DIType *EDTy =
5506           getOrCreateType(QualType(ED->getTypeForDecl(), 0), Unit);
5507       assert (EDTy->getTag() == llvm::dwarf::DW_TAG_enumeration_type);
5508       (void)EDTy;
5509       return;
5510     }
5511   }
5512 
5513   // Do not emit separate definitions for function local consts.
5514   if (isa<FunctionDecl>(VD->getDeclContext()))
5515     return;
5516 
5517   VD = cast<ValueDecl>(VD->getCanonicalDecl());
5518   auto *VarD = dyn_cast<VarDecl>(VD);
5519   if (VarD && VarD->isStaticDataMember()) {
5520     auto *RD = cast<RecordDecl>(VarD->getDeclContext());
5521     getDeclContextDescriptor(VarD);
5522     // Ensure that the type is retained even though it's otherwise unreferenced.
5523     //
5524     // FIXME: This is probably unnecessary, since Ty should reference RD
5525     // through its scope.
5526     RetainedTypes.push_back(
5527         CGM.getContext().getRecordType(RD).getAsOpaquePtr());
5528 
5529     return;
5530   }
5531   llvm::DIScope *DContext = getDeclContextDescriptor(VD);
5532 
5533   auto &GV = DeclCache[VD];
5534   if (GV)
5535     return;
5536   llvm::DIExpression *InitExpr = nullptr;
5537   if (CGM.getContext().getTypeSize(VD->getType()) <= 64) {
5538     // FIXME: Add a representation for integer constants wider than 64 bits.
5539     if (Init.isInt()) {
5540       const llvm::APSInt &InitInt = Init.getInt();
5541       std::optional<uint64_t> InitIntOpt;
5542       if (InitInt.isUnsigned())
5543         InitIntOpt = InitInt.tryZExtValue();
5544       else if (auto tmp = InitInt.trySExtValue(); tmp.has_value())
5545         // Transform a signed optional to unsigned optional. When cpp 23 comes,
5546         // use std::optional::transform
5547         InitIntOpt = (uint64_t)tmp.value();
5548       if (InitIntOpt)
5549         InitExpr = DBuilder.createConstantValueExpression(InitIntOpt.value());
5550     } else if (Init.isFloat())
5551       InitExpr = DBuilder.createConstantValueExpression(
5552           Init.getFloat().bitcastToAPInt().getZExtValue());
5553   }
5554 
5555   llvm::MDTuple *TemplateParameters = nullptr;
5556 
5557   if (isa<VarTemplateSpecializationDecl>(VD))
5558     if (VarD) {
5559       llvm::DINodeArray parameterNodes = CollectVarTemplateParams(VarD, &*Unit);
5560       TemplateParameters = parameterNodes.get();
5561     }
5562 
5563   GV.reset(DBuilder.createGlobalVariableExpression(
5564       DContext, Name, StringRef(), Unit, getLineNumber(VD->getLocation()), Ty,
5565       true, true, InitExpr, getOrCreateStaticDataMemberDeclarationOrNull(VarD),
5566       TemplateParameters, Align));
5567 }
5568 
5569 void CGDebugInfo::EmitExternalVariable(llvm::GlobalVariable *Var,
5570                                        const VarDecl *D) {
5571   assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
5572   if (D->hasAttr<NoDebugAttr>())
5573     return;
5574 
5575   auto Align = getDeclAlignIfRequired(D, CGM.getContext());
5576   llvm::DIFile *Unit = getOrCreateFile(D->getLocation());
5577   StringRef Name = D->getName();
5578   llvm::DIType *Ty = getOrCreateType(D->getType(), Unit);
5579 
5580   llvm::DIScope *DContext = getDeclContextDescriptor(D);
5581   llvm::DIGlobalVariableExpression *GVE =
5582       DBuilder.createGlobalVariableExpression(
5583           DContext, Name, StringRef(), Unit, getLineNumber(D->getLocation()),
5584           Ty, false, false, nullptr, nullptr, nullptr, Align);
5585   Var->addDebugInfo(GVE);
5586 }
5587 
5588 void CGDebugInfo::EmitGlobalAlias(const llvm::GlobalValue *GV,
5589                                   const GlobalDecl GD) {
5590 
5591   assert(GV);
5592 
5593   if (!CGM.getCodeGenOpts().hasReducedDebugInfo())
5594     return;
5595 
5596   const auto *D = cast<ValueDecl>(GD.getDecl());
5597   if (D->hasAttr<NoDebugAttr>())
5598     return;
5599 
5600   auto AliaseeDecl = CGM.getMangledNameDecl(GV->getName());
5601   llvm::DINode *DI;
5602 
5603   if (!AliaseeDecl)
5604     // FIXME: Aliasee not declared yet - possibly declared later
5605     // For example,
5606     //
5607     //   1 extern int newname __attribute__((alias("oldname")));
5608     //   2 int oldname = 1;
5609     //
5610     // No debug info would be generated for 'newname' in this case.
5611     //
5612     // Fix compiler to generate "newname" as imported_declaration
5613     // pointing to the DIE of "oldname".
5614     return;
5615   if (!(DI = getDeclarationOrDefinition(
5616             AliaseeDecl.getCanonicalDecl().getDecl())))
5617     return;
5618 
5619   llvm::DIScope *DContext = getDeclContextDescriptor(D);
5620   auto Loc = D->getLocation();
5621 
5622   llvm::DIImportedEntity *ImportDI = DBuilder.createImportedDeclaration(
5623       DContext, DI, getOrCreateFile(Loc), getLineNumber(Loc), D->getName());
5624 
5625   // Record this DIE in the cache for nested declaration reference.
5626   ImportedDeclCache[GD.getCanonicalDecl().getDecl()].reset(ImportDI);
5627 }
5628 
5629 void CGDebugInfo::AddStringLiteralDebugInfo(llvm::GlobalVariable *GV,
5630                                             const StringLiteral *S) {
5631   SourceLocation Loc = S->getStrTokenLoc(0);
5632   PresumedLoc PLoc = CGM.getContext().getSourceManager().getPresumedLoc(Loc);
5633   if (!PLoc.isValid())
5634     return;
5635 
5636   llvm::DIFile *File = getOrCreateFile(Loc);
5637   llvm::DIGlobalVariableExpression *Debug =
5638       DBuilder.createGlobalVariableExpression(
5639           nullptr, StringRef(), StringRef(), getOrCreateFile(Loc),
5640           getLineNumber(Loc), getOrCreateType(S->getType(), File), true);
5641   GV->addDebugInfo(Debug);
5642 }
5643 
5644 llvm::DIScope *CGDebugInfo::getCurrentContextDescriptor(const Decl *D) {
5645   if (!LexicalBlockStack.empty())
5646     return LexicalBlockStack.back();
5647   llvm::DIScope *Mod = getParentModuleOrNull(D);
5648   return getContextDescriptor(D, Mod ? Mod : TheCU);
5649 }
5650 
5651 void CGDebugInfo::EmitUsingDirective(const UsingDirectiveDecl &UD) {
5652   if (!CGM.getCodeGenOpts().hasReducedDebugInfo())
5653     return;
5654   const NamespaceDecl *NSDecl = UD.getNominatedNamespace();
5655   if (!NSDecl->isAnonymousNamespace() ||
5656       CGM.getCodeGenOpts().DebugExplicitImport) {
5657     auto Loc = UD.getLocation();
5658     if (!Loc.isValid())
5659       Loc = CurLoc;
5660     DBuilder.createImportedModule(
5661         getCurrentContextDescriptor(cast<Decl>(UD.getDeclContext())),
5662         getOrCreateNamespace(NSDecl), getOrCreateFile(Loc), getLineNumber(Loc));
5663   }
5664 }
5665 
5666 void CGDebugInfo::EmitUsingShadowDecl(const UsingShadowDecl &USD) {
5667   if (llvm::DINode *Target =
5668           getDeclarationOrDefinition(USD.getUnderlyingDecl())) {
5669     auto Loc = USD.getLocation();
5670     DBuilder.createImportedDeclaration(
5671         getCurrentContextDescriptor(cast<Decl>(USD.getDeclContext())), Target,
5672         getOrCreateFile(Loc), getLineNumber(Loc));
5673   }
5674 }
5675 
5676 void CGDebugInfo::EmitUsingDecl(const UsingDecl &UD) {
5677   if (!CGM.getCodeGenOpts().hasReducedDebugInfo())
5678     return;
5679   assert(UD.shadow_size() &&
5680          "We shouldn't be codegening an invalid UsingDecl containing no decls");
5681 
5682   for (const auto *USD : UD.shadows()) {
5683     // FIXME: Skip functions with undeduced auto return type for now since we
5684     // don't currently have the plumbing for separate declarations & definitions
5685     // of free functions and mismatched types (auto in the declaration, concrete
5686     // return type in the definition)
5687     if (const auto *FD = dyn_cast<FunctionDecl>(USD->getUnderlyingDecl()))
5688       if (const auto *AT = FD->getType()
5689                                ->castAs<FunctionProtoType>()
5690                                ->getContainedAutoType())
5691         if (AT->getDeducedType().isNull())
5692           continue;
5693 
5694     EmitUsingShadowDecl(*USD);
5695     // Emitting one decl is sufficient - debuggers can detect that this is an
5696     // overloaded name & provide lookup for all the overloads.
5697     break;
5698   }
5699 }
5700 
5701 void CGDebugInfo::EmitUsingEnumDecl(const UsingEnumDecl &UD) {
5702   if (!CGM.getCodeGenOpts().hasReducedDebugInfo())
5703     return;
5704   assert(UD.shadow_size() &&
5705          "We shouldn't be codegening an invalid UsingEnumDecl"
5706          " containing no decls");
5707 
5708   for (const auto *USD : UD.shadows())
5709     EmitUsingShadowDecl(*USD);
5710 }
5711 
5712 void CGDebugInfo::EmitImportDecl(const ImportDecl &ID) {
5713   if (CGM.getCodeGenOpts().getDebuggerTuning() != llvm::DebuggerKind::LLDB)
5714     return;
5715   if (Module *M = ID.getImportedModule()) {
5716     auto Info = ASTSourceDescriptor(*M);
5717     auto Loc = ID.getLocation();
5718     DBuilder.createImportedDeclaration(
5719         getCurrentContextDescriptor(cast<Decl>(ID.getDeclContext())),
5720         getOrCreateModuleRef(Info, DebugTypeExtRefs), getOrCreateFile(Loc),
5721         getLineNumber(Loc));
5722   }
5723 }
5724 
5725 llvm::DIImportedEntity *
5726 CGDebugInfo::EmitNamespaceAlias(const NamespaceAliasDecl &NA) {
5727   if (!CGM.getCodeGenOpts().hasReducedDebugInfo())
5728     return nullptr;
5729   auto &VH = NamespaceAliasCache[&NA];
5730   if (VH)
5731     return cast<llvm::DIImportedEntity>(VH);
5732   llvm::DIImportedEntity *R;
5733   auto Loc = NA.getLocation();
5734   if (const auto *Underlying =
5735           dyn_cast<NamespaceAliasDecl>(NA.getAliasedNamespace()))
5736     // This could cache & dedup here rather than relying on metadata deduping.
5737     R = DBuilder.createImportedDeclaration(
5738         getCurrentContextDescriptor(cast<Decl>(NA.getDeclContext())),
5739         EmitNamespaceAlias(*Underlying), getOrCreateFile(Loc),
5740         getLineNumber(Loc), NA.getName());
5741   else
5742     R = DBuilder.createImportedDeclaration(
5743         getCurrentContextDescriptor(cast<Decl>(NA.getDeclContext())),
5744         getOrCreateNamespace(cast<NamespaceDecl>(NA.getAliasedNamespace())),
5745         getOrCreateFile(Loc), getLineNumber(Loc), NA.getName());
5746   VH.reset(R);
5747   return R;
5748 }
5749 
5750 llvm::DINamespace *
5751 CGDebugInfo::getOrCreateNamespace(const NamespaceDecl *NSDecl) {
5752   // Don't canonicalize the NamespaceDecl here: The DINamespace will be uniqued
5753   // if necessary, and this way multiple declarations of the same namespace in
5754   // different parent modules stay distinct.
5755   auto I = NamespaceCache.find(NSDecl);
5756   if (I != NamespaceCache.end())
5757     return cast<llvm::DINamespace>(I->second);
5758 
5759   llvm::DIScope *Context = getDeclContextDescriptor(NSDecl);
5760   // Don't trust the context if it is a DIModule (see comment above).
5761   llvm::DINamespace *NS =
5762       DBuilder.createNameSpace(Context, NSDecl->getName(), NSDecl->isInline());
5763   NamespaceCache[NSDecl].reset(NS);
5764   return NS;
5765 }
5766 
5767 void CGDebugInfo::setDwoId(uint64_t Signature) {
5768   assert(TheCU && "no main compile unit");
5769   TheCU->setDWOId(Signature);
5770 }
5771 
5772 void CGDebugInfo::finalize() {
5773   // Creating types might create further types - invalidating the current
5774   // element and the size(), so don't cache/reference them.
5775   for (size_t i = 0; i != ObjCInterfaceCache.size(); ++i) {
5776     ObjCInterfaceCacheEntry E = ObjCInterfaceCache[i];
5777     llvm::DIType *Ty = E.Type->getDecl()->getDefinition()
5778                            ? CreateTypeDefinition(E.Type, E.Unit)
5779                            : E.Decl;
5780     DBuilder.replaceTemporary(llvm::TempDIType(E.Decl), Ty);
5781   }
5782 
5783   // Add methods to interface.
5784   for (const auto &P : ObjCMethodCache) {
5785     if (P.second.empty())
5786       continue;
5787 
5788     QualType QTy(P.first->getTypeForDecl(), 0);
5789     auto It = TypeCache.find(QTy.getAsOpaquePtr());
5790     assert(It != TypeCache.end());
5791 
5792     llvm::DICompositeType *InterfaceDecl =
5793         cast<llvm::DICompositeType>(It->second);
5794 
5795     auto CurElts = InterfaceDecl->getElements();
5796     SmallVector<llvm::Metadata *, 16> EltTys(CurElts.begin(), CurElts.end());
5797 
5798     // For DWARF v4 or earlier, only add objc_direct methods.
5799     for (auto &SubprogramDirect : P.second)
5800       if (CGM.getCodeGenOpts().DwarfVersion >= 5 || SubprogramDirect.getInt())
5801         EltTys.push_back(SubprogramDirect.getPointer());
5802 
5803     llvm::DINodeArray Elements = DBuilder.getOrCreateArray(EltTys);
5804     DBuilder.replaceArrays(InterfaceDecl, Elements);
5805   }
5806 
5807   for (const auto &P : ReplaceMap) {
5808     assert(P.second);
5809     auto *Ty = cast<llvm::DIType>(P.second);
5810     assert(Ty->isForwardDecl());
5811 
5812     auto It = TypeCache.find(P.first);
5813     assert(It != TypeCache.end());
5814     assert(It->second);
5815 
5816     DBuilder.replaceTemporary(llvm::TempDIType(Ty),
5817                               cast<llvm::DIType>(It->second));
5818   }
5819 
5820   for (const auto &P : FwdDeclReplaceMap) {
5821     assert(P.second);
5822     llvm::TempMDNode FwdDecl(cast<llvm::MDNode>(P.second));
5823     llvm::Metadata *Repl;
5824 
5825     auto It = DeclCache.find(P.first);
5826     // If there has been no definition for the declaration, call RAUW
5827     // with ourselves, that will destroy the temporary MDNode and
5828     // replace it with a standard one, avoiding leaking memory.
5829     if (It == DeclCache.end())
5830       Repl = P.second;
5831     else
5832       Repl = It->second;
5833 
5834     if (auto *GVE = dyn_cast_or_null<llvm::DIGlobalVariableExpression>(Repl))
5835       Repl = GVE->getVariable();
5836     DBuilder.replaceTemporary(std::move(FwdDecl), cast<llvm::MDNode>(Repl));
5837   }
5838 
5839   // We keep our own list of retained types, because we need to look
5840   // up the final type in the type cache.
5841   for (auto &RT : RetainedTypes)
5842     if (auto MD = TypeCache[RT])
5843       DBuilder.retainType(cast<llvm::DIType>(MD));
5844 
5845   DBuilder.finalize();
5846 }
5847 
5848 // Don't ignore in case of explicit cast where it is referenced indirectly.
5849 void CGDebugInfo::EmitExplicitCastType(QualType Ty) {
5850   if (CGM.getCodeGenOpts().hasReducedDebugInfo())
5851     if (auto *DieTy = getOrCreateType(Ty, TheCU->getFile()))
5852       DBuilder.retainType(DieTy);
5853 }
5854 
5855 void CGDebugInfo::EmitAndRetainType(QualType Ty) {
5856   if (CGM.getCodeGenOpts().hasMaybeUnusedDebugInfo())
5857     if (auto *DieTy = getOrCreateType(Ty, TheCU->getFile()))
5858       DBuilder.retainType(DieTy);
5859 }
5860 
5861 llvm::DebugLoc CGDebugInfo::SourceLocToDebugLoc(SourceLocation Loc) {
5862   if (LexicalBlockStack.empty())
5863     return llvm::DebugLoc();
5864 
5865   llvm::MDNode *Scope = LexicalBlockStack.back();
5866   return llvm::DILocation::get(CGM.getLLVMContext(), getLineNumber(Loc),
5867                                getColumnNumber(Loc), Scope);
5868 }
5869 
5870 llvm::DINode::DIFlags CGDebugInfo::getCallSiteRelatedAttrs() const {
5871   // Call site-related attributes are only useful in optimized programs, and
5872   // when there's a possibility of debugging backtraces.
5873   if (!CGM.getLangOpts().Optimize ||
5874       DebugKind == llvm::codegenoptions::NoDebugInfo ||
5875       DebugKind == llvm::codegenoptions::LocTrackingOnly)
5876     return llvm::DINode::FlagZero;
5877 
5878   // Call site-related attributes are available in DWARF v5. Some debuggers,
5879   // while not fully DWARF v5-compliant, may accept these attributes as if they
5880   // were part of DWARF v4.
5881   bool SupportsDWARFv4Ext =
5882       CGM.getCodeGenOpts().DwarfVersion == 4 &&
5883       (CGM.getCodeGenOpts().getDebuggerTuning() == llvm::DebuggerKind::LLDB ||
5884        CGM.getCodeGenOpts().getDebuggerTuning() == llvm::DebuggerKind::GDB);
5885 
5886   if (!SupportsDWARFv4Ext && CGM.getCodeGenOpts().DwarfVersion < 5)
5887     return llvm::DINode::FlagZero;
5888 
5889   return llvm::DINode::FlagAllCallsDescribed;
5890 }
5891