1 //===- MetadataLoader.cpp - Internal BitcodeReader implementation ---------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #include "MetadataLoader.h"
11 #include "ValueList.h"
12 
13 #include "llvm/ADT/APFloat.h"
14 #include "llvm/ADT/APInt.h"
15 #include "llvm/ADT/ArrayRef.h"
16 #include "llvm/ADT/DenseMap.h"
17 #include "llvm/ADT/None.h"
18 #include "llvm/ADT/STLExtras.h"
19 #include "llvm/ADT/SmallString.h"
20 #include "llvm/ADT/SmallVector.h"
21 #include "llvm/ADT/StringRef.h"
22 #include "llvm/ADT/Triple.h"
23 #include "llvm/ADT/Twine.h"
24 #include "llvm/Bitcode/BitcodeReader.h"
25 #include "llvm/Bitcode/BitstreamReader.h"
26 #include "llvm/Bitcode/LLVMBitCodes.h"
27 #include "llvm/IR/Argument.h"
28 #include "llvm/IR/Attributes.h"
29 #include "llvm/IR/AutoUpgrade.h"
30 #include "llvm/IR/BasicBlock.h"
31 #include "llvm/IR/CallSite.h"
32 #include "llvm/IR/CallingConv.h"
33 #include "llvm/IR/Comdat.h"
34 #include "llvm/IR/Constant.h"
35 #include "llvm/IR/Constants.h"
36 #include "llvm/IR/DebugInfo.h"
37 #include "llvm/IR/DebugInfoMetadata.h"
38 #include "llvm/IR/DebugLoc.h"
39 #include "llvm/IR/DerivedTypes.h"
40 #include "llvm/IR/DiagnosticInfo.h"
41 #include "llvm/IR/DiagnosticPrinter.h"
42 #include "llvm/IR/Function.h"
43 #include "llvm/IR/GVMaterializer.h"
44 #include "llvm/IR/GlobalAlias.h"
45 #include "llvm/IR/GlobalIFunc.h"
46 #include "llvm/IR/GlobalIndirectSymbol.h"
47 #include "llvm/IR/GlobalObject.h"
48 #include "llvm/IR/GlobalValue.h"
49 #include "llvm/IR/GlobalVariable.h"
50 #include "llvm/IR/InlineAsm.h"
51 #include "llvm/IR/InstrTypes.h"
52 #include "llvm/IR/Instruction.h"
53 #include "llvm/IR/Instructions.h"
54 #include "llvm/IR/Intrinsics.h"
55 #include "llvm/IR/LLVMContext.h"
56 #include "llvm/IR/Module.h"
57 #include "llvm/IR/ModuleSummaryIndex.h"
58 #include "llvm/IR/OperandTraits.h"
59 #include "llvm/IR/Operator.h"
60 #include "llvm/IR/TrackingMDRef.h"
61 #include "llvm/IR/Type.h"
62 #include "llvm/IR/ValueHandle.h"
63 #include "llvm/Support/AtomicOrdering.h"
64 #include "llvm/Support/Casting.h"
65 #include "llvm/Support/CommandLine.h"
66 #include "llvm/Support/Compiler.h"
67 #include "llvm/Support/Debug.h"
68 #include "llvm/Support/Error.h"
69 #include "llvm/Support/ErrorHandling.h"
70 #include "llvm/Support/ManagedStatic.h"
71 #include "llvm/Support/MemoryBuffer.h"
72 #include "llvm/Support/raw_ostream.h"
73 #include <algorithm>
74 #include <cassert>
75 #include <cstddef>
76 #include <cstdint>
77 #include <deque>
78 #include <limits>
79 #include <map>
80 #include <memory>
81 #include <string>
82 #include <system_error>
83 #include <tuple>
84 #include <utility>
85 #include <vector>
86 
87 using namespace llvm;
88 
89 /// Flag whether we need to import full type definitions for ThinLTO.
90 /// Currently needed for Darwin and LLDB.
91 static cl::opt<bool> ImportFullTypeDefinitions(
92     "import-full-type-definitions", cl::init(false), cl::Hidden,
93     cl::desc("Import full type definitions for ThinLTO."));
94 
95 namespace {
96 
97 static int64_t unrotateSign(uint64_t U) { return U & 1 ? ~(U >> 1) : U >> 1; }
98 
99 class BitcodeReaderMetadataList {
100   /// Keep track of the current number of ForwardReference in the list.
101   unsigned NumFwdRefs = 0;
102   /// Maintain the range [min-max] that needs to be inspected to resolve cycles.
103   /// This is the range of Metadata that have involved forward reference during
104   /// loading and that needs to be inspected to resolve cycles. It is purely an
105   /// optimization to avoid spending time resolving cycles outside of this
106   /// range, i.e. where there hasn't been any forward reference.
107   unsigned MinFwdRef = 0;
108   unsigned MaxFwdRef = 0;
109   /// Set to true if there was any FwdRef encountered. This is used to track if
110   /// we need to resolve cycles after loading metadatas.
111   bool AnyFwdRefs = false;
112 
113   /// Array of metadata references.
114   ///
115   /// Don't use std::vector here.  Some versions of libc++ copy (instead of
116   /// move) on resize, and TrackingMDRef is very expensive to copy.
117   SmallVector<TrackingMDRef, 1> MetadataPtrs;
118 
119   /// Structures for resolving old type refs.
120   struct {
121     SmallDenseMap<MDString *, TempMDTuple, 1> Unknown;
122     SmallDenseMap<MDString *, DICompositeType *, 1> Final;
123     SmallDenseMap<MDString *, DICompositeType *, 1> FwdDecls;
124     SmallVector<std::pair<TrackingMDRef, TempMDTuple>, 1> Arrays;
125   } OldTypeRefs;
126 
127   LLVMContext &Context;
128 
129 public:
130   BitcodeReaderMetadataList(LLVMContext &C) : Context(C) {}
131 
132   // vector compatibility methods
133   unsigned size() const { return MetadataPtrs.size(); }
134   void resize(unsigned N) { MetadataPtrs.resize(N); }
135   void push_back(Metadata *MD) { MetadataPtrs.emplace_back(MD); }
136   void clear() { MetadataPtrs.clear(); }
137   Metadata *back() const { return MetadataPtrs.back(); }
138   void pop_back() { MetadataPtrs.pop_back(); }
139   bool empty() const { return MetadataPtrs.empty(); }
140 
141   Metadata *operator[](unsigned i) const {
142     assert(i < MetadataPtrs.size());
143     return MetadataPtrs[i];
144   }
145 
146   Metadata *lookup(unsigned I) const {
147     if (I < MetadataPtrs.size())
148       return MetadataPtrs[I];
149     return nullptr;
150   }
151 
152   void shrinkTo(unsigned N) {
153     assert(N <= size() && "Invalid shrinkTo request!");
154     assert(!AnyFwdRefs && "Unexpected forward refs");
155     MetadataPtrs.resize(N);
156   }
157 
158   /// Return the given metadata, creating a replaceable forward reference if
159   /// necessary.
160   Metadata *getMetadataFwdRef(unsigned Idx);
161 
162   /// Return the the given metadata only if it is fully resolved.
163   ///
164   /// Gives the same result as \a lookup(), unless \a MDNode::isResolved()
165   /// would give \c false.
166   Metadata *getMetadataIfResolved(unsigned Idx);
167 
168   MDNode *getMDNodeFwdRefOrNull(unsigned Idx);
169   void assignValue(Metadata *MD, unsigned Idx);
170   void tryToResolveCycles();
171   bool hasFwdRefs() const { return AnyFwdRefs; }
172 
173   /// Upgrade a type that had an MDString reference.
174   void addTypeRef(MDString &UUID, DICompositeType &CT);
175 
176   /// Upgrade a type that had an MDString reference.
177   Metadata *upgradeTypeRef(Metadata *MaybeUUID);
178 
179   /// Upgrade a type ref array that may have MDString references.
180   Metadata *upgradeTypeRefArray(Metadata *MaybeTuple);
181 
182 private:
183   Metadata *resolveTypeRefArray(Metadata *MaybeTuple);
184 };
185 
186 void BitcodeReaderMetadataList::assignValue(Metadata *MD, unsigned Idx) {
187   if (Idx == size()) {
188     push_back(MD);
189     return;
190   }
191 
192   if (Idx >= size())
193     resize(Idx + 1);
194 
195   TrackingMDRef &OldMD = MetadataPtrs[Idx];
196   if (!OldMD) {
197     OldMD.reset(MD);
198     return;
199   }
200 
201   // If there was a forward reference to this value, replace it.
202   TempMDTuple PrevMD(cast<MDTuple>(OldMD.get()));
203   PrevMD->replaceAllUsesWith(MD);
204   --NumFwdRefs;
205 }
206 
207 Metadata *BitcodeReaderMetadataList::getMetadataFwdRef(unsigned Idx) {
208   if (Idx >= size())
209     resize(Idx + 1);
210 
211   if (Metadata *MD = MetadataPtrs[Idx])
212     return MD;
213 
214   // Track forward refs to be resolved later.
215   if (AnyFwdRefs) {
216     MinFwdRef = std::min(MinFwdRef, Idx);
217     MaxFwdRef = std::max(MaxFwdRef, Idx);
218   } else {
219     AnyFwdRefs = true;
220     MinFwdRef = MaxFwdRef = Idx;
221   }
222   ++NumFwdRefs;
223 
224   // Create and return a placeholder, which will later be RAUW'd.
225   Metadata *MD = MDNode::getTemporary(Context, None).release();
226   MetadataPtrs[Idx].reset(MD);
227   return MD;
228 }
229 
230 Metadata *BitcodeReaderMetadataList::getMetadataIfResolved(unsigned Idx) {
231   Metadata *MD = lookup(Idx);
232   if (auto *N = dyn_cast_or_null<MDNode>(MD))
233     if (!N->isResolved())
234       return nullptr;
235   return MD;
236 }
237 
238 MDNode *BitcodeReaderMetadataList::getMDNodeFwdRefOrNull(unsigned Idx) {
239   return dyn_cast_or_null<MDNode>(getMetadataFwdRef(Idx));
240 }
241 
242 void BitcodeReaderMetadataList::tryToResolveCycles() {
243   if (NumFwdRefs)
244     // Still forward references... can't resolve cycles.
245     return;
246 
247   bool DidReplaceTypeRefs = false;
248 
249   // Give up on finding a full definition for any forward decls that remain.
250   for (const auto &Ref : OldTypeRefs.FwdDecls)
251     OldTypeRefs.Final.insert(Ref);
252   OldTypeRefs.FwdDecls.clear();
253 
254   // Upgrade from old type ref arrays.  In strange cases, this could add to
255   // OldTypeRefs.Unknown.
256   for (const auto &Array : OldTypeRefs.Arrays) {
257     DidReplaceTypeRefs = true;
258     Array.second->replaceAllUsesWith(resolveTypeRefArray(Array.first.get()));
259   }
260   OldTypeRefs.Arrays.clear();
261 
262   // Replace old string-based type refs with the resolved node, if possible.
263   // If we haven't seen the node, leave it to the verifier to complain about
264   // the invalid string reference.
265   for (const auto &Ref : OldTypeRefs.Unknown) {
266     DidReplaceTypeRefs = true;
267     if (DICompositeType *CT = OldTypeRefs.Final.lookup(Ref.first))
268       Ref.second->replaceAllUsesWith(CT);
269     else
270       Ref.second->replaceAllUsesWith(Ref.first);
271   }
272   OldTypeRefs.Unknown.clear();
273 
274   // Make sure all the upgraded types are resolved.
275   if (DidReplaceTypeRefs) {
276     AnyFwdRefs = true;
277     MinFwdRef = 0;
278     MaxFwdRef = MetadataPtrs.size() - 1;
279   }
280 
281   if (!AnyFwdRefs)
282     // Nothing to do.
283     return;
284 
285   // Resolve any cycles.
286   for (unsigned I = MinFwdRef, E = MaxFwdRef + 1; I != E; ++I) {
287     auto &MD = MetadataPtrs[I];
288     auto *N = dyn_cast_or_null<MDNode>(MD);
289     if (!N)
290       continue;
291 
292     assert(!N->isTemporary() && "Unexpected forward reference");
293     N->resolveCycles();
294   }
295 
296   // Make sure we return early again until there's another forward ref.
297   AnyFwdRefs = false;
298 }
299 
300 void BitcodeReaderMetadataList::addTypeRef(MDString &UUID,
301                                            DICompositeType &CT) {
302   assert(CT.getRawIdentifier() == &UUID && "Mismatched UUID");
303   if (CT.isForwardDecl())
304     OldTypeRefs.FwdDecls.insert(std::make_pair(&UUID, &CT));
305   else
306     OldTypeRefs.Final.insert(std::make_pair(&UUID, &CT));
307 }
308 
309 Metadata *BitcodeReaderMetadataList::upgradeTypeRef(Metadata *MaybeUUID) {
310   auto *UUID = dyn_cast_or_null<MDString>(MaybeUUID);
311   if (LLVM_LIKELY(!UUID))
312     return MaybeUUID;
313 
314   if (auto *CT = OldTypeRefs.Final.lookup(UUID))
315     return CT;
316 
317   auto &Ref = OldTypeRefs.Unknown[UUID];
318   if (!Ref)
319     Ref = MDNode::getTemporary(Context, None);
320   return Ref.get();
321 }
322 
323 Metadata *BitcodeReaderMetadataList::upgradeTypeRefArray(Metadata *MaybeTuple) {
324   auto *Tuple = dyn_cast_or_null<MDTuple>(MaybeTuple);
325   if (!Tuple || Tuple->isDistinct())
326     return MaybeTuple;
327 
328   // Look through the array immediately if possible.
329   if (!Tuple->isTemporary())
330     return resolveTypeRefArray(Tuple);
331 
332   // Create and return a placeholder to use for now.  Eventually
333   // resolveTypeRefArrays() will be resolve this forward reference.
334   OldTypeRefs.Arrays.emplace_back(
335       std::piecewise_construct, std::forward_as_tuple(Tuple),
336       std::forward_as_tuple(MDTuple::getTemporary(Context, None)));
337   return OldTypeRefs.Arrays.back().second.get();
338 }
339 
340 Metadata *BitcodeReaderMetadataList::resolveTypeRefArray(Metadata *MaybeTuple) {
341   auto *Tuple = dyn_cast_or_null<MDTuple>(MaybeTuple);
342   if (!Tuple || Tuple->isDistinct())
343     return MaybeTuple;
344 
345   // Look through the DITypeRefArray, upgrading each DITypeRef.
346   SmallVector<Metadata *, 32> Ops;
347   Ops.reserve(Tuple->getNumOperands());
348   for (Metadata *MD : Tuple->operands())
349     Ops.push_back(upgradeTypeRef(MD));
350 
351   return MDTuple::get(Context, Ops);
352 }
353 
354 namespace {
355 
356 class PlaceholderQueue {
357   // Placeholders would thrash around when moved, so store in a std::deque
358   // instead of some sort of vector.
359   std::deque<DistinctMDOperandPlaceholder> PHs;
360 
361 public:
362   DistinctMDOperandPlaceholder &getPlaceholderOp(unsigned ID);
363   void flush(BitcodeReaderMetadataList &MetadataList);
364 };
365 
366 } // end anonymous namespace
367 
368 DistinctMDOperandPlaceholder &PlaceholderQueue::getPlaceholderOp(unsigned ID) {
369   PHs.emplace_back(ID);
370   return PHs.back();
371 }
372 
373 void PlaceholderQueue::flush(BitcodeReaderMetadataList &MetadataList) {
374   while (!PHs.empty()) {
375     auto *MD = MetadataList.getMetadataFwdRef(PHs.front().getID());
376 #ifndef NDEBUG
377     if (auto MDN = dyn_cast<MDNode>(MD)) {
378       assert(MDN->isResolved() &&
379              "Flushing Placeholder while cycles aren't resolved");
380     }
381 #endif
382     PHs.front().replaceUseWith(MD);
383     PHs.pop_front();
384   }
385 }
386 
387 } // anonynous namespace
388 
389 class MetadataLoader::MetadataLoaderImpl {
390   BitcodeReaderMetadataList MetadataList;
391   BitcodeReaderValueList &ValueList;
392   BitstreamCursor &Stream;
393   LLVMContext &Context;
394   Module &TheModule;
395   std::function<Type *(unsigned)> getTypeByID;
396 
397   /// Functions that need to be matched with subprograms when upgrading old
398   /// metadata.
399   SmallDenseMap<Function *, DISubprogram *, 16> FunctionsWithSPs;
400 
401   // Map the bitcode's custom MDKind ID to the Module's MDKind ID.
402   DenseMap<unsigned, unsigned> MDKindMap;
403 
404   bool StripTBAA = false;
405   bool HasSeenOldLoopTags = false;
406 
407   /// True if metadata is being parsed for a module being ThinLTO imported.
408   bool IsImporting = false;
409 
410   Error parseMetadataStrings(ArrayRef<uint64_t> Record, StringRef Blob,
411                              unsigned &NextMetadataNo);
412   Error parseGlobalObjectAttachment(GlobalObject &GO,
413                                     ArrayRef<uint64_t> Record);
414   Error parseMetadataKindRecord(SmallVectorImpl<uint64_t> &Record);
415 
416 public:
417   MetadataLoaderImpl(BitstreamCursor &Stream, Module &TheModule,
418                      BitcodeReaderValueList &ValueList,
419                      std::function<Type *(unsigned)> getTypeByID,
420                      bool IsImporting)
421       : MetadataList(TheModule.getContext()), ValueList(ValueList),
422         Stream(Stream), Context(TheModule.getContext()), TheModule(TheModule),
423         getTypeByID(getTypeByID), IsImporting(IsImporting) {}
424 
425   Error parseMetadata(bool ModuleLevel);
426 
427   bool hasFwdRefs() const { return MetadataList.hasFwdRefs(); }
428   Metadata *getMetadataFwdRef(unsigned Idx) {
429     return MetadataList.getMetadataFwdRef(Idx);
430   }
431 
432   MDNode *getMDNodeFwdRefOrNull(unsigned Idx) {
433     return MetadataList.getMDNodeFwdRefOrNull(Idx);
434   }
435 
436   DISubprogram *lookupSubprogramForFunction(Function *F) {
437     return FunctionsWithSPs.lookup(F);
438   }
439 
440   bool hasSeenOldLoopTags() { return HasSeenOldLoopTags; }
441 
442   Error parseMetadataAttachment(
443       Function &F, const SmallVectorImpl<Instruction *> &InstructionList);
444 
445   Error parseMetadataKinds();
446 
447   void setStripTBAA(bool Value) { StripTBAA = Value; }
448   bool isStrippingTBAA() { return StripTBAA; }
449 
450   unsigned size() const { return MetadataList.size(); }
451   void shrinkTo(unsigned N) { MetadataList.shrinkTo(N); }
452 };
453 
454 Error error(const Twine &Message) {
455   return make_error<StringError>(
456       Message, make_error_code(BitcodeError::CorruptedBitcode));
457 }
458 
459 /// Parse a METADATA_BLOCK. If ModuleLevel is true then we are parsing
460 /// module level metadata.
461 Error MetadataLoader::MetadataLoaderImpl::parseMetadata(bool ModuleLevel) {
462   if (!ModuleLevel && MetadataList.hasFwdRefs())
463     return error("Invalid metadata: fwd refs into function blocks");
464 
465   if (Stream.EnterSubBlock(bitc::METADATA_BLOCK_ID))
466     return error("Invalid record");
467 
468   unsigned NextMetadataNo = MetadataList.size();
469   std::vector<std::pair<DICompileUnit *, Metadata *>> CUSubprograms;
470   SmallVector<uint64_t, 64> Record;
471 
472   PlaceholderQueue Placeholders;
473   bool IsDistinct;
474   auto getMD = [&](unsigned ID) -> Metadata * {
475     if (!IsDistinct)
476       return MetadataList.getMetadataFwdRef(ID);
477     if (auto *MD = MetadataList.getMetadataIfResolved(ID))
478       return MD;
479     return &Placeholders.getPlaceholderOp(ID);
480   };
481   auto getMDOrNull = [&](unsigned ID) -> Metadata * {
482     if (ID)
483       return getMD(ID - 1);
484     return nullptr;
485   };
486   auto getMDOrNullWithoutPlaceholders = [&](unsigned ID) -> Metadata * {
487     if (ID)
488       return MetadataList.getMetadataFwdRef(ID - 1);
489     return nullptr;
490   };
491   auto getMDString = [&](unsigned ID) -> MDString * {
492     // This requires that the ID is not really a forward reference.  In
493     // particular, the MDString must already have been resolved.
494     return cast_or_null<MDString>(getMDOrNull(ID));
495   };
496 
497   // Support for old type refs.
498   auto getDITypeRefOrNull = [&](unsigned ID) {
499     return MetadataList.upgradeTypeRef(getMDOrNull(ID));
500   };
501 
502 #define GET_OR_DISTINCT(CLASS, ARGS)                                           \
503   (IsDistinct ? CLASS::getDistinct ARGS : CLASS::get ARGS)
504 
505   // Read all the records.
506   while (true) {
507     BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
508 
509     switch (Entry.Kind) {
510     case BitstreamEntry::SubBlock: // Handled for us already.
511     case BitstreamEntry::Error:
512       return error("Malformed block");
513     case BitstreamEntry::EndBlock:
514       // Upgrade old-style CU <-> SP pointers to point from SP to CU.
515       for (auto CU_SP : CUSubprograms)
516         if (auto *SPs = dyn_cast_or_null<MDTuple>(CU_SP.second))
517           for (auto &Op : SPs->operands())
518             if (auto *SP = dyn_cast_or_null<MDNode>(Op))
519               SP->replaceOperandWith(7, CU_SP.first);
520 
521       MetadataList.tryToResolveCycles();
522       Placeholders.flush(MetadataList);
523       return Error::success();
524     case BitstreamEntry::Record:
525       // The interesting case.
526       break;
527     }
528 
529     // Read a record.
530     Record.clear();
531     StringRef Blob;
532     unsigned Code = Stream.readRecord(Entry.ID, Record, &Blob);
533     IsDistinct = false;
534     switch (Code) {
535     default: // Default behavior: ignore.
536       break;
537     case bitc::METADATA_NAME: {
538       // Read name of the named metadata.
539       SmallString<8> Name(Record.begin(), Record.end());
540       Record.clear();
541       Code = Stream.ReadCode();
542 
543       unsigned NextBitCode = Stream.readRecord(Code, Record);
544       if (NextBitCode != bitc::METADATA_NAMED_NODE)
545         return error("METADATA_NAME not followed by METADATA_NAMED_NODE");
546 
547       // Read named metadata elements.
548       unsigned Size = Record.size();
549       NamedMDNode *NMD = TheModule.getOrInsertNamedMetadata(Name);
550       for (unsigned i = 0; i != Size; ++i) {
551         MDNode *MD = MetadataList.getMDNodeFwdRefOrNull(Record[i]);
552         if (!MD)
553           return error("Invalid record");
554         NMD->addOperand(MD);
555       }
556       break;
557     }
558     case bitc::METADATA_OLD_FN_NODE: {
559       // FIXME: Remove in 4.0.
560       // This is a LocalAsMetadata record, the only type of function-local
561       // metadata.
562       if (Record.size() % 2 == 1)
563         return error("Invalid record");
564 
565       // If this isn't a LocalAsMetadata record, we're dropping it.  This used
566       // to be legal, but there's no upgrade path.
567       auto dropRecord = [&] {
568         MetadataList.assignValue(MDNode::get(Context, None), NextMetadataNo++);
569       };
570       if (Record.size() != 2) {
571         dropRecord();
572         break;
573       }
574 
575       Type *Ty = getTypeByID(Record[0]);
576       if (Ty->isMetadataTy() || Ty->isVoidTy()) {
577         dropRecord();
578         break;
579       }
580 
581       MetadataList.assignValue(
582           LocalAsMetadata::get(ValueList.getValueFwdRef(Record[1], Ty)),
583           NextMetadataNo++);
584       break;
585     }
586     case bitc::METADATA_OLD_NODE: {
587       // FIXME: Remove in 4.0.
588       if (Record.size() % 2 == 1)
589         return error("Invalid record");
590 
591       unsigned Size = Record.size();
592       SmallVector<Metadata *, 8> Elts;
593       for (unsigned i = 0; i != Size; i += 2) {
594         Type *Ty = getTypeByID(Record[i]);
595         if (!Ty)
596           return error("Invalid record");
597         if (Ty->isMetadataTy())
598           Elts.push_back(getMD(Record[i + 1]));
599         else if (!Ty->isVoidTy()) {
600           auto *MD =
601               ValueAsMetadata::get(ValueList.getValueFwdRef(Record[i + 1], Ty));
602           assert(isa<ConstantAsMetadata>(MD) &&
603                  "Expected non-function-local metadata");
604           Elts.push_back(MD);
605         } else
606           Elts.push_back(nullptr);
607       }
608       MetadataList.assignValue(MDNode::get(Context, Elts), NextMetadataNo++);
609       break;
610     }
611     case bitc::METADATA_VALUE: {
612       if (Record.size() != 2)
613         return error("Invalid record");
614 
615       Type *Ty = getTypeByID(Record[0]);
616       if (Ty->isMetadataTy() || Ty->isVoidTy())
617         return error("Invalid record");
618 
619       MetadataList.assignValue(
620           ValueAsMetadata::get(ValueList.getValueFwdRef(Record[1], Ty)),
621           NextMetadataNo++);
622       break;
623     }
624     case bitc::METADATA_DISTINCT_NODE:
625       IsDistinct = true;
626       LLVM_FALLTHROUGH;
627     case bitc::METADATA_NODE: {
628       SmallVector<Metadata *, 8> Elts;
629       Elts.reserve(Record.size());
630       for (unsigned ID : Record)
631         Elts.push_back(getMDOrNull(ID));
632       MetadataList.assignValue(IsDistinct ? MDNode::getDistinct(Context, Elts)
633                                           : MDNode::get(Context, Elts),
634                                NextMetadataNo++);
635       break;
636     }
637     case bitc::METADATA_LOCATION: {
638       if (Record.size() != 5)
639         return error("Invalid record");
640 
641       IsDistinct = Record[0];
642       unsigned Line = Record[1];
643       unsigned Column = Record[2];
644       Metadata *Scope = getMD(Record[3]);
645       Metadata *InlinedAt = getMDOrNull(Record[4]);
646       MetadataList.assignValue(
647           GET_OR_DISTINCT(DILocation,
648                           (Context, Line, Column, Scope, InlinedAt)),
649           NextMetadataNo++);
650       break;
651     }
652     case bitc::METADATA_GENERIC_DEBUG: {
653       if (Record.size() < 4)
654         return error("Invalid record");
655 
656       IsDistinct = Record[0];
657       unsigned Tag = Record[1];
658       unsigned Version = Record[2];
659 
660       if (Tag >= 1u << 16 || Version != 0)
661         return error("Invalid record");
662 
663       auto *Header = getMDString(Record[3]);
664       SmallVector<Metadata *, 8> DwarfOps;
665       for (unsigned I = 4, E = Record.size(); I != E; ++I)
666         DwarfOps.push_back(getMDOrNull(Record[I]));
667       MetadataList.assignValue(
668           GET_OR_DISTINCT(GenericDINode, (Context, Tag, Header, DwarfOps)),
669           NextMetadataNo++);
670       break;
671     }
672     case bitc::METADATA_SUBRANGE: {
673       if (Record.size() != 3)
674         return error("Invalid record");
675 
676       IsDistinct = Record[0];
677       MetadataList.assignValue(
678           GET_OR_DISTINCT(DISubrange,
679                           (Context, Record[1], unrotateSign(Record[2]))),
680           NextMetadataNo++);
681       break;
682     }
683     case bitc::METADATA_ENUMERATOR: {
684       if (Record.size() != 3)
685         return error("Invalid record");
686 
687       IsDistinct = Record[0];
688       MetadataList.assignValue(
689           GET_OR_DISTINCT(DIEnumerator, (Context, unrotateSign(Record[1]),
690                                          getMDString(Record[2]))),
691           NextMetadataNo++);
692       break;
693     }
694     case bitc::METADATA_BASIC_TYPE: {
695       if (Record.size() != 6)
696         return error("Invalid record");
697 
698       IsDistinct = Record[0];
699       MetadataList.assignValue(
700           GET_OR_DISTINCT(DIBasicType,
701                           (Context, Record[1], getMDString(Record[2]),
702                            Record[3], Record[4], Record[5])),
703           NextMetadataNo++);
704       break;
705     }
706     case bitc::METADATA_DERIVED_TYPE: {
707       if (Record.size() != 12)
708         return error("Invalid record");
709 
710       IsDistinct = Record[0];
711       DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[10]);
712       MetadataList.assignValue(
713           GET_OR_DISTINCT(DIDerivedType,
714                           (Context, Record[1], getMDString(Record[2]),
715                            getMDOrNull(Record[3]), Record[4],
716                            getDITypeRefOrNull(Record[5]),
717                            getDITypeRefOrNull(Record[6]), Record[7], Record[8],
718                            Record[9], Flags, getDITypeRefOrNull(Record[11]))),
719           NextMetadataNo++);
720       break;
721     }
722     case bitc::METADATA_COMPOSITE_TYPE: {
723       if (Record.size() != 16)
724         return error("Invalid record");
725 
726       // If we have a UUID and this is not a forward declaration, lookup the
727       // mapping.
728       IsDistinct = Record[0] & 0x1;
729       bool IsNotUsedInTypeRef = Record[0] >= 2;
730       unsigned Tag = Record[1];
731       MDString *Name = getMDString(Record[2]);
732       Metadata *File = getMDOrNull(Record[3]);
733       unsigned Line = Record[4];
734       Metadata *Scope = getDITypeRefOrNull(Record[5]);
735       Metadata *BaseType = nullptr;
736       uint64_t SizeInBits = Record[7];
737       if (Record[8] > (uint64_t)std::numeric_limits<uint32_t>::max())
738         return error("Alignment value is too large");
739       uint32_t AlignInBits = Record[8];
740       uint64_t OffsetInBits = 0;
741       DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[10]);
742       Metadata *Elements = nullptr;
743       unsigned RuntimeLang = Record[12];
744       Metadata *VTableHolder = nullptr;
745       Metadata *TemplateParams = nullptr;
746       auto *Identifier = getMDString(Record[15]);
747       // If this module is being parsed so that it can be ThinLTO imported
748       // into another module, composite types only need to be imported
749       // as type declarations (unless full type definitions requested).
750       // Create type declarations up front to save memory. Also, buildODRType
751       // handles the case where this is type ODRed with a definition needed
752       // by the importing module, in which case the existing definition is
753       // used.
754       if (IsImporting && !ImportFullTypeDefinitions &&
755           (Tag == dwarf::DW_TAG_enumeration_type ||
756            Tag == dwarf::DW_TAG_class_type ||
757            Tag == dwarf::DW_TAG_structure_type ||
758            Tag == dwarf::DW_TAG_union_type)) {
759         Flags = Flags | DINode::FlagFwdDecl;
760       } else {
761         BaseType = getDITypeRefOrNull(Record[6]);
762         OffsetInBits = Record[9];
763         Elements = getMDOrNull(Record[11]);
764         VTableHolder = getDITypeRefOrNull(Record[13]);
765         TemplateParams = getMDOrNull(Record[14]);
766       }
767       DICompositeType *CT = nullptr;
768       if (Identifier)
769         CT = DICompositeType::buildODRType(
770             Context, *Identifier, Tag, Name, File, Line, Scope, BaseType,
771             SizeInBits, AlignInBits, OffsetInBits, Flags, Elements, RuntimeLang,
772             VTableHolder, TemplateParams);
773 
774       // Create a node if we didn't get a lazy ODR type.
775       if (!CT)
776         CT = GET_OR_DISTINCT(DICompositeType,
777                              (Context, Tag, Name, File, Line, Scope, BaseType,
778                               SizeInBits, AlignInBits, OffsetInBits, Flags,
779                               Elements, RuntimeLang, VTableHolder,
780                               TemplateParams, Identifier));
781       if (!IsNotUsedInTypeRef && Identifier)
782         MetadataList.addTypeRef(*Identifier, *cast<DICompositeType>(CT));
783 
784       MetadataList.assignValue(CT, NextMetadataNo++);
785       break;
786     }
787     case bitc::METADATA_SUBROUTINE_TYPE: {
788       if (Record.size() < 3 || Record.size() > 4)
789         return error("Invalid record");
790       bool IsOldTypeRefArray = Record[0] < 2;
791       unsigned CC = (Record.size() > 3) ? Record[3] : 0;
792 
793       IsDistinct = Record[0] & 0x1;
794       DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[1]);
795       Metadata *Types = getMDOrNull(Record[2]);
796       if (LLVM_UNLIKELY(IsOldTypeRefArray))
797         Types = MetadataList.upgradeTypeRefArray(Types);
798 
799       MetadataList.assignValue(
800           GET_OR_DISTINCT(DISubroutineType, (Context, Flags, CC, Types)),
801           NextMetadataNo++);
802       break;
803     }
804 
805     case bitc::METADATA_MODULE: {
806       if (Record.size() != 6)
807         return error("Invalid record");
808 
809       IsDistinct = Record[0];
810       MetadataList.assignValue(
811           GET_OR_DISTINCT(DIModule,
812                           (Context, getMDOrNull(Record[1]),
813                            getMDString(Record[2]), getMDString(Record[3]),
814                            getMDString(Record[4]), getMDString(Record[5]))),
815           NextMetadataNo++);
816       break;
817     }
818 
819     case bitc::METADATA_FILE: {
820       if (Record.size() != 3)
821         return error("Invalid record");
822 
823       IsDistinct = Record[0];
824       MetadataList.assignValue(
825           GET_OR_DISTINCT(DIFile, (Context, getMDString(Record[1]),
826                                    getMDString(Record[2]))),
827           NextMetadataNo++);
828       break;
829     }
830     case bitc::METADATA_COMPILE_UNIT: {
831       if (Record.size() < 14 || Record.size() > 17)
832         return error("Invalid record");
833 
834       // Ignore Record[0], which indicates whether this compile unit is
835       // distinct.  It's always distinct.
836       IsDistinct = true;
837       auto *CU = DICompileUnit::getDistinct(
838           Context, Record[1], getMDOrNull(Record[2]), getMDString(Record[3]),
839           Record[4], getMDString(Record[5]), Record[6], getMDString(Record[7]),
840           Record[8], getMDOrNull(Record[9]), getMDOrNull(Record[10]),
841           getMDOrNull(Record[12]), getMDOrNull(Record[13]),
842           Record.size() <= 15 ? nullptr : getMDOrNull(Record[15]),
843           Record.size() <= 14 ? 0 : Record[14],
844           Record.size() <= 16 ? true : Record[16]);
845 
846       MetadataList.assignValue(CU, NextMetadataNo++);
847 
848       // Move the Upgrade the list of subprograms.
849       if (Metadata *SPs = getMDOrNullWithoutPlaceholders(Record[11]))
850         CUSubprograms.push_back({CU, SPs});
851       break;
852     }
853     case bitc::METADATA_SUBPROGRAM: {
854       if (Record.size() < 18 || Record.size() > 20)
855         return error("Invalid record");
856 
857       IsDistinct =
858           (Record[0] & 1) || Record[8]; // All definitions should be distinct.
859       // Version 1 has a Function as Record[15].
860       // Version 2 has removed Record[15].
861       // Version 3 has the Unit as Record[15].
862       // Version 4 added thisAdjustment.
863       bool HasUnit = Record[0] >= 2;
864       if (HasUnit && Record.size() < 19)
865         return error("Invalid record");
866       Metadata *CUorFn = getMDOrNull(Record[15]);
867       unsigned Offset = Record.size() >= 19 ? 1 : 0;
868       bool HasFn = Offset && !HasUnit;
869       bool HasThisAdj = Record.size() >= 20;
870       DISubprogram *SP = GET_OR_DISTINCT(
871           DISubprogram, (Context,
872                          getDITypeRefOrNull(Record[1]),  // scope
873                          getMDString(Record[2]),         // name
874                          getMDString(Record[3]),         // linkageName
875                          getMDOrNull(Record[4]),         // file
876                          Record[5],                      // line
877                          getMDOrNull(Record[6]),         // type
878                          Record[7],                      // isLocal
879                          Record[8],                      // isDefinition
880                          Record[9],                      // scopeLine
881                          getDITypeRefOrNull(Record[10]), // containingType
882                          Record[11],                     // virtuality
883                          Record[12],                     // virtualIndex
884                          HasThisAdj ? Record[19] : 0,    // thisAdjustment
885                          static_cast<DINode::DIFlags>(Record[13] // flags
886                                                       ),
887                          Record[14],                       // isOptimized
888                          HasUnit ? CUorFn : nullptr,       // unit
889                          getMDOrNull(Record[15 + Offset]), // templateParams
890                          getMDOrNull(Record[16 + Offset]), // declaration
891                          getMDOrNull(Record[17 + Offset])  // variables
892                          ));
893       MetadataList.assignValue(SP, NextMetadataNo++);
894 
895       // Upgrade sp->function mapping to function->sp mapping.
896       if (HasFn) {
897         if (auto *CMD = dyn_cast_or_null<ConstantAsMetadata>(CUorFn))
898           if (auto *F = dyn_cast<Function>(CMD->getValue())) {
899             if (F->isMaterializable())
900               // Defer until materialized; unmaterialized functions may not have
901               // metadata.
902               FunctionsWithSPs[F] = SP;
903             else if (!F->empty())
904               F->setSubprogram(SP);
905           }
906       }
907       break;
908     }
909     case bitc::METADATA_LEXICAL_BLOCK: {
910       if (Record.size() != 5)
911         return error("Invalid record");
912 
913       IsDistinct = Record[0];
914       MetadataList.assignValue(
915           GET_OR_DISTINCT(DILexicalBlock,
916                           (Context, getMDOrNull(Record[1]),
917                            getMDOrNull(Record[2]), Record[3], Record[4])),
918           NextMetadataNo++);
919       break;
920     }
921     case bitc::METADATA_LEXICAL_BLOCK_FILE: {
922       if (Record.size() != 4)
923         return error("Invalid record");
924 
925       IsDistinct = Record[0];
926       MetadataList.assignValue(
927           GET_OR_DISTINCT(DILexicalBlockFile,
928                           (Context, getMDOrNull(Record[1]),
929                            getMDOrNull(Record[2]), Record[3])),
930           NextMetadataNo++);
931       break;
932     }
933     case bitc::METADATA_NAMESPACE: {
934       if (Record.size() != 5)
935         return error("Invalid record");
936 
937       IsDistinct = Record[0] & 1;
938       bool ExportSymbols = Record[0] & 2;
939       MetadataList.assignValue(
940           GET_OR_DISTINCT(DINamespace,
941                           (Context, getMDOrNull(Record[1]),
942                            getMDOrNull(Record[2]), getMDString(Record[3]),
943                            Record[4], ExportSymbols)),
944           NextMetadataNo++);
945       break;
946     }
947     case bitc::METADATA_MACRO: {
948       if (Record.size() != 5)
949         return error("Invalid record");
950 
951       IsDistinct = Record[0];
952       MetadataList.assignValue(
953           GET_OR_DISTINCT(DIMacro,
954                           (Context, Record[1], Record[2],
955                            getMDString(Record[3]), getMDString(Record[4]))),
956           NextMetadataNo++);
957       break;
958     }
959     case bitc::METADATA_MACRO_FILE: {
960       if (Record.size() != 5)
961         return error("Invalid record");
962 
963       IsDistinct = Record[0];
964       MetadataList.assignValue(
965           GET_OR_DISTINCT(DIMacroFile,
966                           (Context, Record[1], Record[2],
967                            getMDOrNull(Record[3]), getMDOrNull(Record[4]))),
968           NextMetadataNo++);
969       break;
970     }
971     case bitc::METADATA_TEMPLATE_TYPE: {
972       if (Record.size() != 3)
973         return error("Invalid record");
974 
975       IsDistinct = Record[0];
976       MetadataList.assignValue(GET_OR_DISTINCT(DITemplateTypeParameter,
977                                                (Context, getMDString(Record[1]),
978                                                 getDITypeRefOrNull(Record[2]))),
979                                NextMetadataNo++);
980       break;
981     }
982     case bitc::METADATA_TEMPLATE_VALUE: {
983       if (Record.size() != 5)
984         return error("Invalid record");
985 
986       IsDistinct = Record[0];
987       MetadataList.assignValue(
988           GET_OR_DISTINCT(DITemplateValueParameter,
989                           (Context, Record[1], getMDString(Record[2]),
990                            getDITypeRefOrNull(Record[3]),
991                            getMDOrNull(Record[4]))),
992           NextMetadataNo++);
993       break;
994     }
995     case bitc::METADATA_GLOBAL_VAR: {
996       if (Record.size() < 11 || Record.size() > 12)
997         return error("Invalid record");
998 
999       IsDistinct = Record[0] & 1;
1000       unsigned Version = Record[0] >> 1;
1001 
1002       if (Version == 1) {
1003         MetadataList.assignValue(
1004             GET_OR_DISTINCT(DIGlobalVariable,
1005                             (Context, getMDOrNull(Record[1]),
1006                              getMDString(Record[2]), getMDString(Record[3]),
1007                              getMDOrNull(Record[4]), Record[5],
1008                              getDITypeRefOrNull(Record[6]), Record[7],
1009                              Record[8], getMDOrNull(Record[10]), Record[11])),
1010             NextMetadataNo++);
1011       } else if (Version == 0) {
1012         // Upgrade old metadata, which stored a global variable reference or a
1013         // ConstantInt here.
1014         Metadata *Expr = getMDOrNull(Record[9]);
1015         uint32_t AlignInBits = 0;
1016         if (Record.size() > 11) {
1017           if (Record[11] > (uint64_t)std::numeric_limits<uint32_t>::max())
1018             return error("Alignment value is too large");
1019           AlignInBits = Record[11];
1020         }
1021         GlobalVariable *Attach = nullptr;
1022         if (auto *CMD = dyn_cast_or_null<ConstantAsMetadata>(Expr)) {
1023           if (auto *GV = dyn_cast<GlobalVariable>(CMD->getValue())) {
1024             Attach = GV;
1025             Expr = nullptr;
1026           } else if (auto *CI = dyn_cast<ConstantInt>(CMD->getValue())) {
1027             Expr = DIExpression::get(Context,
1028                                      {dwarf::DW_OP_constu, CI->getZExtValue(),
1029                                       dwarf::DW_OP_stack_value});
1030           } else {
1031             Expr = nullptr;
1032           }
1033         }
1034         DIGlobalVariable *DGV = GET_OR_DISTINCT(
1035             DIGlobalVariable,
1036             (Context, getMDOrNull(Record[1]), getMDString(Record[2]),
1037              getMDString(Record[3]), getMDOrNull(Record[4]), Record[5],
1038              getDITypeRefOrNull(Record[6]), Record[7], Record[8],
1039              getMDOrNull(Record[10]), AlignInBits));
1040 
1041         auto *DGVE =
1042             DIGlobalVariableExpression::getDistinct(Context, DGV, Expr);
1043         MetadataList.assignValue(DGVE, NextMetadataNo++);
1044         if (Attach)
1045           Attach->addDebugInfo(DGVE);
1046       } else
1047         return error("Invalid record");
1048 
1049       break;
1050     }
1051     case bitc::METADATA_LOCAL_VAR: {
1052       // 10th field is for the obseleted 'inlinedAt:' field.
1053       if (Record.size() < 8 || Record.size() > 10)
1054         return error("Invalid record");
1055 
1056       IsDistinct = Record[0] & 1;
1057       bool HasAlignment = Record[0] & 2;
1058       // 2nd field used to be an artificial tag, either DW_TAG_auto_variable or
1059       // DW_TAG_arg_variable, if we have alignment flag encoded it means, that
1060       // this is newer version of record which doesn't have artifical tag.
1061       bool HasTag = !HasAlignment && Record.size() > 8;
1062       DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[7 + HasTag]);
1063       uint32_t AlignInBits = 0;
1064       if (HasAlignment) {
1065         if (Record[8 + HasTag] > (uint64_t)std::numeric_limits<uint32_t>::max())
1066           return error("Alignment value is too large");
1067         AlignInBits = Record[8 + HasTag];
1068       }
1069       MetadataList.assignValue(
1070           GET_OR_DISTINCT(DILocalVariable,
1071                           (Context, getMDOrNull(Record[1 + HasTag]),
1072                            getMDString(Record[2 + HasTag]),
1073                            getMDOrNull(Record[3 + HasTag]), Record[4 + HasTag],
1074                            getDITypeRefOrNull(Record[5 + HasTag]),
1075                            Record[6 + HasTag], Flags, AlignInBits)),
1076           NextMetadataNo++);
1077       break;
1078     }
1079     case bitc::METADATA_EXPRESSION: {
1080       if (Record.size() < 1)
1081         return error("Invalid record");
1082 
1083       IsDistinct = Record[0] & 1;
1084       bool HasOpFragment = Record[0] & 2;
1085       auto Elts = MutableArrayRef<uint64_t>(Record).slice(1);
1086       if (!HasOpFragment)
1087         if (unsigned N = Elts.size())
1088           if (N >= 3 && Elts[N - 3] == dwarf::DW_OP_bit_piece)
1089             Elts[N - 3] = dwarf::DW_OP_LLVM_fragment;
1090 
1091       MetadataList.assignValue(
1092           GET_OR_DISTINCT(DIExpression,
1093                           (Context, makeArrayRef(Record).slice(1))),
1094           NextMetadataNo++);
1095       break;
1096     }
1097     case bitc::METADATA_GLOBAL_VAR_EXPR: {
1098       if (Record.size() != 3)
1099         return error("Invalid record");
1100 
1101       IsDistinct = Record[0];
1102       MetadataList.assignValue(GET_OR_DISTINCT(DIGlobalVariableExpression,
1103                                                (Context, getMDOrNull(Record[1]),
1104                                                 getMDOrNull(Record[2]))),
1105                                NextMetadataNo++);
1106       break;
1107     }
1108     case bitc::METADATA_OBJC_PROPERTY: {
1109       if (Record.size() != 8)
1110         return error("Invalid record");
1111 
1112       IsDistinct = Record[0];
1113       MetadataList.assignValue(
1114           GET_OR_DISTINCT(DIObjCProperty,
1115                           (Context, getMDString(Record[1]),
1116                            getMDOrNull(Record[2]), Record[3],
1117                            getMDString(Record[4]), getMDString(Record[5]),
1118                            Record[6], getDITypeRefOrNull(Record[7]))),
1119           NextMetadataNo++);
1120       break;
1121     }
1122     case bitc::METADATA_IMPORTED_ENTITY: {
1123       if (Record.size() != 6)
1124         return error("Invalid record");
1125 
1126       IsDistinct = Record[0];
1127       MetadataList.assignValue(
1128           GET_OR_DISTINCT(DIImportedEntity,
1129                           (Context, Record[1], getMDOrNull(Record[2]),
1130                            getDITypeRefOrNull(Record[3]), Record[4],
1131                            getMDString(Record[5]))),
1132           NextMetadataNo++);
1133       break;
1134     }
1135     case bitc::METADATA_STRING_OLD: {
1136       std::string String(Record.begin(), Record.end());
1137 
1138       // Test for upgrading !llvm.loop.
1139       HasSeenOldLoopTags |= mayBeOldLoopAttachmentTag(String);
1140 
1141       Metadata *MD = MDString::get(Context, String);
1142       MetadataList.assignValue(MD, NextMetadataNo++);
1143       break;
1144     }
1145     case bitc::METADATA_STRINGS:
1146       if (Error Err = parseMetadataStrings(Record, Blob, NextMetadataNo))
1147         return Err;
1148       break;
1149     case bitc::METADATA_GLOBAL_DECL_ATTACHMENT: {
1150       if (Record.size() % 2 == 0)
1151         return error("Invalid record");
1152       unsigned ValueID = Record[0];
1153       if (ValueID >= ValueList.size())
1154         return error("Invalid record");
1155       if (auto *GO = dyn_cast<GlobalObject>(ValueList[ValueID]))
1156         if (Error Err = parseGlobalObjectAttachment(
1157                 *GO, ArrayRef<uint64_t>(Record).slice(1)))
1158           return Err;
1159       break;
1160     }
1161     case bitc::METADATA_KIND: {
1162       // Support older bitcode files that had METADATA_KIND records in a
1163       // block with METADATA_BLOCK_ID.
1164       if (Error Err = parseMetadataKindRecord(Record))
1165         return Err;
1166       break;
1167     }
1168     }
1169   }
1170 #undef GET_OR_DISTINCT
1171 }
1172 
1173 Error MetadataLoader::MetadataLoaderImpl::parseMetadataStrings(
1174     ArrayRef<uint64_t> Record, StringRef Blob, unsigned &NextMetadataNo) {
1175   // All the MDStrings in the block are emitted together in a single
1176   // record.  The strings are concatenated and stored in a blob along with
1177   // their sizes.
1178   if (Record.size() != 2)
1179     return error("Invalid record: metadata strings layout");
1180 
1181   unsigned NumStrings = Record[0];
1182   unsigned StringsOffset = Record[1];
1183   if (!NumStrings)
1184     return error("Invalid record: metadata strings with no strings");
1185   if (StringsOffset > Blob.size())
1186     return error("Invalid record: metadata strings corrupt offset");
1187 
1188   StringRef Lengths = Blob.slice(0, StringsOffset);
1189   SimpleBitstreamCursor R(Lengths);
1190 
1191   StringRef Strings = Blob.drop_front(StringsOffset);
1192   do {
1193     if (R.AtEndOfStream())
1194       return error("Invalid record: metadata strings bad length");
1195 
1196     unsigned Size = R.ReadVBR(6);
1197     if (Strings.size() < Size)
1198       return error("Invalid record: metadata strings truncated chars");
1199 
1200     MetadataList.assignValue(MDString::get(Context, Strings.slice(0, Size)),
1201                              NextMetadataNo++);
1202     Strings = Strings.drop_front(Size);
1203   } while (--NumStrings);
1204 
1205   return Error::success();
1206 }
1207 
1208 Error MetadataLoader::MetadataLoaderImpl::parseGlobalObjectAttachment(
1209     GlobalObject &GO, ArrayRef<uint64_t> Record) {
1210   assert(Record.size() % 2 == 0);
1211   for (unsigned I = 0, E = Record.size(); I != E; I += 2) {
1212     auto K = MDKindMap.find(Record[I]);
1213     if (K == MDKindMap.end())
1214       return error("Invalid ID");
1215     MDNode *MD = MetadataList.getMDNodeFwdRefOrNull(Record[I + 1]);
1216     if (!MD)
1217       return error("Invalid metadata attachment");
1218     GO.addMetadata(K->second, *MD);
1219   }
1220   return Error::success();
1221 }
1222 
1223 /// Parse metadata attachments.
1224 Error MetadataLoader::MetadataLoaderImpl::parseMetadataAttachment(
1225     Function &F, const SmallVectorImpl<Instruction *> &InstructionList) {
1226   if (Stream.EnterSubBlock(bitc::METADATA_ATTACHMENT_ID))
1227     return error("Invalid record");
1228 
1229   SmallVector<uint64_t, 64> Record;
1230 
1231   while (true) {
1232     BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
1233 
1234     switch (Entry.Kind) {
1235     case BitstreamEntry::SubBlock: // Handled for us already.
1236     case BitstreamEntry::Error:
1237       return error("Malformed block");
1238     case BitstreamEntry::EndBlock:
1239       return Error::success();
1240     case BitstreamEntry::Record:
1241       // The interesting case.
1242       break;
1243     }
1244 
1245     // Read a metadata attachment record.
1246     Record.clear();
1247     switch (Stream.readRecord(Entry.ID, Record)) {
1248     default: // Default behavior: ignore.
1249       break;
1250     case bitc::METADATA_ATTACHMENT: {
1251       unsigned RecordLength = Record.size();
1252       if (Record.empty())
1253         return error("Invalid record");
1254       if (RecordLength % 2 == 0) {
1255         // A function attachment.
1256         if (Error Err = parseGlobalObjectAttachment(F, Record))
1257           return Err;
1258         continue;
1259       }
1260 
1261       // An instruction attachment.
1262       Instruction *Inst = InstructionList[Record[0]];
1263       for (unsigned i = 1; i != RecordLength; i = i + 2) {
1264         unsigned Kind = Record[i];
1265         DenseMap<unsigned, unsigned>::iterator I = MDKindMap.find(Kind);
1266         if (I == MDKindMap.end())
1267           return error("Invalid ID");
1268         if (I->second == LLVMContext::MD_tbaa && StripTBAA)
1269           continue;
1270 
1271         Metadata *Node = MetadataList.getMetadataFwdRef(Record[i + 1]);
1272         if (isa<LocalAsMetadata>(Node))
1273           // Drop the attachment.  This used to be legal, but there's no
1274           // upgrade path.
1275           break;
1276         MDNode *MD = dyn_cast_or_null<MDNode>(Node);
1277         if (!MD)
1278           return error("Invalid metadata attachment");
1279 
1280         if (HasSeenOldLoopTags && I->second == LLVMContext::MD_loop)
1281           MD = upgradeInstructionLoopAttachment(*MD);
1282 
1283         if (I->second == LLVMContext::MD_tbaa) {
1284           assert(!MD->isTemporary() && "should load MDs before attachments");
1285           MD = UpgradeTBAANode(*MD);
1286         }
1287         Inst->setMetadata(I->second, MD);
1288       }
1289       break;
1290     }
1291     }
1292   }
1293 }
1294 
1295 /// Parse a single METADATA_KIND record, inserting result in MDKindMap.
1296 Error MetadataLoader::MetadataLoaderImpl::parseMetadataKindRecord(
1297     SmallVectorImpl<uint64_t> &Record) {
1298   if (Record.size() < 2)
1299     return error("Invalid record");
1300 
1301   unsigned Kind = Record[0];
1302   SmallString<8> Name(Record.begin() + 1, Record.end());
1303 
1304   unsigned NewKind = TheModule.getMDKindID(Name.str());
1305   if (!MDKindMap.insert(std::make_pair(Kind, NewKind)).second)
1306     return error("Conflicting METADATA_KIND records");
1307   return Error::success();
1308 }
1309 
1310 /// Parse the metadata kinds out of the METADATA_KIND_BLOCK.
1311 Error MetadataLoader::MetadataLoaderImpl::parseMetadataKinds() {
1312   if (Stream.EnterSubBlock(bitc::METADATA_KIND_BLOCK_ID))
1313     return error("Invalid record");
1314 
1315   SmallVector<uint64_t, 64> Record;
1316 
1317   // Read all the records.
1318   while (true) {
1319     BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
1320 
1321     switch (Entry.Kind) {
1322     case BitstreamEntry::SubBlock: // Handled for us already.
1323     case BitstreamEntry::Error:
1324       return error("Malformed block");
1325     case BitstreamEntry::EndBlock:
1326       return Error::success();
1327     case BitstreamEntry::Record:
1328       // The interesting case.
1329       break;
1330     }
1331 
1332     // Read a record.
1333     Record.clear();
1334     unsigned Code = Stream.readRecord(Entry.ID, Record);
1335     switch (Code) {
1336     default: // Default behavior: ignore.
1337       break;
1338     case bitc::METADATA_KIND: {
1339       if (Error Err = parseMetadataKindRecord(Record))
1340         return Err;
1341       break;
1342     }
1343     }
1344   }
1345 }
1346 
1347 MetadataLoader &MetadataLoader::operator=(MetadataLoader &&RHS) {
1348   Pimpl = std::move(RHS.Pimpl);
1349   return *this;
1350 }
1351 MetadataLoader::MetadataLoader(MetadataLoader &&RHS)
1352     : Pimpl(std::move(RHS.Pimpl)) {}
1353 
1354 MetadataLoader::~MetadataLoader() = default;
1355 MetadataLoader::MetadataLoader(BitstreamCursor &Stream, Module &TheModule,
1356                                BitcodeReaderValueList &ValueList,
1357                                bool IsImporting,
1358                                std::function<Type *(unsigned)> getTypeByID)
1359     : Pimpl(llvm::make_unique<MetadataLoaderImpl>(Stream, TheModule, ValueList,
1360                                                   getTypeByID, IsImporting)) {}
1361 
1362 Error MetadataLoader::parseMetadata(bool ModuleLevel) {
1363   return Pimpl->parseMetadata(ModuleLevel);
1364 }
1365 
1366 bool MetadataLoader::hasFwdRefs() const { return Pimpl->hasFwdRefs(); }
1367 
1368 /// Return the given metadata, creating a replaceable forward reference if
1369 /// necessary.
1370 Metadata *MetadataLoader::getMetadataFwdRef(unsigned Idx) {
1371   return Pimpl->getMetadataFwdRef(Idx);
1372 }
1373 
1374 MDNode *MetadataLoader::getMDNodeFwdRefOrNull(unsigned Idx) {
1375   return Pimpl->getMDNodeFwdRefOrNull(Idx);
1376 }
1377 
1378 DISubprogram *MetadataLoader::lookupSubprogramForFunction(Function *F) {
1379   return Pimpl->lookupSubprogramForFunction(F);
1380 }
1381 
1382 Error MetadataLoader::parseMetadataAttachment(
1383     Function &F, const SmallVectorImpl<Instruction *> &InstructionList) {
1384   return Pimpl->parseMetadataAttachment(F, InstructionList);
1385 }
1386 
1387 Error MetadataLoader::parseMetadataKinds() {
1388   return Pimpl->parseMetadataKinds();
1389 }
1390 
1391 void MetadataLoader::setStripTBAA(bool StripTBAA) {
1392   return Pimpl->setStripTBAA(StripTBAA);
1393 }
1394 
1395 bool MetadataLoader::isStrippingTBAA() { return Pimpl->isStrippingTBAA(); }
1396 
1397 unsigned MetadataLoader::size() const { return Pimpl->size(); }
1398 void MetadataLoader::shrinkTo(unsigned N) { return Pimpl->shrinkTo(N); }
1399