1 //===-- Verifier.cpp - Implement the Module Verifier -----------------------==//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines the function verifier interface, that can be used for some
11 // sanity checking of input to the system.
12 //
13 // Note that this does not provide full `Java style' security and verifications,
14 // instead it just tries to ensure that code is well-formed.
15 //
16 //  * Both of a binary operator's parameters are of the same type
17 //  * Verify that the indices of mem access instructions match other operands
18 //  * Verify that arithmetic and other things are only performed on first-class
19 //    types.  Verify that shifts & logicals only happen on integrals f.e.
20 //  * All of the constants in a switch statement are of the correct type
21 //  * The code is in valid SSA form
22 //  * It should be illegal to put a label into any other type (like a structure)
23 //    or to return one. [except constant arrays!]
24 //  * Only phi nodes can be self referential: 'add i32 %0, %0 ; <int>:0' is bad
25 //  * PHI nodes must have an entry for each predecessor, with no extras.
26 //  * PHI nodes must be the first thing in a basic block, all grouped together
27 //  * PHI nodes must have at least one entry
28 //  * All basic blocks should only end with terminator insts, not contain them
29 //  * The entry node to a function must not have predecessors
30 //  * All Instructions must be embedded into a basic block
31 //  * Functions cannot take a void-typed parameter
32 //  * Verify that a function's argument list agrees with it's declared type.
33 //  * It is illegal to specify a name for a void value.
34 //  * It is illegal to have a internal global value with no initializer
35 //  * It is illegal to have a ret instruction that returns a value that does not
36 //    agree with the function return value type.
37 //  * Function call argument types match the function prototype
38 //  * A landing pad is defined by a landingpad instruction, and can be jumped to
39 //    only by the unwind edge of an invoke instruction.
40 //  * A landingpad instruction must be the first non-PHI instruction in the
41 //    block.
42 //  * Landingpad instructions must be in a function with a personality function.
43 //  * All other things that are tested by asserts spread about the code...
44 //
45 //===----------------------------------------------------------------------===//
46 
47 #include "llvm/IR/Verifier.h"
48 #include "llvm/ADT/APFloat.h"
49 #include "llvm/ADT/APInt.h"
50 #include "llvm/ADT/ArrayRef.h"
51 #include "llvm/ADT/DenseMap.h"
52 #include "llvm/ADT/ilist.h"
53 #include "llvm/ADT/MapVector.h"
54 #include "llvm/ADT/Optional.h"
55 #include "llvm/ADT/STLExtras.h"
56 #include "llvm/ADT/SmallPtrSet.h"
57 #include "llvm/ADT/SmallSet.h"
58 #include "llvm/ADT/SmallVector.h"
59 #include "llvm/ADT/StringMap.h"
60 #include "llvm/ADT/StringRef.h"
61 #include "llvm/ADT/Twine.h"
62 #include "llvm/IR/Argument.h"
63 #include "llvm/IR/Attributes.h"
64 #include "llvm/IR/BasicBlock.h"
65 #include "llvm/IR/CFG.h"
66 #include "llvm/IR/CallSite.h"
67 #include "llvm/IR/CallingConv.h"
68 #include "llvm/IR/Comdat.h"
69 #include "llvm/IR/Constant.h"
70 #include "llvm/IR/ConstantRange.h"
71 #include "llvm/IR/Constants.h"
72 #include "llvm/IR/DataLayout.h"
73 #include "llvm/IR/DebugInfo.h"
74 #include "llvm/IR/DebugInfoMetadata.h"
75 #include "llvm/IR/DebugLoc.h"
76 #include "llvm/IR/DerivedTypes.h"
77 #include "llvm/IR/DiagnosticInfo.h"
78 #include "llvm/IR/Dominators.h"
79 #include "llvm/IR/Function.h"
80 #include "llvm/IR/GlobalAlias.h"
81 #include "llvm/IR/GlobalValue.h"
82 #include "llvm/IR/GlobalVariable.h"
83 #include "llvm/IR/InlineAsm.h"
84 #include "llvm/IR/InstrTypes.h"
85 #include "llvm/IR/Instruction.h"
86 #include "llvm/IR/Instructions.h"
87 #include "llvm/IR/InstVisitor.h"
88 #include "llvm/IR/IntrinsicInst.h"
89 #include "llvm/IR/Intrinsics.h"
90 #include "llvm/IR/LLVMContext.h"
91 #include "llvm/IR/Metadata.h"
92 #include "llvm/IR/Module.h"
93 #include "llvm/IR/ModuleSlotTracker.h"
94 #include "llvm/IR/PassManager.h"
95 #include "llvm/IR/Statepoint.h"
96 #include "llvm/IR/Type.h"
97 #include "llvm/IR/Use.h"
98 #include "llvm/IR/User.h"
99 #include "llvm/IR/Value.h"
100 #include "llvm/Pass.h"
101 #include "llvm/Support/AtomicOrdering.h"
102 #include "llvm/Support/Casting.h"
103 #include "llvm/Support/CommandLine.h"
104 #include "llvm/Support/Debug.h"
105 #include "llvm/Support/Dwarf.h"
106 #include "llvm/Support/ErrorHandling.h"
107 #include "llvm/Support/MathExtras.h"
108 #include "llvm/Support/raw_ostream.h"
109 #include <algorithm>
110 #include <cassert>
111 #include <cstdint>
112 #include <memory>
113 #include <string>
114 #include <utility>
115 
116 using namespace llvm;
117 
118 static cl::opt<bool> VerifyDebugInfo("verify-debug-info", cl::init(true));
119 
120 namespace llvm {
121 
122 struct VerifierSupport {
123   raw_ostream *OS;
124   const Module &M;
125   ModuleSlotTracker MST;
126   const DataLayout &DL;
127   LLVMContext &Context;
128 
129   /// Track the brokenness of the module while recursively visiting.
130   bool Broken = false;
131   /// Broken debug info can be "recovered" from by stripping the debug info.
132   bool BrokenDebugInfo = false;
133   /// Whether to treat broken debug info as an error.
134   bool TreatBrokenDebugInfoAsError = true;
135 
136   explicit VerifierSupport(raw_ostream *OS, const Module &M)
137       : OS(OS), M(M), MST(&M), DL(M.getDataLayout()), Context(M.getContext()) {}
138 
139 private:
140   void Write(const Module *M) {
141     *OS << "; ModuleID = '" << M->getModuleIdentifier() << "'\n";
142   }
143 
144   void Write(const Value *V) {
145     if (!V)
146       return;
147     if (isa<Instruction>(V)) {
148       V->print(*OS, MST);
149       *OS << '\n';
150     } else {
151       V->printAsOperand(*OS, true, MST);
152       *OS << '\n';
153     }
154   }
155 
156   void Write(ImmutableCallSite CS) {
157     Write(CS.getInstruction());
158   }
159 
160   void Write(const Metadata *MD) {
161     if (!MD)
162       return;
163     MD->print(*OS, MST, &M);
164     *OS << '\n';
165   }
166 
167   template <class T> void Write(const MDTupleTypedArrayWrapper<T> &MD) {
168     Write(MD.get());
169   }
170 
171   void Write(const NamedMDNode *NMD) {
172     if (!NMD)
173       return;
174     NMD->print(*OS, MST);
175     *OS << '\n';
176   }
177 
178   void Write(Type *T) {
179     if (!T)
180       return;
181     *OS << ' ' << *T;
182   }
183 
184   void Write(const Comdat *C) {
185     if (!C)
186       return;
187     *OS << *C;
188   }
189 
190   void Write(const APInt *AI) {
191     if (!AI)
192       return;
193     *OS << *AI << '\n';
194   }
195 
196   void Write(const unsigned i) { *OS << i << '\n'; }
197 
198   template <typename T> void Write(ArrayRef<T> Vs) {
199     for (const T &V : Vs)
200       Write(V);
201   }
202 
203   template <typename T1, typename... Ts>
204   void WriteTs(const T1 &V1, const Ts &... Vs) {
205     Write(V1);
206     WriteTs(Vs...);
207   }
208 
209   template <typename... Ts> void WriteTs() {}
210 
211 public:
212   /// \brief A check failed, so printout out the condition and the message.
213   ///
214   /// This provides a nice place to put a breakpoint if you want to see why
215   /// something is not correct.
216   void CheckFailed(const Twine &Message) {
217     if (OS)
218       *OS << Message << '\n';
219     Broken = true;
220   }
221 
222   /// \brief A check failed (with values to print).
223   ///
224   /// This calls the Message-only version so that the above is easier to set a
225   /// breakpoint on.
226   template <typename T1, typename... Ts>
227   void CheckFailed(const Twine &Message, const T1 &V1, const Ts &... Vs) {
228     CheckFailed(Message);
229     if (OS)
230       WriteTs(V1, Vs...);
231   }
232 
233   /// A debug info check failed.
234   void DebugInfoCheckFailed(const Twine &Message) {
235     if (OS)
236       *OS << Message << '\n';
237     Broken |= TreatBrokenDebugInfoAsError;
238     BrokenDebugInfo = true;
239   }
240 
241   /// A debug info check failed (with values to print).
242   template <typename T1, typename... Ts>
243   void DebugInfoCheckFailed(const Twine &Message, const T1 &V1,
244                             const Ts &... Vs) {
245     DebugInfoCheckFailed(Message);
246     if (OS)
247       WriteTs(V1, Vs...);
248   }
249 };
250 
251 } // namespace llvm
252 
253 namespace {
254 
255 class Verifier : public InstVisitor<Verifier>, VerifierSupport {
256   friend class InstVisitor<Verifier>;
257 
258   DominatorTree DT;
259 
260   /// \brief When verifying a basic block, keep track of all of the
261   /// instructions we have seen so far.
262   ///
263   /// This allows us to do efficient dominance checks for the case when an
264   /// instruction has an operand that is an instruction in the same block.
265   SmallPtrSet<Instruction *, 16> InstsInThisBlock;
266 
267   /// \brief Keep track of the metadata nodes that have been checked already.
268   SmallPtrSet<const Metadata *, 32> MDNodes;
269 
270   /// Keep track which DISubprogram is attached to which function.
271   DenseMap<const DISubprogram *, const Function *> DISubprogramAttachments;
272 
273   /// Track all DICompileUnits visited.
274   SmallPtrSet<const Metadata *, 2> CUVisited;
275 
276   /// \brief The result type for a landingpad.
277   Type *LandingPadResultTy;
278 
279   /// \brief Whether we've seen a call to @llvm.localescape in this function
280   /// already.
281   bool SawFrameEscape;
282 
283   /// Whether the current function has a DISubprogram attached to it.
284   bool HasDebugInfo = false;
285 
286   /// Stores the count of how many objects were passed to llvm.localescape for a
287   /// given function and the largest index passed to llvm.localrecover.
288   DenseMap<Function *, std::pair<unsigned, unsigned>> FrameEscapeInfo;
289 
290   // Maps catchswitches and cleanuppads that unwind to siblings to the
291   // terminators that indicate the unwind, used to detect cycles therein.
292   MapVector<Instruction *, TerminatorInst *> SiblingFuncletInfo;
293 
294   /// Cache of constants visited in search of ConstantExprs.
295   SmallPtrSet<const Constant *, 32> ConstantExprVisited;
296 
297   /// Cache of declarations of the llvm.experimental.deoptimize.<ty> intrinsic.
298   SmallVector<const Function *, 4> DeoptimizeDeclarations;
299 
300   // Verify that this GlobalValue is only used in this module.
301   // This map is used to avoid visiting uses twice. We can arrive at a user
302   // twice, if they have multiple operands. In particular for very large
303   // constant expressions, we can arrive at a particular user many times.
304   SmallPtrSet<const Value *, 32> GlobalValueVisited;
305 
306   // Keeps track of duplicate function argument debug info.
307   SmallVector<const DILocalVariable *, 16> DebugFnArgs;
308 
309   TBAAVerifier TBAAVerifyHelper;
310 
311   void checkAtomicMemAccessSize(Type *Ty, const Instruction *I);
312 
313 public:
314   explicit Verifier(raw_ostream *OS, bool ShouldTreatBrokenDebugInfoAsError,
315                     const Module &M)
316       : VerifierSupport(OS, M), LandingPadResultTy(nullptr),
317         SawFrameEscape(false), TBAAVerifyHelper(this) {
318     TreatBrokenDebugInfoAsError = ShouldTreatBrokenDebugInfoAsError;
319   }
320 
321   bool hasBrokenDebugInfo() const { return BrokenDebugInfo; }
322 
323   bool verify(const Function &F) {
324     assert(F.getParent() == &M &&
325            "An instance of this class only works with a specific module!");
326 
327     // First ensure the function is well-enough formed to compute dominance
328     // information, and directly compute a dominance tree. We don't rely on the
329     // pass manager to provide this as it isolates us from a potentially
330     // out-of-date dominator tree and makes it significantly more complex to run
331     // this code outside of a pass manager.
332     // FIXME: It's really gross that we have to cast away constness here.
333     if (!F.empty())
334       DT.recalculate(const_cast<Function &>(F));
335 
336     for (const BasicBlock &BB : F) {
337       if (!BB.empty() && BB.back().isTerminator())
338         continue;
339 
340       if (OS) {
341         *OS << "Basic Block in function '" << F.getName()
342             << "' does not have terminator!\n";
343         BB.printAsOperand(*OS, true, MST);
344         *OS << "\n";
345       }
346       return false;
347     }
348 
349     Broken = false;
350     // FIXME: We strip const here because the inst visitor strips const.
351     visit(const_cast<Function &>(F));
352     verifySiblingFuncletUnwinds();
353     InstsInThisBlock.clear();
354     DebugFnArgs.clear();
355     LandingPadResultTy = nullptr;
356     SawFrameEscape = false;
357     SiblingFuncletInfo.clear();
358 
359     return !Broken;
360   }
361 
362   /// Verify the module that this instance of \c Verifier was initialized with.
363   bool verify() {
364     Broken = false;
365 
366     // Collect all declarations of the llvm.experimental.deoptimize intrinsic.
367     for (const Function &F : M)
368       if (F.getIntrinsicID() == Intrinsic::experimental_deoptimize)
369         DeoptimizeDeclarations.push_back(&F);
370 
371     // Now that we've visited every function, verify that we never asked to
372     // recover a frame index that wasn't escaped.
373     verifyFrameRecoverIndices();
374     for (const GlobalVariable &GV : M.globals())
375       visitGlobalVariable(GV);
376 
377     for (const GlobalAlias &GA : M.aliases())
378       visitGlobalAlias(GA);
379 
380     for (const NamedMDNode &NMD : M.named_metadata())
381       visitNamedMDNode(NMD);
382 
383     for (const StringMapEntry<Comdat> &SMEC : M.getComdatSymbolTable())
384       visitComdat(SMEC.getValue());
385 
386     visitModuleFlags(M);
387     visitModuleIdents(M);
388 
389     verifyCompileUnits();
390 
391     verifyDeoptimizeCallingConvs();
392     DISubprogramAttachments.clear();
393     return !Broken;
394   }
395 
396 private:
397   // Verification methods...
398   void visitGlobalValue(const GlobalValue &GV);
399   void visitGlobalVariable(const GlobalVariable &GV);
400   void visitGlobalAlias(const GlobalAlias &GA);
401   void visitAliaseeSubExpr(const GlobalAlias &A, const Constant &C);
402   void visitAliaseeSubExpr(SmallPtrSetImpl<const GlobalAlias *> &Visited,
403                            const GlobalAlias &A, const Constant &C);
404   void visitNamedMDNode(const NamedMDNode &NMD);
405   void visitMDNode(const MDNode &MD);
406   void visitMetadataAsValue(const MetadataAsValue &MD, Function *F);
407   void visitValueAsMetadata(const ValueAsMetadata &MD, Function *F);
408   void visitComdat(const Comdat &C);
409   void visitModuleIdents(const Module &M);
410   void visitModuleFlags(const Module &M);
411   void visitModuleFlag(const MDNode *Op,
412                        DenseMap<const MDString *, const MDNode *> &SeenIDs,
413                        SmallVectorImpl<const MDNode *> &Requirements);
414   void visitFunction(const Function &F);
415   void visitBasicBlock(BasicBlock &BB);
416   void visitRangeMetadata(Instruction &I, MDNode *Range, Type *Ty);
417   void visitDereferenceableMetadata(Instruction &I, MDNode *MD);
418 
419   template <class Ty> bool isValidMetadataArray(const MDTuple &N);
420 #define HANDLE_SPECIALIZED_MDNODE_LEAF(CLASS) void visit##CLASS(const CLASS &N);
421 #include "llvm/IR/Metadata.def"
422   void visitDIScope(const DIScope &N);
423   void visitDIVariable(const DIVariable &N);
424   void visitDILexicalBlockBase(const DILexicalBlockBase &N);
425   void visitDITemplateParameter(const DITemplateParameter &N);
426 
427   void visitTemplateParams(const MDNode &N, const Metadata &RawParams);
428 
429   // InstVisitor overrides...
430   using InstVisitor<Verifier>::visit;
431   void visit(Instruction &I);
432 
433   void visitTruncInst(TruncInst &I);
434   void visitZExtInst(ZExtInst &I);
435   void visitSExtInst(SExtInst &I);
436   void visitFPTruncInst(FPTruncInst &I);
437   void visitFPExtInst(FPExtInst &I);
438   void visitFPToUIInst(FPToUIInst &I);
439   void visitFPToSIInst(FPToSIInst &I);
440   void visitUIToFPInst(UIToFPInst &I);
441   void visitSIToFPInst(SIToFPInst &I);
442   void visitIntToPtrInst(IntToPtrInst &I);
443   void visitPtrToIntInst(PtrToIntInst &I);
444   void visitBitCastInst(BitCastInst &I);
445   void visitAddrSpaceCastInst(AddrSpaceCastInst &I);
446   void visitPHINode(PHINode &PN);
447   void visitBinaryOperator(BinaryOperator &B);
448   void visitICmpInst(ICmpInst &IC);
449   void visitFCmpInst(FCmpInst &FC);
450   void visitExtractElementInst(ExtractElementInst &EI);
451   void visitInsertElementInst(InsertElementInst &EI);
452   void visitShuffleVectorInst(ShuffleVectorInst &EI);
453   void visitVAArgInst(VAArgInst &VAA) { visitInstruction(VAA); }
454   void visitCallInst(CallInst &CI);
455   void visitInvokeInst(InvokeInst &II);
456   void visitGetElementPtrInst(GetElementPtrInst &GEP);
457   void visitLoadInst(LoadInst &LI);
458   void visitStoreInst(StoreInst &SI);
459   void verifyDominatesUse(Instruction &I, unsigned i);
460   void visitInstruction(Instruction &I);
461   void visitTerminatorInst(TerminatorInst &I);
462   void visitBranchInst(BranchInst &BI);
463   void visitReturnInst(ReturnInst &RI);
464   void visitSwitchInst(SwitchInst &SI);
465   void visitIndirectBrInst(IndirectBrInst &BI);
466   void visitSelectInst(SelectInst &SI);
467   void visitUserOp1(Instruction &I);
468   void visitUserOp2(Instruction &I) { visitUserOp1(I); }
469   void visitIntrinsicCallSite(Intrinsic::ID ID, CallSite CS);
470   void visitConstrainedFPIntrinsic(ConstrainedFPIntrinsic &FPI);
471   template <class DbgIntrinsicTy>
472   void visitDbgIntrinsic(StringRef Kind, DbgIntrinsicTy &DII);
473   void visitAtomicCmpXchgInst(AtomicCmpXchgInst &CXI);
474   void visitAtomicRMWInst(AtomicRMWInst &RMWI);
475   void visitFenceInst(FenceInst &FI);
476   void visitAllocaInst(AllocaInst &AI);
477   void visitExtractValueInst(ExtractValueInst &EVI);
478   void visitInsertValueInst(InsertValueInst &IVI);
479   void visitEHPadPredecessors(Instruction &I);
480   void visitLandingPadInst(LandingPadInst &LPI);
481   void visitResumeInst(ResumeInst &RI);
482   void visitCatchPadInst(CatchPadInst &CPI);
483   void visitCatchReturnInst(CatchReturnInst &CatchReturn);
484   void visitCleanupPadInst(CleanupPadInst &CPI);
485   void visitFuncletPadInst(FuncletPadInst &FPI);
486   void visitCatchSwitchInst(CatchSwitchInst &CatchSwitch);
487   void visitCleanupReturnInst(CleanupReturnInst &CRI);
488 
489   void verifyCallSite(CallSite CS);
490   void verifySwiftErrorCallSite(CallSite CS, const Value *SwiftErrorVal);
491   void verifySwiftErrorValue(const Value *SwiftErrorVal);
492   void verifyMustTailCall(CallInst &CI);
493   bool performTypeCheck(Intrinsic::ID ID, Function *F, Type *Ty, int VT,
494                         unsigned ArgNo, std::string &Suffix);
495   bool verifyAttributeCount(AttributeList Attrs, unsigned Params);
496   void verifyAttributeTypes(AttributeSet Attrs, bool IsFunction,
497                             const Value *V);
498   void verifyParameterAttrs(AttributeSet Attrs, Type *Ty, const Value *V);
499   void verifyFunctionAttrs(FunctionType *FT, AttributeList Attrs,
500                            const Value *V);
501   void verifyFunctionMetadata(ArrayRef<std::pair<unsigned, MDNode *>> MDs);
502 
503   void visitConstantExprsRecursively(const Constant *EntryC);
504   void visitConstantExpr(const ConstantExpr *CE);
505   void verifyStatepoint(ImmutableCallSite CS);
506   void verifyFrameRecoverIndices();
507   void verifySiblingFuncletUnwinds();
508 
509   void verifyFragmentExpression(const DbgInfoIntrinsic &I);
510   void verifyFnArgs(const DbgInfoIntrinsic &I);
511 
512   /// Module-level debug info verification...
513   void verifyCompileUnits();
514 
515   /// Module-level verification that all @llvm.experimental.deoptimize
516   /// declarations share the same calling convention.
517   void verifyDeoptimizeCallingConvs();
518 };
519 
520 } // end anonymous namespace
521 
522 /// We know that cond should be true, if not print an error message.
523 #define Assert(C, ...) \
524   do { if (!(C)) { CheckFailed(__VA_ARGS__); return; } } while (false)
525 
526 /// We know that a debug info condition should be true, if not print
527 /// an error message.
528 #define AssertDI(C, ...) \
529   do { if (!(C)) { DebugInfoCheckFailed(__VA_ARGS__); return; } } while (false)
530 
531 void Verifier::visit(Instruction &I) {
532   for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
533     Assert(I.getOperand(i) != nullptr, "Operand is null", &I);
534   InstVisitor<Verifier>::visit(I);
535 }
536 
537 // Helper to recursively iterate over indirect users. By
538 // returning false, the callback can ask to stop recursing
539 // further.
540 static void forEachUser(const Value *User,
541                         SmallPtrSet<const Value *, 32> &Visited,
542                         llvm::function_ref<bool(const Value *)> Callback) {
543   if (!Visited.insert(User).second)
544     return;
545   for (const Value *TheNextUser : User->materialized_users())
546     if (Callback(TheNextUser))
547       forEachUser(TheNextUser, Visited, Callback);
548 }
549 
550 void Verifier::visitGlobalValue(const GlobalValue &GV) {
551   Assert(!GV.isDeclaration() || GV.hasValidDeclarationLinkage(),
552          "Global is external, but doesn't have external or weak linkage!", &GV);
553 
554   Assert(GV.getAlignment() <= Value::MaximumAlignment,
555          "huge alignment values are unsupported", &GV);
556   Assert(!GV.hasAppendingLinkage() || isa<GlobalVariable>(GV),
557          "Only global variables can have appending linkage!", &GV);
558 
559   if (GV.hasAppendingLinkage()) {
560     const GlobalVariable *GVar = dyn_cast<GlobalVariable>(&GV);
561     Assert(GVar && GVar->getValueType()->isArrayTy(),
562            "Only global arrays can have appending linkage!", GVar);
563   }
564 
565   if (GV.isDeclarationForLinker())
566     Assert(!GV.hasComdat(), "Declaration may not be in a Comdat!", &GV);
567 
568   forEachUser(&GV, GlobalValueVisited, [&](const Value *V) -> bool {
569     if (const Instruction *I = dyn_cast<Instruction>(V)) {
570       if (!I->getParent() || !I->getParent()->getParent())
571         CheckFailed("Global is referenced by parentless instruction!", &GV, &M,
572                     I);
573       else if (I->getParent()->getParent()->getParent() != &M)
574         CheckFailed("Global is referenced in a different module!", &GV, &M, I,
575                     I->getParent()->getParent(),
576                     I->getParent()->getParent()->getParent());
577       return false;
578     } else if (const Function *F = dyn_cast<Function>(V)) {
579       if (F->getParent() != &M)
580         CheckFailed("Global is used by function in a different module", &GV, &M,
581                     F, F->getParent());
582       return false;
583     }
584     return true;
585   });
586 }
587 
588 void Verifier::visitGlobalVariable(const GlobalVariable &GV) {
589   if (GV.hasInitializer()) {
590     Assert(GV.getInitializer()->getType() == GV.getValueType(),
591            "Global variable initializer type does not match global "
592            "variable type!",
593            &GV);
594     // If the global has common linkage, it must have a zero initializer and
595     // cannot be constant.
596     if (GV.hasCommonLinkage()) {
597       Assert(GV.getInitializer()->isNullValue(),
598              "'common' global must have a zero initializer!", &GV);
599       Assert(!GV.isConstant(), "'common' global may not be marked constant!",
600              &GV);
601       Assert(!GV.hasComdat(), "'common' global may not be in a Comdat!", &GV);
602     }
603   }
604 
605   if (GV.hasName() && (GV.getName() == "llvm.global_ctors" ||
606                        GV.getName() == "llvm.global_dtors")) {
607     Assert(!GV.hasInitializer() || GV.hasAppendingLinkage(),
608            "invalid linkage for intrinsic global variable", &GV);
609     // Don't worry about emitting an error for it not being an array,
610     // visitGlobalValue will complain on appending non-array.
611     if (ArrayType *ATy = dyn_cast<ArrayType>(GV.getValueType())) {
612       StructType *STy = dyn_cast<StructType>(ATy->getElementType());
613       PointerType *FuncPtrTy =
614           FunctionType::get(Type::getVoidTy(Context), false)->getPointerTo();
615       // FIXME: Reject the 2-field form in LLVM 4.0.
616       Assert(STy &&
617                  (STy->getNumElements() == 2 || STy->getNumElements() == 3) &&
618                  STy->getTypeAtIndex(0u)->isIntegerTy(32) &&
619                  STy->getTypeAtIndex(1) == FuncPtrTy,
620              "wrong type for intrinsic global variable", &GV);
621       if (STy->getNumElements() == 3) {
622         Type *ETy = STy->getTypeAtIndex(2);
623         Assert(ETy->isPointerTy() &&
624                    cast<PointerType>(ETy)->getElementType()->isIntegerTy(8),
625                "wrong type for intrinsic global variable", &GV);
626       }
627     }
628   }
629 
630   if (GV.hasName() && (GV.getName() == "llvm.used" ||
631                        GV.getName() == "llvm.compiler.used")) {
632     Assert(!GV.hasInitializer() || GV.hasAppendingLinkage(),
633            "invalid linkage for intrinsic global variable", &GV);
634     Type *GVType = GV.getValueType();
635     if (ArrayType *ATy = dyn_cast<ArrayType>(GVType)) {
636       PointerType *PTy = dyn_cast<PointerType>(ATy->getElementType());
637       Assert(PTy, "wrong type for intrinsic global variable", &GV);
638       if (GV.hasInitializer()) {
639         const Constant *Init = GV.getInitializer();
640         const ConstantArray *InitArray = dyn_cast<ConstantArray>(Init);
641         Assert(InitArray, "wrong initalizer for intrinsic global variable",
642                Init);
643         for (Value *Op : InitArray->operands()) {
644           Value *V = Op->stripPointerCastsNoFollowAliases();
645           Assert(isa<GlobalVariable>(V) || isa<Function>(V) ||
646                      isa<GlobalAlias>(V),
647                  "invalid llvm.used member", V);
648           Assert(V->hasName(), "members of llvm.used must be named", V);
649         }
650       }
651     }
652   }
653 
654   Assert(!GV.hasDLLImportStorageClass() ||
655              (GV.isDeclaration() && GV.hasExternalLinkage()) ||
656              GV.hasAvailableExternallyLinkage(),
657          "Global is marked as dllimport, but not external", &GV);
658 
659   // Visit any debug info attachments.
660   SmallVector<MDNode *, 1> MDs;
661   GV.getMetadata(LLVMContext::MD_dbg, MDs);
662   for (auto *MD : MDs) {
663     if (auto *GVE = dyn_cast<DIGlobalVariableExpression>(MD))
664       visitDIGlobalVariableExpression(*GVE);
665     else
666       AssertDI(false, "!dbg attachment of global variable must be a "
667                       "DIGlobalVariableExpression");
668   }
669 
670   if (!GV.hasInitializer()) {
671     visitGlobalValue(GV);
672     return;
673   }
674 
675   // Walk any aggregate initializers looking for bitcasts between address spaces
676   visitConstantExprsRecursively(GV.getInitializer());
677 
678   visitGlobalValue(GV);
679 }
680 
681 void Verifier::visitAliaseeSubExpr(const GlobalAlias &GA, const Constant &C) {
682   SmallPtrSet<const GlobalAlias*, 4> Visited;
683   Visited.insert(&GA);
684   visitAliaseeSubExpr(Visited, GA, C);
685 }
686 
687 void Verifier::visitAliaseeSubExpr(SmallPtrSetImpl<const GlobalAlias*> &Visited,
688                                    const GlobalAlias &GA, const Constant &C) {
689   if (const auto *GV = dyn_cast<GlobalValue>(&C)) {
690     Assert(!GV->isDeclarationForLinker(), "Alias must point to a definition",
691            &GA);
692 
693     if (const auto *GA2 = dyn_cast<GlobalAlias>(GV)) {
694       Assert(Visited.insert(GA2).second, "Aliases cannot form a cycle", &GA);
695 
696       Assert(!GA2->isInterposable(), "Alias cannot point to an interposable alias",
697              &GA);
698     } else {
699       // Only continue verifying subexpressions of GlobalAliases.
700       // Do not recurse into global initializers.
701       return;
702     }
703   }
704 
705   if (const auto *CE = dyn_cast<ConstantExpr>(&C))
706     visitConstantExprsRecursively(CE);
707 
708   for (const Use &U : C.operands()) {
709     Value *V = &*U;
710     if (const auto *GA2 = dyn_cast<GlobalAlias>(V))
711       visitAliaseeSubExpr(Visited, GA, *GA2->getAliasee());
712     else if (const auto *C2 = dyn_cast<Constant>(V))
713       visitAliaseeSubExpr(Visited, GA, *C2);
714   }
715 }
716 
717 void Verifier::visitGlobalAlias(const GlobalAlias &GA) {
718   Assert(GlobalAlias::isValidLinkage(GA.getLinkage()),
719          "Alias should have private, internal, linkonce, weak, linkonce_odr, "
720          "weak_odr, or external linkage!",
721          &GA);
722   const Constant *Aliasee = GA.getAliasee();
723   Assert(Aliasee, "Aliasee cannot be NULL!", &GA);
724   Assert(GA.getType() == Aliasee->getType(),
725          "Alias and aliasee types should match!", &GA);
726 
727   Assert(isa<GlobalValue>(Aliasee) || isa<ConstantExpr>(Aliasee),
728          "Aliasee should be either GlobalValue or ConstantExpr", &GA);
729 
730   visitAliaseeSubExpr(GA, *Aliasee);
731 
732   visitGlobalValue(GA);
733 }
734 
735 void Verifier::visitNamedMDNode(const NamedMDNode &NMD) {
736   // There used to be various other llvm.dbg.* nodes, but we don't support
737   // upgrading them and we want to reserve the namespace for future uses.
738   if (NMD.getName().startswith("llvm.dbg."))
739     AssertDI(NMD.getName() == "llvm.dbg.cu",
740              "unrecognized named metadata node in the llvm.dbg namespace",
741              &NMD);
742   for (const MDNode *MD : NMD.operands()) {
743     if (NMD.getName() == "llvm.dbg.cu")
744       AssertDI(MD && isa<DICompileUnit>(MD), "invalid compile unit", &NMD, MD);
745 
746     if (!MD)
747       continue;
748 
749     visitMDNode(*MD);
750   }
751 }
752 
753 void Verifier::visitMDNode(const MDNode &MD) {
754   // Only visit each node once.  Metadata can be mutually recursive, so this
755   // avoids infinite recursion here, as well as being an optimization.
756   if (!MDNodes.insert(&MD).second)
757     return;
758 
759   switch (MD.getMetadataID()) {
760   default:
761     llvm_unreachable("Invalid MDNode subclass");
762   case Metadata::MDTupleKind:
763     break;
764 #define HANDLE_SPECIALIZED_MDNODE_LEAF(CLASS)                                  \
765   case Metadata::CLASS##Kind:                                                  \
766     visit##CLASS(cast<CLASS>(MD));                                             \
767     break;
768 #include "llvm/IR/Metadata.def"
769   }
770 
771   for (const Metadata *Op : MD.operands()) {
772     if (!Op)
773       continue;
774     Assert(!isa<LocalAsMetadata>(Op), "Invalid operand for global metadata!",
775            &MD, Op);
776     if (auto *N = dyn_cast<MDNode>(Op)) {
777       visitMDNode(*N);
778       continue;
779     }
780     if (auto *V = dyn_cast<ValueAsMetadata>(Op)) {
781       visitValueAsMetadata(*V, nullptr);
782       continue;
783     }
784   }
785 
786   // Check these last, so we diagnose problems in operands first.
787   Assert(!MD.isTemporary(), "Expected no forward declarations!", &MD);
788   Assert(MD.isResolved(), "All nodes should be resolved!", &MD);
789 }
790 
791 void Verifier::visitValueAsMetadata(const ValueAsMetadata &MD, Function *F) {
792   Assert(MD.getValue(), "Expected valid value", &MD);
793   Assert(!MD.getValue()->getType()->isMetadataTy(),
794          "Unexpected metadata round-trip through values", &MD, MD.getValue());
795 
796   auto *L = dyn_cast<LocalAsMetadata>(&MD);
797   if (!L)
798     return;
799 
800   Assert(F, "function-local metadata used outside a function", L);
801 
802   // If this was an instruction, bb, or argument, verify that it is in the
803   // function that we expect.
804   Function *ActualF = nullptr;
805   if (Instruction *I = dyn_cast<Instruction>(L->getValue())) {
806     Assert(I->getParent(), "function-local metadata not in basic block", L, I);
807     ActualF = I->getParent()->getParent();
808   } else if (BasicBlock *BB = dyn_cast<BasicBlock>(L->getValue()))
809     ActualF = BB->getParent();
810   else if (Argument *A = dyn_cast<Argument>(L->getValue()))
811     ActualF = A->getParent();
812   assert(ActualF && "Unimplemented function local metadata case!");
813 
814   Assert(ActualF == F, "function-local metadata used in wrong function", L);
815 }
816 
817 void Verifier::visitMetadataAsValue(const MetadataAsValue &MDV, Function *F) {
818   Metadata *MD = MDV.getMetadata();
819   if (auto *N = dyn_cast<MDNode>(MD)) {
820     visitMDNode(*N);
821     return;
822   }
823 
824   // Only visit each node once.  Metadata can be mutually recursive, so this
825   // avoids infinite recursion here, as well as being an optimization.
826   if (!MDNodes.insert(MD).second)
827     return;
828 
829   if (auto *V = dyn_cast<ValueAsMetadata>(MD))
830     visitValueAsMetadata(*V, F);
831 }
832 
833 static bool isType(const Metadata *MD) { return !MD || isa<DIType>(MD); }
834 static bool isScope(const Metadata *MD) { return !MD || isa<DIScope>(MD); }
835 static bool isDINode(const Metadata *MD) { return !MD || isa<DINode>(MD); }
836 
837 void Verifier::visitDILocation(const DILocation &N) {
838   AssertDI(N.getRawScope() && isa<DILocalScope>(N.getRawScope()),
839            "location requires a valid scope", &N, N.getRawScope());
840   if (auto *IA = N.getRawInlinedAt())
841     AssertDI(isa<DILocation>(IA), "inlined-at should be a location", &N, IA);
842 }
843 
844 void Verifier::visitGenericDINode(const GenericDINode &N) {
845   AssertDI(N.getTag(), "invalid tag", &N);
846 }
847 
848 void Verifier::visitDIScope(const DIScope &N) {
849   if (auto *F = N.getRawFile())
850     AssertDI(isa<DIFile>(F), "invalid file", &N, F);
851 }
852 
853 void Verifier::visitDISubrange(const DISubrange &N) {
854   AssertDI(N.getTag() == dwarf::DW_TAG_subrange_type, "invalid tag", &N);
855   AssertDI(N.getCount() >= -1, "invalid subrange count", &N);
856 }
857 
858 void Verifier::visitDIEnumerator(const DIEnumerator &N) {
859   AssertDI(N.getTag() == dwarf::DW_TAG_enumerator, "invalid tag", &N);
860 }
861 
862 void Verifier::visitDIBasicType(const DIBasicType &N) {
863   AssertDI(N.getTag() == dwarf::DW_TAG_base_type ||
864                N.getTag() == dwarf::DW_TAG_unspecified_type,
865            "invalid tag", &N);
866 }
867 
868 void Verifier::visitDIDerivedType(const DIDerivedType &N) {
869   // Common scope checks.
870   visitDIScope(N);
871 
872   AssertDI(N.getTag() == dwarf::DW_TAG_typedef ||
873                N.getTag() == dwarf::DW_TAG_pointer_type ||
874                N.getTag() == dwarf::DW_TAG_ptr_to_member_type ||
875                N.getTag() == dwarf::DW_TAG_reference_type ||
876                N.getTag() == dwarf::DW_TAG_rvalue_reference_type ||
877                N.getTag() == dwarf::DW_TAG_const_type ||
878                N.getTag() == dwarf::DW_TAG_volatile_type ||
879                N.getTag() == dwarf::DW_TAG_restrict_type ||
880                N.getTag() == dwarf::DW_TAG_atomic_type ||
881                N.getTag() == dwarf::DW_TAG_member ||
882                N.getTag() == dwarf::DW_TAG_inheritance ||
883                N.getTag() == dwarf::DW_TAG_friend,
884            "invalid tag", &N);
885   if (N.getTag() == dwarf::DW_TAG_ptr_to_member_type) {
886     AssertDI(isType(N.getRawExtraData()), "invalid pointer to member type", &N,
887              N.getRawExtraData());
888   }
889 
890   AssertDI(isScope(N.getRawScope()), "invalid scope", &N, N.getRawScope());
891   AssertDI(isType(N.getRawBaseType()), "invalid base type", &N,
892            N.getRawBaseType());
893 
894   if (N.getDWARFAddressSpace()) {
895     AssertDI(N.getTag() == dwarf::DW_TAG_pointer_type ||
896                  N.getTag() == dwarf::DW_TAG_reference_type,
897              "DWARF address space only applies to pointer or reference types",
898              &N);
899   }
900 }
901 
902 static bool hasConflictingReferenceFlags(unsigned Flags) {
903   return (Flags & DINode::FlagLValueReference) &&
904          (Flags & DINode::FlagRValueReference);
905 }
906 
907 void Verifier::visitTemplateParams(const MDNode &N, const Metadata &RawParams) {
908   auto *Params = dyn_cast<MDTuple>(&RawParams);
909   AssertDI(Params, "invalid template params", &N, &RawParams);
910   for (Metadata *Op : Params->operands()) {
911     AssertDI(Op && isa<DITemplateParameter>(Op), "invalid template parameter",
912              &N, Params, Op);
913   }
914 }
915 
916 void Verifier::visitDICompositeType(const DICompositeType &N) {
917   // Common scope checks.
918   visitDIScope(N);
919 
920   AssertDI(N.getTag() == dwarf::DW_TAG_array_type ||
921                N.getTag() == dwarf::DW_TAG_structure_type ||
922                N.getTag() == dwarf::DW_TAG_union_type ||
923                N.getTag() == dwarf::DW_TAG_enumeration_type ||
924                N.getTag() == dwarf::DW_TAG_class_type,
925            "invalid tag", &N);
926 
927   AssertDI(isScope(N.getRawScope()), "invalid scope", &N, N.getRawScope());
928   AssertDI(isType(N.getRawBaseType()), "invalid base type", &N,
929            N.getRawBaseType());
930 
931   AssertDI(!N.getRawElements() || isa<MDTuple>(N.getRawElements()),
932            "invalid composite elements", &N, N.getRawElements());
933   AssertDI(isType(N.getRawVTableHolder()), "invalid vtable holder", &N,
934            N.getRawVTableHolder());
935   AssertDI(!hasConflictingReferenceFlags(N.getFlags()),
936            "invalid reference flags", &N);
937   if (auto *Params = N.getRawTemplateParams())
938     visitTemplateParams(N, *Params);
939 
940   if (N.getTag() == dwarf::DW_TAG_class_type ||
941       N.getTag() == dwarf::DW_TAG_union_type) {
942     AssertDI(N.getFile() && !N.getFile()->getFilename().empty(),
943              "class/union requires a filename", &N, N.getFile());
944   }
945 }
946 
947 void Verifier::visitDISubroutineType(const DISubroutineType &N) {
948   AssertDI(N.getTag() == dwarf::DW_TAG_subroutine_type, "invalid tag", &N);
949   if (auto *Types = N.getRawTypeArray()) {
950     AssertDI(isa<MDTuple>(Types), "invalid composite elements", &N, Types);
951     for (Metadata *Ty : N.getTypeArray()->operands()) {
952       AssertDI(isType(Ty), "invalid subroutine type ref", &N, Types, Ty);
953     }
954   }
955   AssertDI(!hasConflictingReferenceFlags(N.getFlags()),
956            "invalid reference flags", &N);
957 }
958 
959 void Verifier::visitDIFile(const DIFile &N) {
960   AssertDI(N.getTag() == dwarf::DW_TAG_file_type, "invalid tag", &N);
961   AssertDI((N.getChecksumKind() != DIFile::CSK_None ||
962             N.getChecksum().empty()), "invalid checksum kind", &N);
963 }
964 
965 void Verifier::visitDICompileUnit(const DICompileUnit &N) {
966   AssertDI(N.isDistinct(), "compile units must be distinct", &N);
967   AssertDI(N.getTag() == dwarf::DW_TAG_compile_unit, "invalid tag", &N);
968 
969   // Don't bother verifying the compilation directory or producer string
970   // as those could be empty.
971   AssertDI(N.getRawFile() && isa<DIFile>(N.getRawFile()), "invalid file", &N,
972            N.getRawFile());
973   AssertDI(!N.getFile()->getFilename().empty(), "invalid filename", &N,
974            N.getFile());
975 
976   AssertDI((N.getEmissionKind() <= DICompileUnit::LastEmissionKind),
977            "invalid emission kind", &N);
978 
979   if (auto *Array = N.getRawEnumTypes()) {
980     AssertDI(isa<MDTuple>(Array), "invalid enum list", &N, Array);
981     for (Metadata *Op : N.getEnumTypes()->operands()) {
982       auto *Enum = dyn_cast_or_null<DICompositeType>(Op);
983       AssertDI(Enum && Enum->getTag() == dwarf::DW_TAG_enumeration_type,
984                "invalid enum type", &N, N.getEnumTypes(), Op);
985     }
986   }
987   if (auto *Array = N.getRawRetainedTypes()) {
988     AssertDI(isa<MDTuple>(Array), "invalid retained type list", &N, Array);
989     for (Metadata *Op : N.getRetainedTypes()->operands()) {
990       AssertDI(Op && (isa<DIType>(Op) ||
991                       (isa<DISubprogram>(Op) &&
992                        !cast<DISubprogram>(Op)->isDefinition())),
993                "invalid retained type", &N, Op);
994     }
995   }
996   if (auto *Array = N.getRawGlobalVariables()) {
997     AssertDI(isa<MDTuple>(Array), "invalid global variable list", &N, Array);
998     for (Metadata *Op : N.getGlobalVariables()->operands()) {
999       AssertDI(Op && (isa<DIGlobalVariableExpression>(Op)),
1000                "invalid global variable ref", &N, Op);
1001     }
1002   }
1003   if (auto *Array = N.getRawImportedEntities()) {
1004     AssertDI(isa<MDTuple>(Array), "invalid imported entity list", &N, Array);
1005     for (Metadata *Op : N.getImportedEntities()->operands()) {
1006       AssertDI(Op && isa<DIImportedEntity>(Op), "invalid imported entity ref",
1007                &N, Op);
1008     }
1009   }
1010   if (auto *Array = N.getRawMacros()) {
1011     AssertDI(isa<MDTuple>(Array), "invalid macro list", &N, Array);
1012     for (Metadata *Op : N.getMacros()->operands()) {
1013       AssertDI(Op && isa<DIMacroNode>(Op), "invalid macro ref", &N, Op);
1014     }
1015   }
1016   CUVisited.insert(&N);
1017 }
1018 
1019 void Verifier::visitDISubprogram(const DISubprogram &N) {
1020   AssertDI(N.getTag() == dwarf::DW_TAG_subprogram, "invalid tag", &N);
1021   AssertDI(isScope(N.getRawScope()), "invalid scope", &N, N.getRawScope());
1022   if (auto *F = N.getRawFile())
1023     AssertDI(isa<DIFile>(F), "invalid file", &N, F);
1024   else
1025     AssertDI(N.getLine() == 0, "line specified with no file", &N, N.getLine());
1026   if (auto *T = N.getRawType())
1027     AssertDI(isa<DISubroutineType>(T), "invalid subroutine type", &N, T);
1028   AssertDI(isType(N.getRawContainingType()), "invalid containing type", &N,
1029            N.getRawContainingType());
1030   if (auto *Params = N.getRawTemplateParams())
1031     visitTemplateParams(N, *Params);
1032   if (auto *S = N.getRawDeclaration())
1033     AssertDI(isa<DISubprogram>(S) && !cast<DISubprogram>(S)->isDefinition(),
1034              "invalid subprogram declaration", &N, S);
1035   if (auto *RawVars = N.getRawVariables()) {
1036     auto *Vars = dyn_cast<MDTuple>(RawVars);
1037     AssertDI(Vars, "invalid variable list", &N, RawVars);
1038     for (Metadata *Op : Vars->operands()) {
1039       AssertDI(Op && isa<DILocalVariable>(Op), "invalid local variable", &N,
1040                Vars, Op);
1041     }
1042   }
1043   AssertDI(!hasConflictingReferenceFlags(N.getFlags()),
1044            "invalid reference flags", &N);
1045 
1046   auto *Unit = N.getRawUnit();
1047   if (N.isDefinition()) {
1048     // Subprogram definitions (not part of the type hierarchy).
1049     AssertDI(N.isDistinct(), "subprogram definitions must be distinct", &N);
1050     AssertDI(Unit, "subprogram definitions must have a compile unit", &N);
1051     AssertDI(isa<DICompileUnit>(Unit), "invalid unit type", &N, Unit);
1052   } else {
1053     // Subprogram declarations (part of the type hierarchy).
1054     AssertDI(!Unit, "subprogram declarations must not have a compile unit", &N);
1055   }
1056 
1057   if (auto *RawThrownTypes = N.getRawThrownTypes()) {
1058     auto *ThrownTypes = dyn_cast<MDTuple>(RawThrownTypes);
1059     AssertDI(ThrownTypes, "invalid thrown types list", &N, RawThrownTypes);
1060     for (Metadata *Op : ThrownTypes->operands())
1061       AssertDI(Op && isa<DIType>(Op), "invalid thrown type", &N, ThrownTypes,
1062                Op);
1063   }
1064 }
1065 
1066 void Verifier::visitDILexicalBlockBase(const DILexicalBlockBase &N) {
1067   AssertDI(N.getTag() == dwarf::DW_TAG_lexical_block, "invalid tag", &N);
1068   AssertDI(N.getRawScope() && isa<DILocalScope>(N.getRawScope()),
1069            "invalid local scope", &N, N.getRawScope());
1070 }
1071 
1072 void Verifier::visitDILexicalBlock(const DILexicalBlock &N) {
1073   visitDILexicalBlockBase(N);
1074 
1075   AssertDI(N.getLine() || !N.getColumn(),
1076            "cannot have column info without line info", &N);
1077 }
1078 
1079 void Verifier::visitDILexicalBlockFile(const DILexicalBlockFile &N) {
1080   visitDILexicalBlockBase(N);
1081 }
1082 
1083 void Verifier::visitDINamespace(const DINamespace &N) {
1084   AssertDI(N.getTag() == dwarf::DW_TAG_namespace, "invalid tag", &N);
1085   if (auto *S = N.getRawScope())
1086     AssertDI(isa<DIScope>(S), "invalid scope ref", &N, S);
1087 }
1088 
1089 void Verifier::visitDIMacro(const DIMacro &N) {
1090   AssertDI(N.getMacinfoType() == dwarf::DW_MACINFO_define ||
1091                N.getMacinfoType() == dwarf::DW_MACINFO_undef,
1092            "invalid macinfo type", &N);
1093   AssertDI(!N.getName().empty(), "anonymous macro", &N);
1094   if (!N.getValue().empty()) {
1095     assert(N.getValue().data()[0] != ' ' && "Macro value has a space prefix");
1096   }
1097 }
1098 
1099 void Verifier::visitDIMacroFile(const DIMacroFile &N) {
1100   AssertDI(N.getMacinfoType() == dwarf::DW_MACINFO_start_file,
1101            "invalid macinfo type", &N);
1102   if (auto *F = N.getRawFile())
1103     AssertDI(isa<DIFile>(F), "invalid file", &N, F);
1104 
1105   if (auto *Array = N.getRawElements()) {
1106     AssertDI(isa<MDTuple>(Array), "invalid macro list", &N, Array);
1107     for (Metadata *Op : N.getElements()->operands()) {
1108       AssertDI(Op && isa<DIMacroNode>(Op), "invalid macro ref", &N, Op);
1109     }
1110   }
1111 }
1112 
1113 void Verifier::visitDIModule(const DIModule &N) {
1114   AssertDI(N.getTag() == dwarf::DW_TAG_module, "invalid tag", &N);
1115   AssertDI(!N.getName().empty(), "anonymous module", &N);
1116 }
1117 
1118 void Verifier::visitDITemplateParameter(const DITemplateParameter &N) {
1119   AssertDI(isType(N.getRawType()), "invalid type ref", &N, N.getRawType());
1120 }
1121 
1122 void Verifier::visitDITemplateTypeParameter(const DITemplateTypeParameter &N) {
1123   visitDITemplateParameter(N);
1124 
1125   AssertDI(N.getTag() == dwarf::DW_TAG_template_type_parameter, "invalid tag",
1126            &N);
1127 }
1128 
1129 void Verifier::visitDITemplateValueParameter(
1130     const DITemplateValueParameter &N) {
1131   visitDITemplateParameter(N);
1132 
1133   AssertDI(N.getTag() == dwarf::DW_TAG_template_value_parameter ||
1134                N.getTag() == dwarf::DW_TAG_GNU_template_template_param ||
1135                N.getTag() == dwarf::DW_TAG_GNU_template_parameter_pack,
1136            "invalid tag", &N);
1137 }
1138 
1139 void Verifier::visitDIVariable(const DIVariable &N) {
1140   if (auto *S = N.getRawScope())
1141     AssertDI(isa<DIScope>(S), "invalid scope", &N, S);
1142   AssertDI(isType(N.getRawType()), "invalid type ref", &N, N.getRawType());
1143   if (auto *F = N.getRawFile())
1144     AssertDI(isa<DIFile>(F), "invalid file", &N, F);
1145 }
1146 
1147 void Verifier::visitDIGlobalVariable(const DIGlobalVariable &N) {
1148   // Checks common to all variables.
1149   visitDIVariable(N);
1150 
1151   AssertDI(N.getTag() == dwarf::DW_TAG_variable, "invalid tag", &N);
1152   AssertDI(!N.getName().empty(), "missing global variable name", &N);
1153   if (auto *Member = N.getRawStaticDataMemberDeclaration()) {
1154     AssertDI(isa<DIDerivedType>(Member),
1155              "invalid static data member declaration", &N, Member);
1156   }
1157 }
1158 
1159 void Verifier::visitDILocalVariable(const DILocalVariable &N) {
1160   // Checks common to all variables.
1161   visitDIVariable(N);
1162 
1163   AssertDI(N.getTag() == dwarf::DW_TAG_variable, "invalid tag", &N);
1164   AssertDI(N.getRawScope() && isa<DILocalScope>(N.getRawScope()),
1165            "local variable requires a valid scope", &N, N.getRawScope());
1166 }
1167 
1168 void Verifier::visitDIExpression(const DIExpression &N) {
1169   AssertDI(N.isValid(), "invalid expression", &N);
1170 }
1171 
1172 void Verifier::visitDIGlobalVariableExpression(
1173     const DIGlobalVariableExpression &GVE) {
1174   AssertDI(GVE.getVariable(), "missing variable");
1175   if (auto *Var = GVE.getVariable())
1176     visitDIGlobalVariable(*Var);
1177   if (auto *Expr = GVE.getExpression())
1178     visitDIExpression(*Expr);
1179 }
1180 
1181 void Verifier::visitDIObjCProperty(const DIObjCProperty &N) {
1182   AssertDI(N.getTag() == dwarf::DW_TAG_APPLE_property, "invalid tag", &N);
1183   if (auto *T = N.getRawType())
1184     AssertDI(isType(T), "invalid type ref", &N, T);
1185   if (auto *F = N.getRawFile())
1186     AssertDI(isa<DIFile>(F), "invalid file", &N, F);
1187 }
1188 
1189 void Verifier::visitDIImportedEntity(const DIImportedEntity &N) {
1190   AssertDI(N.getTag() == dwarf::DW_TAG_imported_module ||
1191                N.getTag() == dwarf::DW_TAG_imported_declaration,
1192            "invalid tag", &N);
1193   if (auto *S = N.getRawScope())
1194     AssertDI(isa<DIScope>(S), "invalid scope for imported entity", &N, S);
1195   AssertDI(isDINode(N.getRawEntity()), "invalid imported entity", &N,
1196            N.getRawEntity());
1197 }
1198 
1199 void Verifier::visitComdat(const Comdat &C) {
1200   // The Module is invalid if the GlobalValue has private linkage.  Entities
1201   // with private linkage don't have entries in the symbol table.
1202   if (const GlobalValue *GV = M.getNamedValue(C.getName()))
1203     Assert(!GV->hasPrivateLinkage(), "comdat global value has private linkage",
1204            GV);
1205 }
1206 
1207 void Verifier::visitModuleIdents(const Module &M) {
1208   const NamedMDNode *Idents = M.getNamedMetadata("llvm.ident");
1209   if (!Idents)
1210     return;
1211 
1212   // llvm.ident takes a list of metadata entry. Each entry has only one string.
1213   // Scan each llvm.ident entry and make sure that this requirement is met.
1214   for (const MDNode *N : Idents->operands()) {
1215     Assert(N->getNumOperands() == 1,
1216            "incorrect number of operands in llvm.ident metadata", N);
1217     Assert(dyn_cast_or_null<MDString>(N->getOperand(0)),
1218            ("invalid value for llvm.ident metadata entry operand"
1219             "(the operand should be a string)"),
1220            N->getOperand(0));
1221   }
1222 }
1223 
1224 void Verifier::visitModuleFlags(const Module &M) {
1225   const NamedMDNode *Flags = M.getModuleFlagsMetadata();
1226   if (!Flags) return;
1227 
1228   // Scan each flag, and track the flags and requirements.
1229   DenseMap<const MDString*, const MDNode*> SeenIDs;
1230   SmallVector<const MDNode*, 16> Requirements;
1231   for (const MDNode *MDN : Flags->operands())
1232     visitModuleFlag(MDN, SeenIDs, Requirements);
1233 
1234   // Validate that the requirements in the module are valid.
1235   for (const MDNode *Requirement : Requirements) {
1236     const MDString *Flag = cast<MDString>(Requirement->getOperand(0));
1237     const Metadata *ReqValue = Requirement->getOperand(1);
1238 
1239     const MDNode *Op = SeenIDs.lookup(Flag);
1240     if (!Op) {
1241       CheckFailed("invalid requirement on flag, flag is not present in module",
1242                   Flag);
1243       continue;
1244     }
1245 
1246     if (Op->getOperand(2) != ReqValue) {
1247       CheckFailed(("invalid requirement on flag, "
1248                    "flag does not have the required value"),
1249                   Flag);
1250       continue;
1251     }
1252   }
1253 }
1254 
1255 void
1256 Verifier::visitModuleFlag(const MDNode *Op,
1257                           DenseMap<const MDString *, const MDNode *> &SeenIDs,
1258                           SmallVectorImpl<const MDNode *> &Requirements) {
1259   // Each module flag should have three arguments, the merge behavior (a
1260   // constant int), the flag ID (an MDString), and the value.
1261   Assert(Op->getNumOperands() == 3,
1262          "incorrect number of operands in module flag", Op);
1263   Module::ModFlagBehavior MFB;
1264   if (!Module::isValidModFlagBehavior(Op->getOperand(0), MFB)) {
1265     Assert(
1266         mdconst::dyn_extract_or_null<ConstantInt>(Op->getOperand(0)),
1267         "invalid behavior operand in module flag (expected constant integer)",
1268         Op->getOperand(0));
1269     Assert(false,
1270            "invalid behavior operand in module flag (unexpected constant)",
1271            Op->getOperand(0));
1272   }
1273   MDString *ID = dyn_cast_or_null<MDString>(Op->getOperand(1));
1274   Assert(ID, "invalid ID operand in module flag (expected metadata string)",
1275          Op->getOperand(1));
1276 
1277   // Sanity check the values for behaviors with additional requirements.
1278   switch (MFB) {
1279   case Module::Error:
1280   case Module::Warning:
1281   case Module::Override:
1282     // These behavior types accept any value.
1283     break;
1284 
1285   case Module::Require: {
1286     // The value should itself be an MDNode with two operands, a flag ID (an
1287     // MDString), and a value.
1288     MDNode *Value = dyn_cast<MDNode>(Op->getOperand(2));
1289     Assert(Value && Value->getNumOperands() == 2,
1290            "invalid value for 'require' module flag (expected metadata pair)",
1291            Op->getOperand(2));
1292     Assert(isa<MDString>(Value->getOperand(0)),
1293            ("invalid value for 'require' module flag "
1294             "(first value operand should be a string)"),
1295            Value->getOperand(0));
1296 
1297     // Append it to the list of requirements, to check once all module flags are
1298     // scanned.
1299     Requirements.push_back(Value);
1300     break;
1301   }
1302 
1303   case Module::Append:
1304   case Module::AppendUnique: {
1305     // These behavior types require the operand be an MDNode.
1306     Assert(isa<MDNode>(Op->getOperand(2)),
1307            "invalid value for 'append'-type module flag "
1308            "(expected a metadata node)",
1309            Op->getOperand(2));
1310     break;
1311   }
1312   }
1313 
1314   // Unless this is a "requires" flag, check the ID is unique.
1315   if (MFB != Module::Require) {
1316     bool Inserted = SeenIDs.insert(std::make_pair(ID, Op)).second;
1317     Assert(Inserted,
1318            "module flag identifiers must be unique (or of 'require' type)", ID);
1319   }
1320 }
1321 
1322 /// Return true if this attribute kind only applies to functions.
1323 static bool isFuncOnlyAttr(Attribute::AttrKind Kind) {
1324   switch (Kind) {
1325   case Attribute::NoReturn:
1326   case Attribute::NoUnwind:
1327   case Attribute::NoInline:
1328   case Attribute::AlwaysInline:
1329   case Attribute::OptimizeForSize:
1330   case Attribute::StackProtect:
1331   case Attribute::StackProtectReq:
1332   case Attribute::StackProtectStrong:
1333   case Attribute::SafeStack:
1334   case Attribute::NoRedZone:
1335   case Attribute::NoImplicitFloat:
1336   case Attribute::Naked:
1337   case Attribute::InlineHint:
1338   case Attribute::StackAlignment:
1339   case Attribute::UWTable:
1340   case Attribute::NonLazyBind:
1341   case Attribute::ReturnsTwice:
1342   case Attribute::SanitizeAddress:
1343   case Attribute::SanitizeThread:
1344   case Attribute::SanitizeMemory:
1345   case Attribute::MinSize:
1346   case Attribute::NoDuplicate:
1347   case Attribute::Builtin:
1348   case Attribute::NoBuiltin:
1349   case Attribute::Cold:
1350   case Attribute::OptimizeNone:
1351   case Attribute::JumpTable:
1352   case Attribute::Convergent:
1353   case Attribute::ArgMemOnly:
1354   case Attribute::NoRecurse:
1355   case Attribute::InaccessibleMemOnly:
1356   case Attribute::InaccessibleMemOrArgMemOnly:
1357   case Attribute::AllocSize:
1358   case Attribute::Speculatable:
1359     return true;
1360   default:
1361     break;
1362   }
1363   return false;
1364 }
1365 
1366 /// Return true if this is a function attribute that can also appear on
1367 /// arguments.
1368 static bool isFuncOrArgAttr(Attribute::AttrKind Kind) {
1369   return Kind == Attribute::ReadOnly || Kind == Attribute::WriteOnly ||
1370          Kind == Attribute::ReadNone;
1371 }
1372 
1373 void Verifier::verifyAttributeTypes(AttributeSet Attrs, bool IsFunction,
1374                                     const Value *V) {
1375   for (Attribute A : Attrs) {
1376     if (A.isStringAttribute())
1377       continue;
1378 
1379     if (isFuncOnlyAttr(A.getKindAsEnum())) {
1380       if (!IsFunction) {
1381         CheckFailed("Attribute '" + A.getAsString() +
1382                         "' only applies to functions!",
1383                     V);
1384         return;
1385       }
1386     } else if (IsFunction && !isFuncOrArgAttr(A.getKindAsEnum())) {
1387       CheckFailed("Attribute '" + A.getAsString() +
1388                       "' does not apply to functions!",
1389                   V);
1390       return;
1391     }
1392   }
1393 }
1394 
1395 // VerifyParameterAttrs - Check the given attributes for an argument or return
1396 // value of the specified type.  The value V is printed in error messages.
1397 void Verifier::verifyParameterAttrs(AttributeSet Attrs, Type *Ty,
1398                                     const Value *V) {
1399   if (!Attrs.hasAttributes())
1400     return;
1401 
1402   verifyAttributeTypes(Attrs, /*IsFunction=*/false, V);
1403 
1404   // Check for mutually incompatible attributes.  Only inreg is compatible with
1405   // sret.
1406   unsigned AttrCount = 0;
1407   AttrCount += Attrs.hasAttribute(Attribute::ByVal);
1408   AttrCount += Attrs.hasAttribute(Attribute::InAlloca);
1409   AttrCount += Attrs.hasAttribute(Attribute::StructRet) ||
1410                Attrs.hasAttribute(Attribute::InReg);
1411   AttrCount += Attrs.hasAttribute(Attribute::Nest);
1412   Assert(AttrCount <= 1, "Attributes 'byval', 'inalloca', 'inreg', 'nest', "
1413                          "and 'sret' are incompatible!",
1414          V);
1415 
1416   Assert(!(Attrs.hasAttribute(Attribute::InAlloca) &&
1417            Attrs.hasAttribute(Attribute::ReadOnly)),
1418          "Attributes "
1419          "'inalloca and readonly' are incompatible!",
1420          V);
1421 
1422   Assert(!(Attrs.hasAttribute(Attribute::StructRet) &&
1423            Attrs.hasAttribute(Attribute::Returned)),
1424          "Attributes "
1425          "'sret and returned' are incompatible!",
1426          V);
1427 
1428   Assert(!(Attrs.hasAttribute(Attribute::ZExt) &&
1429            Attrs.hasAttribute(Attribute::SExt)),
1430          "Attributes "
1431          "'zeroext and signext' are incompatible!",
1432          V);
1433 
1434   Assert(!(Attrs.hasAttribute(Attribute::ReadNone) &&
1435            Attrs.hasAttribute(Attribute::ReadOnly)),
1436          "Attributes "
1437          "'readnone and readonly' are incompatible!",
1438          V);
1439 
1440   Assert(!(Attrs.hasAttribute(Attribute::ReadNone) &&
1441            Attrs.hasAttribute(Attribute::WriteOnly)),
1442          "Attributes "
1443          "'readnone and writeonly' are incompatible!",
1444          V);
1445 
1446   Assert(!(Attrs.hasAttribute(Attribute::ReadOnly) &&
1447            Attrs.hasAttribute(Attribute::WriteOnly)),
1448          "Attributes "
1449          "'readonly and writeonly' are incompatible!",
1450          V);
1451 
1452   Assert(!(Attrs.hasAttribute(Attribute::NoInline) &&
1453            Attrs.hasAttribute(Attribute::AlwaysInline)),
1454          "Attributes "
1455          "'noinline and alwaysinline' are incompatible!",
1456          V);
1457 
1458   AttrBuilder IncompatibleAttrs = AttributeFuncs::typeIncompatible(Ty);
1459   Assert(!AttrBuilder(Attrs).overlaps(IncompatibleAttrs),
1460          "Wrong types for attribute: " +
1461              AttributeSet::get(Context, IncompatibleAttrs).getAsString(),
1462          V);
1463 
1464   if (PointerType *PTy = dyn_cast<PointerType>(Ty)) {
1465     SmallPtrSet<Type*, 4> Visited;
1466     if (!PTy->getElementType()->isSized(&Visited)) {
1467       Assert(!Attrs.hasAttribute(Attribute::ByVal) &&
1468                  !Attrs.hasAttribute(Attribute::InAlloca),
1469              "Attributes 'byval' and 'inalloca' do not support unsized types!",
1470              V);
1471     }
1472     if (!isa<PointerType>(PTy->getElementType()))
1473       Assert(!Attrs.hasAttribute(Attribute::SwiftError),
1474              "Attribute 'swifterror' only applies to parameters "
1475              "with pointer to pointer type!",
1476              V);
1477   } else {
1478     Assert(!Attrs.hasAttribute(Attribute::ByVal),
1479            "Attribute 'byval' only applies to parameters with pointer type!",
1480            V);
1481     Assert(!Attrs.hasAttribute(Attribute::SwiftError),
1482            "Attribute 'swifterror' only applies to parameters "
1483            "with pointer type!",
1484            V);
1485   }
1486 }
1487 
1488 // Check parameter attributes against a function type.
1489 // The value V is printed in error messages.
1490 void Verifier::verifyFunctionAttrs(FunctionType *FT, AttributeList Attrs,
1491                                    const Value *V) {
1492   if (Attrs.isEmpty())
1493     return;
1494 
1495   bool SawNest = false;
1496   bool SawReturned = false;
1497   bool SawSRet = false;
1498   bool SawSwiftSelf = false;
1499   bool SawSwiftError = false;
1500 
1501   // Verify return value attributes.
1502   AttributeSet RetAttrs = Attrs.getRetAttributes();
1503   Assert((!RetAttrs.hasAttribute(Attribute::ByVal) &&
1504           !RetAttrs.hasAttribute(Attribute::Nest) &&
1505           !RetAttrs.hasAttribute(Attribute::StructRet) &&
1506           !RetAttrs.hasAttribute(Attribute::NoCapture) &&
1507           !RetAttrs.hasAttribute(Attribute::Returned) &&
1508           !RetAttrs.hasAttribute(Attribute::InAlloca) &&
1509           !RetAttrs.hasAttribute(Attribute::SwiftSelf) &&
1510           !RetAttrs.hasAttribute(Attribute::SwiftError)),
1511          "Attributes 'byval', 'inalloca', 'nest', 'sret', 'nocapture', "
1512          "'returned', 'swiftself', and 'swifterror' do not apply to return "
1513          "values!",
1514          V);
1515   Assert((!RetAttrs.hasAttribute(Attribute::ReadOnly) &&
1516           !RetAttrs.hasAttribute(Attribute::WriteOnly) &&
1517           !RetAttrs.hasAttribute(Attribute::ReadNone)),
1518          "Attribute '" + RetAttrs.getAsString() +
1519              "' does not apply to function returns",
1520          V);
1521   verifyParameterAttrs(RetAttrs, FT->getReturnType(), V);
1522 
1523   // Verify parameter attributes.
1524   for (unsigned i = 0, e = FT->getNumParams(); i != e; ++i) {
1525     Type *Ty = FT->getParamType(i);
1526     AttributeSet ArgAttrs = Attrs.getParamAttributes(i);
1527 
1528     verifyParameterAttrs(ArgAttrs, Ty, V);
1529 
1530     if (ArgAttrs.hasAttribute(Attribute::Nest)) {
1531       Assert(!SawNest, "More than one parameter has attribute nest!", V);
1532       SawNest = true;
1533     }
1534 
1535     if (ArgAttrs.hasAttribute(Attribute::Returned)) {
1536       Assert(!SawReturned, "More than one parameter has attribute returned!",
1537              V);
1538       Assert(Ty->canLosslesslyBitCastTo(FT->getReturnType()),
1539              "Incompatible argument and return types for 'returned' attribute",
1540              V);
1541       SawReturned = true;
1542     }
1543 
1544     if (ArgAttrs.hasAttribute(Attribute::StructRet)) {
1545       Assert(!SawSRet, "Cannot have multiple 'sret' parameters!", V);
1546       Assert(i == 0 || i == 1,
1547              "Attribute 'sret' is not on first or second parameter!", V);
1548       SawSRet = true;
1549     }
1550 
1551     if (ArgAttrs.hasAttribute(Attribute::SwiftSelf)) {
1552       Assert(!SawSwiftSelf, "Cannot have multiple 'swiftself' parameters!", V);
1553       SawSwiftSelf = true;
1554     }
1555 
1556     if (ArgAttrs.hasAttribute(Attribute::SwiftError)) {
1557       Assert(!SawSwiftError, "Cannot have multiple 'swifterror' parameters!",
1558              V);
1559       SawSwiftError = true;
1560     }
1561 
1562     if (ArgAttrs.hasAttribute(Attribute::InAlloca)) {
1563       Assert(i == FT->getNumParams() - 1,
1564              "inalloca isn't on the last parameter!", V);
1565     }
1566   }
1567 
1568   if (!Attrs.hasAttributes(AttributeList::FunctionIndex))
1569     return;
1570 
1571   verifyAttributeTypes(Attrs.getFnAttributes(), /*IsFunction=*/true, V);
1572 
1573   Assert(!(Attrs.hasFnAttribute(Attribute::ReadNone) &&
1574            Attrs.hasFnAttribute(Attribute::ReadOnly)),
1575          "Attributes 'readnone and readonly' are incompatible!", V);
1576 
1577   Assert(!(Attrs.hasFnAttribute(Attribute::ReadNone) &&
1578            Attrs.hasFnAttribute(Attribute::WriteOnly)),
1579          "Attributes 'readnone and writeonly' are incompatible!", V);
1580 
1581   Assert(!(Attrs.hasFnAttribute(Attribute::ReadOnly) &&
1582            Attrs.hasFnAttribute(Attribute::WriteOnly)),
1583          "Attributes 'readonly and writeonly' are incompatible!", V);
1584 
1585   Assert(!(Attrs.hasFnAttribute(Attribute::ReadNone) &&
1586            Attrs.hasFnAttribute(Attribute::InaccessibleMemOrArgMemOnly)),
1587          "Attributes 'readnone and inaccessiblemem_or_argmemonly' are "
1588          "incompatible!",
1589          V);
1590 
1591   Assert(!(Attrs.hasFnAttribute(Attribute::ReadNone) &&
1592            Attrs.hasFnAttribute(Attribute::InaccessibleMemOnly)),
1593          "Attributes 'readnone and inaccessiblememonly' are incompatible!", V);
1594 
1595   Assert(!(Attrs.hasFnAttribute(Attribute::NoInline) &&
1596            Attrs.hasFnAttribute(Attribute::AlwaysInline)),
1597          "Attributes 'noinline and alwaysinline' are incompatible!", V);
1598 
1599   if (Attrs.hasFnAttribute(Attribute::OptimizeNone)) {
1600     Assert(Attrs.hasFnAttribute(Attribute::NoInline),
1601            "Attribute 'optnone' requires 'noinline'!", V);
1602 
1603     Assert(!Attrs.hasFnAttribute(Attribute::OptimizeForSize),
1604            "Attributes 'optsize and optnone' are incompatible!", V);
1605 
1606     Assert(!Attrs.hasFnAttribute(Attribute::MinSize),
1607            "Attributes 'minsize and optnone' are incompatible!", V);
1608   }
1609 
1610   if (Attrs.hasFnAttribute(Attribute::JumpTable)) {
1611     const GlobalValue *GV = cast<GlobalValue>(V);
1612     Assert(GV->hasGlobalUnnamedAddr(),
1613            "Attribute 'jumptable' requires 'unnamed_addr'", V);
1614   }
1615 
1616   if (Attrs.hasFnAttribute(Attribute::AllocSize)) {
1617     std::pair<unsigned, Optional<unsigned>> Args =
1618         Attrs.getAllocSizeArgs(AttributeList::FunctionIndex);
1619 
1620     auto CheckParam = [&](StringRef Name, unsigned ParamNo) {
1621       if (ParamNo >= FT->getNumParams()) {
1622         CheckFailed("'allocsize' " + Name + " argument is out of bounds", V);
1623         return false;
1624       }
1625 
1626       if (!FT->getParamType(ParamNo)->isIntegerTy()) {
1627         CheckFailed("'allocsize' " + Name +
1628                         " argument must refer to an integer parameter",
1629                     V);
1630         return false;
1631       }
1632 
1633       return true;
1634     };
1635 
1636     if (!CheckParam("element size", Args.first))
1637       return;
1638 
1639     if (Args.second && !CheckParam("number of elements", *Args.second))
1640       return;
1641   }
1642 }
1643 
1644 void Verifier::verifyFunctionMetadata(
1645     ArrayRef<std::pair<unsigned, MDNode *>> MDs) {
1646   for (const auto &Pair : MDs) {
1647     if (Pair.first == LLVMContext::MD_prof) {
1648       MDNode *MD = Pair.second;
1649       Assert(MD->getNumOperands() >= 2,
1650              "!prof annotations should have no less than 2 operands", MD);
1651 
1652       // Check first operand.
1653       Assert(MD->getOperand(0) != nullptr, "first operand should not be null",
1654              MD);
1655       Assert(isa<MDString>(MD->getOperand(0)),
1656              "expected string with name of the !prof annotation", MD);
1657       MDString *MDS = cast<MDString>(MD->getOperand(0));
1658       StringRef ProfName = MDS->getString();
1659       Assert(ProfName.equals("function_entry_count"),
1660              "first operand should be 'function_entry_count'", MD);
1661 
1662       // Check second operand.
1663       Assert(MD->getOperand(1) != nullptr, "second operand should not be null",
1664              MD);
1665       Assert(isa<ConstantAsMetadata>(MD->getOperand(1)),
1666              "expected integer argument to function_entry_count", MD);
1667     }
1668   }
1669 }
1670 
1671 void Verifier::visitConstantExprsRecursively(const Constant *EntryC) {
1672   if (!ConstantExprVisited.insert(EntryC).second)
1673     return;
1674 
1675   SmallVector<const Constant *, 16> Stack;
1676   Stack.push_back(EntryC);
1677 
1678   while (!Stack.empty()) {
1679     const Constant *C = Stack.pop_back_val();
1680 
1681     // Check this constant expression.
1682     if (const auto *CE = dyn_cast<ConstantExpr>(C))
1683       visitConstantExpr(CE);
1684 
1685     if (const auto *GV = dyn_cast<GlobalValue>(C)) {
1686       // Global Values get visited separately, but we do need to make sure
1687       // that the global value is in the correct module
1688       Assert(GV->getParent() == &M, "Referencing global in another module!",
1689              EntryC, &M, GV, GV->getParent());
1690       continue;
1691     }
1692 
1693     // Visit all sub-expressions.
1694     for (const Use &U : C->operands()) {
1695       const auto *OpC = dyn_cast<Constant>(U);
1696       if (!OpC)
1697         continue;
1698       if (!ConstantExprVisited.insert(OpC).second)
1699         continue;
1700       Stack.push_back(OpC);
1701     }
1702   }
1703 }
1704 
1705 void Verifier::visitConstantExpr(const ConstantExpr *CE) {
1706   if (CE->getOpcode() == Instruction::BitCast)
1707     Assert(CastInst::castIsValid(Instruction::BitCast, CE->getOperand(0),
1708                                  CE->getType()),
1709            "Invalid bitcast", CE);
1710 
1711   if (CE->getOpcode() == Instruction::IntToPtr ||
1712       CE->getOpcode() == Instruction::PtrToInt) {
1713     auto *PtrTy = CE->getOpcode() == Instruction::IntToPtr
1714                       ? CE->getType()
1715                       : CE->getOperand(0)->getType();
1716     StringRef Msg = CE->getOpcode() == Instruction::IntToPtr
1717                         ? "inttoptr not supported for non-integral pointers"
1718                         : "ptrtoint not supported for non-integral pointers";
1719     Assert(
1720         !DL.isNonIntegralPointerType(cast<PointerType>(PtrTy->getScalarType())),
1721         Msg);
1722   }
1723 }
1724 
1725 bool Verifier::verifyAttributeCount(AttributeList Attrs, unsigned Params) {
1726   if (Attrs.getNumSlots() == 0)
1727     return true;
1728 
1729   unsigned LastSlot = Attrs.getNumSlots() - 1;
1730   unsigned LastIndex = Attrs.getSlotIndex(LastSlot);
1731   if (LastIndex <= Params ||
1732       (LastIndex == AttributeList::FunctionIndex &&
1733        (LastSlot == 0 || Attrs.getSlotIndex(LastSlot - 1) <= Params)))
1734     return true;
1735 
1736   return false;
1737 }
1738 
1739 /// Verify that statepoint intrinsic is well formed.
1740 void Verifier::verifyStatepoint(ImmutableCallSite CS) {
1741   assert(CS.getCalledFunction() &&
1742          CS.getCalledFunction()->getIntrinsicID() ==
1743            Intrinsic::experimental_gc_statepoint);
1744 
1745   const Instruction &CI = *CS.getInstruction();
1746 
1747   Assert(!CS.doesNotAccessMemory() && !CS.onlyReadsMemory() &&
1748          !CS.onlyAccessesArgMemory(),
1749          "gc.statepoint must read and write all memory to preserve "
1750          "reordering restrictions required by safepoint semantics",
1751          &CI);
1752 
1753   const Value *IDV = CS.getArgument(0);
1754   Assert(isa<ConstantInt>(IDV), "gc.statepoint ID must be a constant integer",
1755          &CI);
1756 
1757   const Value *NumPatchBytesV = CS.getArgument(1);
1758   Assert(isa<ConstantInt>(NumPatchBytesV),
1759          "gc.statepoint number of patchable bytes must be a constant integer",
1760          &CI);
1761   const int64_t NumPatchBytes =
1762       cast<ConstantInt>(NumPatchBytesV)->getSExtValue();
1763   assert(isInt<32>(NumPatchBytes) && "NumPatchBytesV is an i32!");
1764   Assert(NumPatchBytes >= 0, "gc.statepoint number of patchable bytes must be "
1765                              "positive",
1766          &CI);
1767 
1768   const Value *Target = CS.getArgument(2);
1769   auto *PT = dyn_cast<PointerType>(Target->getType());
1770   Assert(PT && PT->getElementType()->isFunctionTy(),
1771          "gc.statepoint callee must be of function pointer type", &CI, Target);
1772   FunctionType *TargetFuncType = cast<FunctionType>(PT->getElementType());
1773 
1774   const Value *NumCallArgsV = CS.getArgument(3);
1775   Assert(isa<ConstantInt>(NumCallArgsV),
1776          "gc.statepoint number of arguments to underlying call "
1777          "must be constant integer",
1778          &CI);
1779   const int NumCallArgs = cast<ConstantInt>(NumCallArgsV)->getZExtValue();
1780   Assert(NumCallArgs >= 0,
1781          "gc.statepoint number of arguments to underlying call "
1782          "must be positive",
1783          &CI);
1784   const int NumParams = (int)TargetFuncType->getNumParams();
1785   if (TargetFuncType->isVarArg()) {
1786     Assert(NumCallArgs >= NumParams,
1787            "gc.statepoint mismatch in number of vararg call args", &CI);
1788 
1789     // TODO: Remove this limitation
1790     Assert(TargetFuncType->getReturnType()->isVoidTy(),
1791            "gc.statepoint doesn't support wrapping non-void "
1792            "vararg functions yet",
1793            &CI);
1794   } else
1795     Assert(NumCallArgs == NumParams,
1796            "gc.statepoint mismatch in number of call args", &CI);
1797 
1798   const Value *FlagsV = CS.getArgument(4);
1799   Assert(isa<ConstantInt>(FlagsV),
1800          "gc.statepoint flags must be constant integer", &CI);
1801   const uint64_t Flags = cast<ConstantInt>(FlagsV)->getZExtValue();
1802   Assert((Flags & ~(uint64_t)StatepointFlags::MaskAll) == 0,
1803          "unknown flag used in gc.statepoint flags argument", &CI);
1804 
1805   // Verify that the types of the call parameter arguments match
1806   // the type of the wrapped callee.
1807   for (int i = 0; i < NumParams; i++) {
1808     Type *ParamType = TargetFuncType->getParamType(i);
1809     Type *ArgType = CS.getArgument(5 + i)->getType();
1810     Assert(ArgType == ParamType,
1811            "gc.statepoint call argument does not match wrapped "
1812            "function type",
1813            &CI);
1814   }
1815 
1816   const int EndCallArgsInx = 4 + NumCallArgs;
1817 
1818   const Value *NumTransitionArgsV = CS.getArgument(EndCallArgsInx+1);
1819   Assert(isa<ConstantInt>(NumTransitionArgsV),
1820          "gc.statepoint number of transition arguments "
1821          "must be constant integer",
1822          &CI);
1823   const int NumTransitionArgs =
1824       cast<ConstantInt>(NumTransitionArgsV)->getZExtValue();
1825   Assert(NumTransitionArgs >= 0,
1826          "gc.statepoint number of transition arguments must be positive", &CI);
1827   const int EndTransitionArgsInx = EndCallArgsInx + 1 + NumTransitionArgs;
1828 
1829   const Value *NumDeoptArgsV = CS.getArgument(EndTransitionArgsInx+1);
1830   Assert(isa<ConstantInt>(NumDeoptArgsV),
1831          "gc.statepoint number of deoptimization arguments "
1832          "must be constant integer",
1833          &CI);
1834   const int NumDeoptArgs = cast<ConstantInt>(NumDeoptArgsV)->getZExtValue();
1835   Assert(NumDeoptArgs >= 0, "gc.statepoint number of deoptimization arguments "
1836                             "must be positive",
1837          &CI);
1838 
1839   const int ExpectedNumArgs =
1840       7 + NumCallArgs + NumTransitionArgs + NumDeoptArgs;
1841   Assert(ExpectedNumArgs <= (int)CS.arg_size(),
1842          "gc.statepoint too few arguments according to length fields", &CI);
1843 
1844   // Check that the only uses of this gc.statepoint are gc.result or
1845   // gc.relocate calls which are tied to this statepoint and thus part
1846   // of the same statepoint sequence
1847   for (const User *U : CI.users()) {
1848     const CallInst *Call = dyn_cast<const CallInst>(U);
1849     Assert(Call, "illegal use of statepoint token", &CI, U);
1850     if (!Call) continue;
1851     Assert(isa<GCRelocateInst>(Call) || isa<GCResultInst>(Call),
1852            "gc.result or gc.relocate are the only value uses "
1853            "of a gc.statepoint",
1854            &CI, U);
1855     if (isa<GCResultInst>(Call)) {
1856       Assert(Call->getArgOperand(0) == &CI,
1857              "gc.result connected to wrong gc.statepoint", &CI, Call);
1858     } else if (isa<GCRelocateInst>(Call)) {
1859       Assert(Call->getArgOperand(0) == &CI,
1860              "gc.relocate connected to wrong gc.statepoint", &CI, Call);
1861     }
1862   }
1863 
1864   // Note: It is legal for a single derived pointer to be listed multiple
1865   // times.  It's non-optimal, but it is legal.  It can also happen after
1866   // insertion if we strip a bitcast away.
1867   // Note: It is really tempting to check that each base is relocated and
1868   // that a derived pointer is never reused as a base pointer.  This turns
1869   // out to be problematic since optimizations run after safepoint insertion
1870   // can recognize equality properties that the insertion logic doesn't know
1871   // about.  See example statepoint.ll in the verifier subdirectory
1872 }
1873 
1874 void Verifier::verifyFrameRecoverIndices() {
1875   for (auto &Counts : FrameEscapeInfo) {
1876     Function *F = Counts.first;
1877     unsigned EscapedObjectCount = Counts.second.first;
1878     unsigned MaxRecoveredIndex = Counts.second.second;
1879     Assert(MaxRecoveredIndex <= EscapedObjectCount,
1880            "all indices passed to llvm.localrecover must be less than the "
1881            "number of arguments passed ot llvm.localescape in the parent "
1882            "function",
1883            F);
1884   }
1885 }
1886 
1887 static Instruction *getSuccPad(TerminatorInst *Terminator) {
1888   BasicBlock *UnwindDest;
1889   if (auto *II = dyn_cast<InvokeInst>(Terminator))
1890     UnwindDest = II->getUnwindDest();
1891   else if (auto *CSI = dyn_cast<CatchSwitchInst>(Terminator))
1892     UnwindDest = CSI->getUnwindDest();
1893   else
1894     UnwindDest = cast<CleanupReturnInst>(Terminator)->getUnwindDest();
1895   return UnwindDest->getFirstNonPHI();
1896 }
1897 
1898 void Verifier::verifySiblingFuncletUnwinds() {
1899   SmallPtrSet<Instruction *, 8> Visited;
1900   SmallPtrSet<Instruction *, 8> Active;
1901   for (const auto &Pair : SiblingFuncletInfo) {
1902     Instruction *PredPad = Pair.first;
1903     if (Visited.count(PredPad))
1904       continue;
1905     Active.insert(PredPad);
1906     TerminatorInst *Terminator = Pair.second;
1907     do {
1908       Instruction *SuccPad = getSuccPad(Terminator);
1909       if (Active.count(SuccPad)) {
1910         // Found a cycle; report error
1911         Instruction *CyclePad = SuccPad;
1912         SmallVector<Instruction *, 8> CycleNodes;
1913         do {
1914           CycleNodes.push_back(CyclePad);
1915           TerminatorInst *CycleTerminator = SiblingFuncletInfo[CyclePad];
1916           if (CycleTerminator != CyclePad)
1917             CycleNodes.push_back(CycleTerminator);
1918           CyclePad = getSuccPad(CycleTerminator);
1919         } while (CyclePad != SuccPad);
1920         Assert(false, "EH pads can't handle each other's exceptions",
1921                ArrayRef<Instruction *>(CycleNodes));
1922       }
1923       // Don't re-walk a node we've already checked
1924       if (!Visited.insert(SuccPad).second)
1925         break;
1926       // Walk to this successor if it has a map entry.
1927       PredPad = SuccPad;
1928       auto TermI = SiblingFuncletInfo.find(PredPad);
1929       if (TermI == SiblingFuncletInfo.end())
1930         break;
1931       Terminator = TermI->second;
1932       Active.insert(PredPad);
1933     } while (true);
1934     // Each node only has one successor, so we've walked all the active
1935     // nodes' successors.
1936     Active.clear();
1937   }
1938 }
1939 
1940 // visitFunction - Verify that a function is ok.
1941 //
1942 void Verifier::visitFunction(const Function &F) {
1943   visitGlobalValue(F);
1944 
1945   // Check function arguments.
1946   FunctionType *FT = F.getFunctionType();
1947   unsigned NumArgs = F.arg_size();
1948 
1949   Assert(&Context == &F.getContext(),
1950          "Function context does not match Module context!", &F);
1951 
1952   Assert(!F.hasCommonLinkage(), "Functions may not have common linkage", &F);
1953   Assert(FT->getNumParams() == NumArgs,
1954          "# formal arguments must match # of arguments for function type!", &F,
1955          FT);
1956   Assert(F.getReturnType()->isFirstClassType() ||
1957              F.getReturnType()->isVoidTy() || F.getReturnType()->isStructTy(),
1958          "Functions cannot return aggregate values!", &F);
1959 
1960   Assert(!F.hasStructRetAttr() || F.getReturnType()->isVoidTy(),
1961          "Invalid struct return type!", &F);
1962 
1963   AttributeList Attrs = F.getAttributes();
1964 
1965   Assert(verifyAttributeCount(Attrs, FT->getNumParams()),
1966          "Attribute after last parameter!", &F);
1967 
1968   // Check function attributes.
1969   verifyFunctionAttrs(FT, Attrs, &F);
1970 
1971   // On function declarations/definitions, we do not support the builtin
1972   // attribute. We do not check this in VerifyFunctionAttrs since that is
1973   // checking for Attributes that can/can not ever be on functions.
1974   Assert(!Attrs.hasFnAttribute(Attribute::Builtin),
1975          "Attribute 'builtin' can only be applied to a callsite.", &F);
1976 
1977   // Check that this function meets the restrictions on this calling convention.
1978   // Sometimes varargs is used for perfectly forwarding thunks, so some of these
1979   // restrictions can be lifted.
1980   switch (F.getCallingConv()) {
1981   default:
1982   case CallingConv::C:
1983     break;
1984   case CallingConv::AMDGPU_KERNEL:
1985   case CallingConv::SPIR_KERNEL:
1986     Assert(F.getReturnType()->isVoidTy(),
1987            "Calling convention requires void return type", &F);
1988     LLVM_FALLTHROUGH;
1989   case CallingConv::AMDGPU_VS:
1990   case CallingConv::AMDGPU_HS:
1991   case CallingConv::AMDGPU_GS:
1992   case CallingConv::AMDGPU_PS:
1993   case CallingConv::AMDGPU_CS:
1994     Assert(!F.hasStructRetAttr(),
1995            "Calling convention does not allow sret", &F);
1996     LLVM_FALLTHROUGH;
1997   case CallingConv::Fast:
1998   case CallingConv::Cold:
1999   case CallingConv::Intel_OCL_BI:
2000   case CallingConv::PTX_Kernel:
2001   case CallingConv::PTX_Device:
2002     Assert(!F.isVarArg(), "Calling convention does not support varargs or "
2003                           "perfect forwarding!",
2004            &F);
2005     break;
2006   }
2007 
2008   bool isLLVMdotName = F.getName().size() >= 5 &&
2009                        F.getName().substr(0, 5) == "llvm.";
2010 
2011   // Check that the argument values match the function type for this function...
2012   unsigned i = 0;
2013   for (const Argument &Arg : F.args()) {
2014     Assert(Arg.getType() == FT->getParamType(i),
2015            "Argument value does not match function argument type!", &Arg,
2016            FT->getParamType(i));
2017     Assert(Arg.getType()->isFirstClassType(),
2018            "Function arguments must have first-class types!", &Arg);
2019     if (!isLLVMdotName) {
2020       Assert(!Arg.getType()->isMetadataTy(),
2021              "Function takes metadata but isn't an intrinsic", &Arg, &F);
2022       Assert(!Arg.getType()->isTokenTy(),
2023              "Function takes token but isn't an intrinsic", &Arg, &F);
2024     }
2025 
2026     // Check that swifterror argument is only used by loads and stores.
2027     if (Attrs.hasParamAttribute(i, Attribute::SwiftError)) {
2028       verifySwiftErrorValue(&Arg);
2029     }
2030     ++i;
2031   }
2032 
2033   if (!isLLVMdotName)
2034     Assert(!F.getReturnType()->isTokenTy(),
2035            "Functions returns a token but isn't an intrinsic", &F);
2036 
2037   // Get the function metadata attachments.
2038   SmallVector<std::pair<unsigned, MDNode *>, 4> MDs;
2039   F.getAllMetadata(MDs);
2040   assert(F.hasMetadata() != MDs.empty() && "Bit out-of-sync");
2041   verifyFunctionMetadata(MDs);
2042 
2043   // Check validity of the personality function
2044   if (F.hasPersonalityFn()) {
2045     auto *Per = dyn_cast<Function>(F.getPersonalityFn()->stripPointerCasts());
2046     if (Per)
2047       Assert(Per->getParent() == F.getParent(),
2048              "Referencing personality function in another module!",
2049              &F, F.getParent(), Per, Per->getParent());
2050   }
2051 
2052   if (F.isMaterializable()) {
2053     // Function has a body somewhere we can't see.
2054     Assert(MDs.empty(), "unmaterialized function cannot have metadata", &F,
2055            MDs.empty() ? nullptr : MDs.front().second);
2056   } else if (F.isDeclaration()) {
2057     for (const auto &I : MDs) {
2058       AssertDI(I.first != LLVMContext::MD_dbg,
2059                "function declaration may not have a !dbg attachment", &F);
2060       Assert(I.first != LLVMContext::MD_prof,
2061              "function declaration may not have a !prof attachment", &F);
2062 
2063       // Verify the metadata itself.
2064       visitMDNode(*I.second);
2065     }
2066     Assert(!F.hasPersonalityFn(),
2067            "Function declaration shouldn't have a personality routine", &F);
2068   } else {
2069     // Verify that this function (which has a body) is not named "llvm.*".  It
2070     // is not legal to define intrinsics.
2071     Assert(!isLLVMdotName, "llvm intrinsics cannot be defined!", &F);
2072 
2073     // Check the entry node
2074     const BasicBlock *Entry = &F.getEntryBlock();
2075     Assert(pred_empty(Entry),
2076            "Entry block to function must not have predecessors!", Entry);
2077 
2078     // The address of the entry block cannot be taken, unless it is dead.
2079     if (Entry->hasAddressTaken()) {
2080       Assert(!BlockAddress::lookup(Entry)->isConstantUsed(),
2081              "blockaddress may not be used with the entry block!", Entry);
2082     }
2083 
2084     unsigned NumDebugAttachments = 0, NumProfAttachments = 0;
2085     // Visit metadata attachments.
2086     for (const auto &I : MDs) {
2087       // Verify that the attachment is legal.
2088       switch (I.first) {
2089       default:
2090         break;
2091       case LLVMContext::MD_dbg: {
2092         ++NumDebugAttachments;
2093         AssertDI(NumDebugAttachments == 1,
2094                  "function must have a single !dbg attachment", &F, I.second);
2095         AssertDI(isa<DISubprogram>(I.second),
2096                  "function !dbg attachment must be a subprogram", &F, I.second);
2097         auto *SP = cast<DISubprogram>(I.second);
2098         const Function *&AttachedTo = DISubprogramAttachments[SP];
2099         AssertDI(!AttachedTo || AttachedTo == &F,
2100                  "DISubprogram attached to more than one function", SP, &F);
2101         AttachedTo = &F;
2102         break;
2103       }
2104       case LLVMContext::MD_prof:
2105         ++NumProfAttachments;
2106         Assert(NumProfAttachments == 1,
2107                "function must have a single !prof attachment", &F, I.second);
2108         break;
2109       }
2110 
2111       // Verify the metadata itself.
2112       visitMDNode(*I.second);
2113     }
2114   }
2115 
2116   // If this function is actually an intrinsic, verify that it is only used in
2117   // direct call/invokes, never having its "address taken".
2118   // Only do this if the module is materialized, otherwise we don't have all the
2119   // uses.
2120   if (F.getIntrinsicID() && F.getParent()->isMaterialized()) {
2121     const User *U;
2122     if (F.hasAddressTaken(&U))
2123       Assert(false, "Invalid user of intrinsic instruction!", U);
2124   }
2125 
2126   Assert(!F.hasDLLImportStorageClass() ||
2127              (F.isDeclaration() && F.hasExternalLinkage()) ||
2128              F.hasAvailableExternallyLinkage(),
2129          "Function is marked as dllimport, but not external.", &F);
2130 
2131   auto *N = F.getSubprogram();
2132   HasDebugInfo = (N != nullptr);
2133   if (!HasDebugInfo)
2134     return;
2135 
2136   // Check that all !dbg attachments lead to back to N (or, at least, another
2137   // subprogram that describes the same function).
2138   //
2139   // FIXME: Check this incrementally while visiting !dbg attachments.
2140   // FIXME: Only check when N is the canonical subprogram for F.
2141   SmallPtrSet<const MDNode *, 32> Seen;
2142   for (auto &BB : F)
2143     for (auto &I : BB) {
2144       // Be careful about using DILocation here since we might be dealing with
2145       // broken code (this is the Verifier after all).
2146       DILocation *DL =
2147           dyn_cast_or_null<DILocation>(I.getDebugLoc().getAsMDNode());
2148       if (!DL)
2149         continue;
2150       if (!Seen.insert(DL).second)
2151         continue;
2152 
2153       DILocalScope *Scope = DL->getInlinedAtScope();
2154       if (Scope && !Seen.insert(Scope).second)
2155         continue;
2156 
2157       DISubprogram *SP = Scope ? Scope->getSubprogram() : nullptr;
2158 
2159       // Scope and SP could be the same MDNode and we don't want to skip
2160       // validation in that case
2161       if (SP && ((Scope != SP) && !Seen.insert(SP).second))
2162         continue;
2163 
2164       // FIXME: Once N is canonical, check "SP == &N".
2165       AssertDI(SP->describes(&F),
2166                "!dbg attachment points at wrong subprogram for function", N, &F,
2167                &I, DL, Scope, SP);
2168     }
2169 }
2170 
2171 // verifyBasicBlock - Verify that a basic block is well formed...
2172 //
2173 void Verifier::visitBasicBlock(BasicBlock &BB) {
2174   InstsInThisBlock.clear();
2175 
2176   // Ensure that basic blocks have terminators!
2177   Assert(BB.getTerminator(), "Basic Block does not have terminator!", &BB);
2178 
2179   // Check constraints that this basic block imposes on all of the PHI nodes in
2180   // it.
2181   if (isa<PHINode>(BB.front())) {
2182     SmallVector<BasicBlock*, 8> Preds(pred_begin(&BB), pred_end(&BB));
2183     SmallVector<std::pair<BasicBlock*, Value*>, 8> Values;
2184     std::sort(Preds.begin(), Preds.end());
2185     PHINode *PN;
2186     for (BasicBlock::iterator I = BB.begin(); (PN = dyn_cast<PHINode>(I));++I) {
2187       // Ensure that PHI nodes have at least one entry!
2188       Assert(PN->getNumIncomingValues() != 0,
2189              "PHI nodes must have at least one entry.  If the block is dead, "
2190              "the PHI should be removed!",
2191              PN);
2192       Assert(PN->getNumIncomingValues() == Preds.size(),
2193              "PHINode should have one entry for each predecessor of its "
2194              "parent basic block!",
2195              PN);
2196 
2197       // Get and sort all incoming values in the PHI node...
2198       Values.clear();
2199       Values.reserve(PN->getNumIncomingValues());
2200       for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
2201         Values.push_back(std::make_pair(PN->getIncomingBlock(i),
2202                                         PN->getIncomingValue(i)));
2203       std::sort(Values.begin(), Values.end());
2204 
2205       for (unsigned i = 0, e = Values.size(); i != e; ++i) {
2206         // Check to make sure that if there is more than one entry for a
2207         // particular basic block in this PHI node, that the incoming values are
2208         // all identical.
2209         //
2210         Assert(i == 0 || Values[i].first != Values[i - 1].first ||
2211                    Values[i].second == Values[i - 1].second,
2212                "PHI node has multiple entries for the same basic block with "
2213                "different incoming values!",
2214                PN, Values[i].first, Values[i].second, Values[i - 1].second);
2215 
2216         // Check to make sure that the predecessors and PHI node entries are
2217         // matched up.
2218         Assert(Values[i].first == Preds[i],
2219                "PHI node entries do not match predecessors!", PN,
2220                Values[i].first, Preds[i]);
2221       }
2222     }
2223   }
2224 
2225   // Check that all instructions have their parent pointers set up correctly.
2226   for (auto &I : BB)
2227   {
2228     Assert(I.getParent() == &BB, "Instruction has bogus parent pointer!");
2229   }
2230 }
2231 
2232 void Verifier::visitTerminatorInst(TerminatorInst &I) {
2233   // Ensure that terminators only exist at the end of the basic block.
2234   Assert(&I == I.getParent()->getTerminator(),
2235          "Terminator found in the middle of a basic block!", I.getParent());
2236   visitInstruction(I);
2237 }
2238 
2239 void Verifier::visitBranchInst(BranchInst &BI) {
2240   if (BI.isConditional()) {
2241     Assert(BI.getCondition()->getType()->isIntegerTy(1),
2242            "Branch condition is not 'i1' type!", &BI, BI.getCondition());
2243   }
2244   visitTerminatorInst(BI);
2245 }
2246 
2247 void Verifier::visitReturnInst(ReturnInst &RI) {
2248   Function *F = RI.getParent()->getParent();
2249   unsigned N = RI.getNumOperands();
2250   if (F->getReturnType()->isVoidTy())
2251     Assert(N == 0,
2252            "Found return instr that returns non-void in Function of void "
2253            "return type!",
2254            &RI, F->getReturnType());
2255   else
2256     Assert(N == 1 && F->getReturnType() == RI.getOperand(0)->getType(),
2257            "Function return type does not match operand "
2258            "type of return inst!",
2259            &RI, F->getReturnType());
2260 
2261   // Check to make sure that the return value has necessary properties for
2262   // terminators...
2263   visitTerminatorInst(RI);
2264 }
2265 
2266 void Verifier::visitSwitchInst(SwitchInst &SI) {
2267   // Check to make sure that all of the constants in the switch instruction
2268   // have the same type as the switched-on value.
2269   Type *SwitchTy = SI.getCondition()->getType();
2270   SmallPtrSet<ConstantInt*, 32> Constants;
2271   for (auto &Case : SI.cases()) {
2272     Assert(Case.getCaseValue()->getType() == SwitchTy,
2273            "Switch constants must all be same type as switch value!", &SI);
2274     Assert(Constants.insert(Case.getCaseValue()).second,
2275            "Duplicate integer as switch case", &SI, Case.getCaseValue());
2276   }
2277 
2278   visitTerminatorInst(SI);
2279 }
2280 
2281 void Verifier::visitIndirectBrInst(IndirectBrInst &BI) {
2282   Assert(BI.getAddress()->getType()->isPointerTy(),
2283          "Indirectbr operand must have pointer type!", &BI);
2284   for (unsigned i = 0, e = BI.getNumDestinations(); i != e; ++i)
2285     Assert(BI.getDestination(i)->getType()->isLabelTy(),
2286            "Indirectbr destinations must all have pointer type!", &BI);
2287 
2288   visitTerminatorInst(BI);
2289 }
2290 
2291 void Verifier::visitSelectInst(SelectInst &SI) {
2292   Assert(!SelectInst::areInvalidOperands(SI.getOperand(0), SI.getOperand(1),
2293                                          SI.getOperand(2)),
2294          "Invalid operands for select instruction!", &SI);
2295 
2296   Assert(SI.getTrueValue()->getType() == SI.getType(),
2297          "Select values must have same type as select instruction!", &SI);
2298   visitInstruction(SI);
2299 }
2300 
2301 /// visitUserOp1 - User defined operators shouldn't live beyond the lifetime of
2302 /// a pass, if any exist, it's an error.
2303 ///
2304 void Verifier::visitUserOp1(Instruction &I) {
2305   Assert(false, "User-defined operators should not live outside of a pass!", &I);
2306 }
2307 
2308 void Verifier::visitTruncInst(TruncInst &I) {
2309   // Get the source and destination types
2310   Type *SrcTy = I.getOperand(0)->getType();
2311   Type *DestTy = I.getType();
2312 
2313   // Get the size of the types in bits, we'll need this later
2314   unsigned SrcBitSize = SrcTy->getScalarSizeInBits();
2315   unsigned DestBitSize = DestTy->getScalarSizeInBits();
2316 
2317   Assert(SrcTy->isIntOrIntVectorTy(), "Trunc only operates on integer", &I);
2318   Assert(DestTy->isIntOrIntVectorTy(), "Trunc only produces integer", &I);
2319   Assert(SrcTy->isVectorTy() == DestTy->isVectorTy(),
2320          "trunc source and destination must both be a vector or neither", &I);
2321   Assert(SrcBitSize > DestBitSize, "DestTy too big for Trunc", &I);
2322 
2323   visitInstruction(I);
2324 }
2325 
2326 void Verifier::visitZExtInst(ZExtInst &I) {
2327   // Get the source and destination types
2328   Type *SrcTy = I.getOperand(0)->getType();
2329   Type *DestTy = I.getType();
2330 
2331   // Get the size of the types in bits, we'll need this later
2332   Assert(SrcTy->isIntOrIntVectorTy(), "ZExt only operates on integer", &I);
2333   Assert(DestTy->isIntOrIntVectorTy(), "ZExt only produces an integer", &I);
2334   Assert(SrcTy->isVectorTy() == DestTy->isVectorTy(),
2335          "zext source and destination must both be a vector or neither", &I);
2336   unsigned SrcBitSize = SrcTy->getScalarSizeInBits();
2337   unsigned DestBitSize = DestTy->getScalarSizeInBits();
2338 
2339   Assert(SrcBitSize < DestBitSize, "Type too small for ZExt", &I);
2340 
2341   visitInstruction(I);
2342 }
2343 
2344 void Verifier::visitSExtInst(SExtInst &I) {
2345   // Get the source and destination types
2346   Type *SrcTy = I.getOperand(0)->getType();
2347   Type *DestTy = I.getType();
2348 
2349   // Get the size of the types in bits, we'll need this later
2350   unsigned SrcBitSize = SrcTy->getScalarSizeInBits();
2351   unsigned DestBitSize = DestTy->getScalarSizeInBits();
2352 
2353   Assert(SrcTy->isIntOrIntVectorTy(), "SExt only operates on integer", &I);
2354   Assert(DestTy->isIntOrIntVectorTy(), "SExt only produces an integer", &I);
2355   Assert(SrcTy->isVectorTy() == DestTy->isVectorTy(),
2356          "sext source and destination must both be a vector or neither", &I);
2357   Assert(SrcBitSize < DestBitSize, "Type too small for SExt", &I);
2358 
2359   visitInstruction(I);
2360 }
2361 
2362 void Verifier::visitFPTruncInst(FPTruncInst &I) {
2363   // Get the source and destination types
2364   Type *SrcTy = I.getOperand(0)->getType();
2365   Type *DestTy = I.getType();
2366   // Get the size of the types in bits, we'll need this later
2367   unsigned SrcBitSize = SrcTy->getScalarSizeInBits();
2368   unsigned DestBitSize = DestTy->getScalarSizeInBits();
2369 
2370   Assert(SrcTy->isFPOrFPVectorTy(), "FPTrunc only operates on FP", &I);
2371   Assert(DestTy->isFPOrFPVectorTy(), "FPTrunc only produces an FP", &I);
2372   Assert(SrcTy->isVectorTy() == DestTy->isVectorTy(),
2373          "fptrunc source and destination must both be a vector or neither", &I);
2374   Assert(SrcBitSize > DestBitSize, "DestTy too big for FPTrunc", &I);
2375 
2376   visitInstruction(I);
2377 }
2378 
2379 void Verifier::visitFPExtInst(FPExtInst &I) {
2380   // Get the source and destination types
2381   Type *SrcTy = I.getOperand(0)->getType();
2382   Type *DestTy = I.getType();
2383 
2384   // Get the size of the types in bits, we'll need this later
2385   unsigned SrcBitSize = SrcTy->getScalarSizeInBits();
2386   unsigned DestBitSize = DestTy->getScalarSizeInBits();
2387 
2388   Assert(SrcTy->isFPOrFPVectorTy(), "FPExt only operates on FP", &I);
2389   Assert(DestTy->isFPOrFPVectorTy(), "FPExt only produces an FP", &I);
2390   Assert(SrcTy->isVectorTy() == DestTy->isVectorTy(),
2391          "fpext source and destination must both be a vector or neither", &I);
2392   Assert(SrcBitSize < DestBitSize, "DestTy too small for FPExt", &I);
2393 
2394   visitInstruction(I);
2395 }
2396 
2397 void Verifier::visitUIToFPInst(UIToFPInst &I) {
2398   // Get the source and destination types
2399   Type *SrcTy = I.getOperand(0)->getType();
2400   Type *DestTy = I.getType();
2401 
2402   bool SrcVec = SrcTy->isVectorTy();
2403   bool DstVec = DestTy->isVectorTy();
2404 
2405   Assert(SrcVec == DstVec,
2406          "UIToFP source and dest must both be vector or scalar", &I);
2407   Assert(SrcTy->isIntOrIntVectorTy(),
2408          "UIToFP source must be integer or integer vector", &I);
2409   Assert(DestTy->isFPOrFPVectorTy(), "UIToFP result must be FP or FP vector",
2410          &I);
2411 
2412   if (SrcVec && DstVec)
2413     Assert(cast<VectorType>(SrcTy)->getNumElements() ==
2414                cast<VectorType>(DestTy)->getNumElements(),
2415            "UIToFP source and dest vector length mismatch", &I);
2416 
2417   visitInstruction(I);
2418 }
2419 
2420 void Verifier::visitSIToFPInst(SIToFPInst &I) {
2421   // Get the source and destination types
2422   Type *SrcTy = I.getOperand(0)->getType();
2423   Type *DestTy = I.getType();
2424 
2425   bool SrcVec = SrcTy->isVectorTy();
2426   bool DstVec = DestTy->isVectorTy();
2427 
2428   Assert(SrcVec == DstVec,
2429          "SIToFP source and dest must both be vector or scalar", &I);
2430   Assert(SrcTy->isIntOrIntVectorTy(),
2431          "SIToFP source must be integer or integer vector", &I);
2432   Assert(DestTy->isFPOrFPVectorTy(), "SIToFP result must be FP or FP vector",
2433          &I);
2434 
2435   if (SrcVec && DstVec)
2436     Assert(cast<VectorType>(SrcTy)->getNumElements() ==
2437                cast<VectorType>(DestTy)->getNumElements(),
2438            "SIToFP source and dest vector length mismatch", &I);
2439 
2440   visitInstruction(I);
2441 }
2442 
2443 void Verifier::visitFPToUIInst(FPToUIInst &I) {
2444   // Get the source and destination types
2445   Type *SrcTy = I.getOperand(0)->getType();
2446   Type *DestTy = I.getType();
2447 
2448   bool SrcVec = SrcTy->isVectorTy();
2449   bool DstVec = DestTy->isVectorTy();
2450 
2451   Assert(SrcVec == DstVec,
2452          "FPToUI source and dest must both be vector or scalar", &I);
2453   Assert(SrcTy->isFPOrFPVectorTy(), "FPToUI source must be FP or FP vector",
2454          &I);
2455   Assert(DestTy->isIntOrIntVectorTy(),
2456          "FPToUI result must be integer or integer vector", &I);
2457 
2458   if (SrcVec && DstVec)
2459     Assert(cast<VectorType>(SrcTy)->getNumElements() ==
2460                cast<VectorType>(DestTy)->getNumElements(),
2461            "FPToUI source and dest vector length mismatch", &I);
2462 
2463   visitInstruction(I);
2464 }
2465 
2466 void Verifier::visitFPToSIInst(FPToSIInst &I) {
2467   // Get the source and destination types
2468   Type *SrcTy = I.getOperand(0)->getType();
2469   Type *DestTy = I.getType();
2470 
2471   bool SrcVec = SrcTy->isVectorTy();
2472   bool DstVec = DestTy->isVectorTy();
2473 
2474   Assert(SrcVec == DstVec,
2475          "FPToSI source and dest must both be vector or scalar", &I);
2476   Assert(SrcTy->isFPOrFPVectorTy(), "FPToSI source must be FP or FP vector",
2477          &I);
2478   Assert(DestTy->isIntOrIntVectorTy(),
2479          "FPToSI result must be integer or integer vector", &I);
2480 
2481   if (SrcVec && DstVec)
2482     Assert(cast<VectorType>(SrcTy)->getNumElements() ==
2483                cast<VectorType>(DestTy)->getNumElements(),
2484            "FPToSI source and dest vector length mismatch", &I);
2485 
2486   visitInstruction(I);
2487 }
2488 
2489 void Verifier::visitPtrToIntInst(PtrToIntInst &I) {
2490   // Get the source and destination types
2491   Type *SrcTy = I.getOperand(0)->getType();
2492   Type *DestTy = I.getType();
2493 
2494   Assert(SrcTy->getScalarType()->isPointerTy(),
2495          "PtrToInt source must be pointer", &I);
2496 
2497   if (auto *PTy = dyn_cast<PointerType>(SrcTy->getScalarType()))
2498     Assert(!DL.isNonIntegralPointerType(PTy),
2499            "ptrtoint not supported for non-integral pointers");
2500 
2501   Assert(DestTy->getScalarType()->isIntegerTy(),
2502          "PtrToInt result must be integral", &I);
2503   Assert(SrcTy->isVectorTy() == DestTy->isVectorTy(), "PtrToInt type mismatch",
2504          &I);
2505 
2506   if (SrcTy->isVectorTy()) {
2507     VectorType *VSrc = dyn_cast<VectorType>(SrcTy);
2508     VectorType *VDest = dyn_cast<VectorType>(DestTy);
2509     Assert(VSrc->getNumElements() == VDest->getNumElements(),
2510            "PtrToInt Vector width mismatch", &I);
2511   }
2512 
2513   visitInstruction(I);
2514 }
2515 
2516 void Verifier::visitIntToPtrInst(IntToPtrInst &I) {
2517   // Get the source and destination types
2518   Type *SrcTy = I.getOperand(0)->getType();
2519   Type *DestTy = I.getType();
2520 
2521   Assert(SrcTy->getScalarType()->isIntegerTy(),
2522          "IntToPtr source must be an integral", &I);
2523   Assert(DestTy->getScalarType()->isPointerTy(),
2524          "IntToPtr result must be a pointer", &I);
2525 
2526   if (auto *PTy = dyn_cast<PointerType>(DestTy->getScalarType()))
2527     Assert(!DL.isNonIntegralPointerType(PTy),
2528            "inttoptr not supported for non-integral pointers");
2529 
2530   Assert(SrcTy->isVectorTy() == DestTy->isVectorTy(), "IntToPtr type mismatch",
2531          &I);
2532   if (SrcTy->isVectorTy()) {
2533     VectorType *VSrc = dyn_cast<VectorType>(SrcTy);
2534     VectorType *VDest = dyn_cast<VectorType>(DestTy);
2535     Assert(VSrc->getNumElements() == VDest->getNumElements(),
2536            "IntToPtr Vector width mismatch", &I);
2537   }
2538   visitInstruction(I);
2539 }
2540 
2541 void Verifier::visitBitCastInst(BitCastInst &I) {
2542   Assert(
2543       CastInst::castIsValid(Instruction::BitCast, I.getOperand(0), I.getType()),
2544       "Invalid bitcast", &I);
2545   visitInstruction(I);
2546 }
2547 
2548 void Verifier::visitAddrSpaceCastInst(AddrSpaceCastInst &I) {
2549   Type *SrcTy = I.getOperand(0)->getType();
2550   Type *DestTy = I.getType();
2551 
2552   Assert(SrcTy->isPtrOrPtrVectorTy(), "AddrSpaceCast source must be a pointer",
2553          &I);
2554   Assert(DestTy->isPtrOrPtrVectorTy(), "AddrSpaceCast result must be a pointer",
2555          &I);
2556   Assert(SrcTy->getPointerAddressSpace() != DestTy->getPointerAddressSpace(),
2557          "AddrSpaceCast must be between different address spaces", &I);
2558   if (SrcTy->isVectorTy())
2559     Assert(SrcTy->getVectorNumElements() == DestTy->getVectorNumElements(),
2560            "AddrSpaceCast vector pointer number of elements mismatch", &I);
2561   visitInstruction(I);
2562 }
2563 
2564 /// visitPHINode - Ensure that a PHI node is well formed.
2565 ///
2566 void Verifier::visitPHINode(PHINode &PN) {
2567   // Ensure that the PHI nodes are all grouped together at the top of the block.
2568   // This can be tested by checking whether the instruction before this is
2569   // either nonexistent (because this is begin()) or is a PHI node.  If not,
2570   // then there is some other instruction before a PHI.
2571   Assert(&PN == &PN.getParent()->front() ||
2572              isa<PHINode>(--BasicBlock::iterator(&PN)),
2573          "PHI nodes not grouped at top of basic block!", &PN, PN.getParent());
2574 
2575   // Check that a PHI doesn't yield a Token.
2576   Assert(!PN.getType()->isTokenTy(), "PHI nodes cannot have token type!");
2577 
2578   // Check that all of the values of the PHI node have the same type as the
2579   // result, and that the incoming blocks are really basic blocks.
2580   for (Value *IncValue : PN.incoming_values()) {
2581     Assert(PN.getType() == IncValue->getType(),
2582            "PHI node operands are not the same type as the result!", &PN);
2583   }
2584 
2585   // All other PHI node constraints are checked in the visitBasicBlock method.
2586 
2587   visitInstruction(PN);
2588 }
2589 
2590 void Verifier::verifyCallSite(CallSite CS) {
2591   Instruction *I = CS.getInstruction();
2592 
2593   Assert(CS.getCalledValue()->getType()->isPointerTy(),
2594          "Called function must be a pointer!", I);
2595   PointerType *FPTy = cast<PointerType>(CS.getCalledValue()->getType());
2596 
2597   Assert(FPTy->getElementType()->isFunctionTy(),
2598          "Called function is not pointer to function type!", I);
2599 
2600   Assert(FPTy->getElementType() == CS.getFunctionType(),
2601          "Called function is not the same type as the call!", I);
2602 
2603   FunctionType *FTy = CS.getFunctionType();
2604 
2605   // Verify that the correct number of arguments are being passed
2606   if (FTy->isVarArg())
2607     Assert(CS.arg_size() >= FTy->getNumParams(),
2608            "Called function requires more parameters than were provided!", I);
2609   else
2610     Assert(CS.arg_size() == FTy->getNumParams(),
2611            "Incorrect number of arguments passed to called function!", I);
2612 
2613   // Verify that all arguments to the call match the function type.
2614   for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i)
2615     Assert(CS.getArgument(i)->getType() == FTy->getParamType(i),
2616            "Call parameter type does not match function signature!",
2617            CS.getArgument(i), FTy->getParamType(i), I);
2618 
2619   AttributeList Attrs = CS.getAttributes();
2620 
2621   Assert(verifyAttributeCount(Attrs, CS.arg_size()),
2622          "Attribute after last parameter!", I);
2623 
2624   if (Attrs.hasAttribute(AttributeList::FunctionIndex, Attribute::Speculatable)) {
2625     // Don't allow speculatable on call sites, unless the underlying function
2626     // declaration is also speculatable.
2627     Function *Callee
2628       = dyn_cast<Function>(CS.getCalledValue()->stripPointerCasts());
2629     Assert(Callee && Callee->isSpeculatable(),
2630            "speculatable attribute may not apply to call sites", I);
2631   }
2632 
2633   // Verify call attributes.
2634   verifyFunctionAttrs(FTy, Attrs, I);
2635 
2636   // Conservatively check the inalloca argument.
2637   // We have a bug if we can find that there is an underlying alloca without
2638   // inalloca.
2639   if (CS.hasInAllocaArgument()) {
2640     Value *InAllocaArg = CS.getArgument(FTy->getNumParams() - 1);
2641     if (auto AI = dyn_cast<AllocaInst>(InAllocaArg->stripInBoundsOffsets()))
2642       Assert(AI->isUsedWithInAlloca(),
2643              "inalloca argument for call has mismatched alloca", AI, I);
2644   }
2645 
2646   // For each argument of the callsite, if it has the swifterror argument,
2647   // make sure the underlying alloca/parameter it comes from has a swifterror as
2648   // well.
2649   for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i)
2650     if (CS.paramHasAttr(i, Attribute::SwiftError)) {
2651       Value *SwiftErrorArg = CS.getArgument(i);
2652       if (auto AI = dyn_cast<AllocaInst>(SwiftErrorArg->stripInBoundsOffsets())) {
2653         Assert(AI->isSwiftError(),
2654                "swifterror argument for call has mismatched alloca", AI, I);
2655         continue;
2656       }
2657       auto ArgI = dyn_cast<Argument>(SwiftErrorArg);
2658       Assert(ArgI, "swifterror argument should come from an alloca or parameter", SwiftErrorArg, I);
2659       Assert(ArgI->hasSwiftErrorAttr(),
2660              "swifterror argument for call has mismatched parameter", ArgI, I);
2661     }
2662 
2663   if (FTy->isVarArg()) {
2664     // FIXME? is 'nest' even legal here?
2665     bool SawNest = false;
2666     bool SawReturned = false;
2667 
2668     for (unsigned Idx = 0; Idx < FTy->getNumParams(); ++Idx) {
2669       if (Attrs.hasParamAttribute(Idx, Attribute::Nest))
2670         SawNest = true;
2671       if (Attrs.hasParamAttribute(Idx, Attribute::Returned))
2672         SawReturned = true;
2673     }
2674 
2675     // Check attributes on the varargs part.
2676     for (unsigned Idx = FTy->getNumParams(); Idx < CS.arg_size(); ++Idx) {
2677       Type *Ty = CS.getArgument(Idx)->getType();
2678       AttributeSet ArgAttrs = Attrs.getParamAttributes(Idx);
2679       verifyParameterAttrs(ArgAttrs, Ty, I);
2680 
2681       if (ArgAttrs.hasAttribute(Attribute::Nest)) {
2682         Assert(!SawNest, "More than one parameter has attribute nest!", I);
2683         SawNest = true;
2684       }
2685 
2686       if (ArgAttrs.hasAttribute(Attribute::Returned)) {
2687         Assert(!SawReturned, "More than one parameter has attribute returned!",
2688                I);
2689         Assert(Ty->canLosslesslyBitCastTo(FTy->getReturnType()),
2690                "Incompatible argument and return types for 'returned' "
2691                "attribute",
2692                I);
2693         SawReturned = true;
2694       }
2695 
2696       Assert(!ArgAttrs.hasAttribute(Attribute::StructRet),
2697              "Attribute 'sret' cannot be used for vararg call arguments!", I);
2698 
2699       if (ArgAttrs.hasAttribute(Attribute::InAlloca))
2700         Assert(Idx == CS.arg_size() - 1, "inalloca isn't on the last argument!",
2701                I);
2702     }
2703   }
2704 
2705   // Verify that there's no metadata unless it's a direct call to an intrinsic.
2706   if (CS.getCalledFunction() == nullptr ||
2707       !CS.getCalledFunction()->getName().startswith("llvm.")) {
2708     for (Type *ParamTy : FTy->params()) {
2709       Assert(!ParamTy->isMetadataTy(),
2710              "Function has metadata parameter but isn't an intrinsic", I);
2711       Assert(!ParamTy->isTokenTy(),
2712              "Function has token parameter but isn't an intrinsic", I);
2713     }
2714   }
2715 
2716   // Verify that indirect calls don't return tokens.
2717   if (CS.getCalledFunction() == nullptr)
2718     Assert(!FTy->getReturnType()->isTokenTy(),
2719            "Return type cannot be token for indirect call!");
2720 
2721   if (Function *F = CS.getCalledFunction())
2722     if (Intrinsic::ID ID = (Intrinsic::ID)F->getIntrinsicID())
2723       visitIntrinsicCallSite(ID, CS);
2724 
2725   // Verify that a callsite has at most one "deopt", at most one "funclet" and
2726   // at most one "gc-transition" operand bundle.
2727   bool FoundDeoptBundle = false, FoundFuncletBundle = false,
2728        FoundGCTransitionBundle = false;
2729   for (unsigned i = 0, e = CS.getNumOperandBundles(); i < e; ++i) {
2730     OperandBundleUse BU = CS.getOperandBundleAt(i);
2731     uint32_t Tag = BU.getTagID();
2732     if (Tag == LLVMContext::OB_deopt) {
2733       Assert(!FoundDeoptBundle, "Multiple deopt operand bundles", I);
2734       FoundDeoptBundle = true;
2735     } else if (Tag == LLVMContext::OB_gc_transition) {
2736       Assert(!FoundGCTransitionBundle, "Multiple gc-transition operand bundles",
2737              I);
2738       FoundGCTransitionBundle = true;
2739     } else if (Tag == LLVMContext::OB_funclet) {
2740       Assert(!FoundFuncletBundle, "Multiple funclet operand bundles", I);
2741       FoundFuncletBundle = true;
2742       Assert(BU.Inputs.size() == 1,
2743              "Expected exactly one funclet bundle operand", I);
2744       Assert(isa<FuncletPadInst>(BU.Inputs.front()),
2745              "Funclet bundle operands should correspond to a FuncletPadInst",
2746              I);
2747     }
2748   }
2749 
2750   // Verify that each inlinable callsite of a debug-info-bearing function in a
2751   // debug-info-bearing function has a debug location attached to it. Failure to
2752   // do so causes assertion failures when the inliner sets up inline scope info.
2753   if (I->getFunction()->getSubprogram() && CS.getCalledFunction() &&
2754       CS.getCalledFunction()->getSubprogram())
2755     AssertDI(I->getDebugLoc(), "inlinable function call in a function with "
2756                                "debug info must have a !dbg location",
2757              I);
2758 
2759   visitInstruction(*I);
2760 }
2761 
2762 /// Two types are "congruent" if they are identical, or if they are both pointer
2763 /// types with different pointee types and the same address space.
2764 static bool isTypeCongruent(Type *L, Type *R) {
2765   if (L == R)
2766     return true;
2767   PointerType *PL = dyn_cast<PointerType>(L);
2768   PointerType *PR = dyn_cast<PointerType>(R);
2769   if (!PL || !PR)
2770     return false;
2771   return PL->getAddressSpace() == PR->getAddressSpace();
2772 }
2773 
2774 static AttrBuilder getParameterABIAttributes(int I, AttributeList Attrs) {
2775   static const Attribute::AttrKind ABIAttrs[] = {
2776       Attribute::StructRet, Attribute::ByVal, Attribute::InAlloca,
2777       Attribute::InReg, Attribute::Returned, Attribute::SwiftSelf,
2778       Attribute::SwiftError};
2779   AttrBuilder Copy;
2780   for (auto AK : ABIAttrs) {
2781     if (Attrs.hasParamAttribute(I, AK))
2782       Copy.addAttribute(AK);
2783   }
2784   if (Attrs.hasParamAttribute(I, Attribute::Alignment))
2785     Copy.addAlignmentAttr(Attrs.getParamAlignment(I));
2786   return Copy;
2787 }
2788 
2789 void Verifier::verifyMustTailCall(CallInst &CI) {
2790   Assert(!CI.isInlineAsm(), "cannot use musttail call with inline asm", &CI);
2791 
2792   // - The caller and callee prototypes must match.  Pointer types of
2793   //   parameters or return types may differ in pointee type, but not
2794   //   address space.
2795   Function *F = CI.getParent()->getParent();
2796   FunctionType *CallerTy = F->getFunctionType();
2797   FunctionType *CalleeTy = CI.getFunctionType();
2798   Assert(CallerTy->getNumParams() == CalleeTy->getNumParams(),
2799          "cannot guarantee tail call due to mismatched parameter counts", &CI);
2800   Assert(CallerTy->isVarArg() == CalleeTy->isVarArg(),
2801          "cannot guarantee tail call due to mismatched varargs", &CI);
2802   Assert(isTypeCongruent(CallerTy->getReturnType(), CalleeTy->getReturnType()),
2803          "cannot guarantee tail call due to mismatched return types", &CI);
2804   for (int I = 0, E = CallerTy->getNumParams(); I != E; ++I) {
2805     Assert(
2806         isTypeCongruent(CallerTy->getParamType(I), CalleeTy->getParamType(I)),
2807         "cannot guarantee tail call due to mismatched parameter types", &CI);
2808   }
2809 
2810   // - The calling conventions of the caller and callee must match.
2811   Assert(F->getCallingConv() == CI.getCallingConv(),
2812          "cannot guarantee tail call due to mismatched calling conv", &CI);
2813 
2814   // - All ABI-impacting function attributes, such as sret, byval, inreg,
2815   //   returned, and inalloca, must match.
2816   AttributeList CallerAttrs = F->getAttributes();
2817   AttributeList CalleeAttrs = CI.getAttributes();
2818   for (int I = 0, E = CallerTy->getNumParams(); I != E; ++I) {
2819     AttrBuilder CallerABIAttrs = getParameterABIAttributes(I, CallerAttrs);
2820     AttrBuilder CalleeABIAttrs = getParameterABIAttributes(I, CalleeAttrs);
2821     Assert(CallerABIAttrs == CalleeABIAttrs,
2822            "cannot guarantee tail call due to mismatched ABI impacting "
2823            "function attributes",
2824            &CI, CI.getOperand(I));
2825   }
2826 
2827   // - The call must immediately precede a :ref:`ret <i_ret>` instruction,
2828   //   or a pointer bitcast followed by a ret instruction.
2829   // - The ret instruction must return the (possibly bitcasted) value
2830   //   produced by the call or void.
2831   Value *RetVal = &CI;
2832   Instruction *Next = CI.getNextNode();
2833 
2834   // Handle the optional bitcast.
2835   if (BitCastInst *BI = dyn_cast_or_null<BitCastInst>(Next)) {
2836     Assert(BI->getOperand(0) == RetVal,
2837            "bitcast following musttail call must use the call", BI);
2838     RetVal = BI;
2839     Next = BI->getNextNode();
2840   }
2841 
2842   // Check the return.
2843   ReturnInst *Ret = dyn_cast_or_null<ReturnInst>(Next);
2844   Assert(Ret, "musttail call must be precede a ret with an optional bitcast",
2845          &CI);
2846   Assert(!Ret->getReturnValue() || Ret->getReturnValue() == RetVal,
2847          "musttail call result must be returned", Ret);
2848 }
2849 
2850 void Verifier::visitCallInst(CallInst &CI) {
2851   verifyCallSite(&CI);
2852 
2853   if (CI.isMustTailCall())
2854     verifyMustTailCall(CI);
2855 }
2856 
2857 void Verifier::visitInvokeInst(InvokeInst &II) {
2858   verifyCallSite(&II);
2859 
2860   // Verify that the first non-PHI instruction of the unwind destination is an
2861   // exception handling instruction.
2862   Assert(
2863       II.getUnwindDest()->isEHPad(),
2864       "The unwind destination does not have an exception handling instruction!",
2865       &II);
2866 
2867   visitTerminatorInst(II);
2868 }
2869 
2870 /// visitBinaryOperator - Check that both arguments to the binary operator are
2871 /// of the same type!
2872 ///
2873 void Verifier::visitBinaryOperator(BinaryOperator &B) {
2874   Assert(B.getOperand(0)->getType() == B.getOperand(1)->getType(),
2875          "Both operands to a binary operator are not of the same type!", &B);
2876 
2877   switch (B.getOpcode()) {
2878   // Check that integer arithmetic operators are only used with
2879   // integral operands.
2880   case Instruction::Add:
2881   case Instruction::Sub:
2882   case Instruction::Mul:
2883   case Instruction::SDiv:
2884   case Instruction::UDiv:
2885   case Instruction::SRem:
2886   case Instruction::URem:
2887     Assert(B.getType()->isIntOrIntVectorTy(),
2888            "Integer arithmetic operators only work with integral types!", &B);
2889     Assert(B.getType() == B.getOperand(0)->getType(),
2890            "Integer arithmetic operators must have same type "
2891            "for operands and result!",
2892            &B);
2893     break;
2894   // Check that floating-point arithmetic operators are only used with
2895   // floating-point operands.
2896   case Instruction::FAdd:
2897   case Instruction::FSub:
2898   case Instruction::FMul:
2899   case Instruction::FDiv:
2900   case Instruction::FRem:
2901     Assert(B.getType()->isFPOrFPVectorTy(),
2902            "Floating-point arithmetic operators only work with "
2903            "floating-point types!",
2904            &B);
2905     Assert(B.getType() == B.getOperand(0)->getType(),
2906            "Floating-point arithmetic operators must have same type "
2907            "for operands and result!",
2908            &B);
2909     break;
2910   // Check that logical operators are only used with integral operands.
2911   case Instruction::And:
2912   case Instruction::Or:
2913   case Instruction::Xor:
2914     Assert(B.getType()->isIntOrIntVectorTy(),
2915            "Logical operators only work with integral types!", &B);
2916     Assert(B.getType() == B.getOperand(0)->getType(),
2917            "Logical operators must have same type for operands and result!",
2918            &B);
2919     break;
2920   case Instruction::Shl:
2921   case Instruction::LShr:
2922   case Instruction::AShr:
2923     Assert(B.getType()->isIntOrIntVectorTy(),
2924            "Shifts only work with integral types!", &B);
2925     Assert(B.getType() == B.getOperand(0)->getType(),
2926            "Shift return type must be same as operands!", &B);
2927     break;
2928   default:
2929     llvm_unreachable("Unknown BinaryOperator opcode!");
2930   }
2931 
2932   visitInstruction(B);
2933 }
2934 
2935 void Verifier::visitICmpInst(ICmpInst &IC) {
2936   // Check that the operands are the same type
2937   Type *Op0Ty = IC.getOperand(0)->getType();
2938   Type *Op1Ty = IC.getOperand(1)->getType();
2939   Assert(Op0Ty == Op1Ty,
2940          "Both operands to ICmp instruction are not of the same type!", &IC);
2941   // Check that the operands are the right type
2942   Assert(Op0Ty->isIntOrIntVectorTy() || Op0Ty->getScalarType()->isPointerTy(),
2943          "Invalid operand types for ICmp instruction", &IC);
2944   // Check that the predicate is valid.
2945   Assert(IC.getPredicate() >= CmpInst::FIRST_ICMP_PREDICATE &&
2946              IC.getPredicate() <= CmpInst::LAST_ICMP_PREDICATE,
2947          "Invalid predicate in ICmp instruction!", &IC);
2948 
2949   visitInstruction(IC);
2950 }
2951 
2952 void Verifier::visitFCmpInst(FCmpInst &FC) {
2953   // Check that the operands are the same type
2954   Type *Op0Ty = FC.getOperand(0)->getType();
2955   Type *Op1Ty = FC.getOperand(1)->getType();
2956   Assert(Op0Ty == Op1Ty,
2957          "Both operands to FCmp instruction are not of the same type!", &FC);
2958   // Check that the operands are the right type
2959   Assert(Op0Ty->isFPOrFPVectorTy(),
2960          "Invalid operand types for FCmp instruction", &FC);
2961   // Check that the predicate is valid.
2962   Assert(FC.getPredicate() >= CmpInst::FIRST_FCMP_PREDICATE &&
2963              FC.getPredicate() <= CmpInst::LAST_FCMP_PREDICATE,
2964          "Invalid predicate in FCmp instruction!", &FC);
2965 
2966   visitInstruction(FC);
2967 }
2968 
2969 void Verifier::visitExtractElementInst(ExtractElementInst &EI) {
2970   Assert(
2971       ExtractElementInst::isValidOperands(EI.getOperand(0), EI.getOperand(1)),
2972       "Invalid extractelement operands!", &EI);
2973   visitInstruction(EI);
2974 }
2975 
2976 void Verifier::visitInsertElementInst(InsertElementInst &IE) {
2977   Assert(InsertElementInst::isValidOperands(IE.getOperand(0), IE.getOperand(1),
2978                                             IE.getOperand(2)),
2979          "Invalid insertelement operands!", &IE);
2980   visitInstruction(IE);
2981 }
2982 
2983 void Verifier::visitShuffleVectorInst(ShuffleVectorInst &SV) {
2984   Assert(ShuffleVectorInst::isValidOperands(SV.getOperand(0), SV.getOperand(1),
2985                                             SV.getOperand(2)),
2986          "Invalid shufflevector operands!", &SV);
2987   visitInstruction(SV);
2988 }
2989 
2990 void Verifier::visitGetElementPtrInst(GetElementPtrInst &GEP) {
2991   Type *TargetTy = GEP.getPointerOperandType()->getScalarType();
2992 
2993   Assert(isa<PointerType>(TargetTy),
2994          "GEP base pointer is not a vector or a vector of pointers", &GEP);
2995   Assert(GEP.getSourceElementType()->isSized(), "GEP into unsized type!", &GEP);
2996   SmallVector<Value*, 16> Idxs(GEP.idx_begin(), GEP.idx_end());
2997   Type *ElTy =
2998       GetElementPtrInst::getIndexedType(GEP.getSourceElementType(), Idxs);
2999   Assert(ElTy, "Invalid indices for GEP pointer type!", &GEP);
3000 
3001   Assert(GEP.getType()->getScalarType()->isPointerTy() &&
3002              GEP.getResultElementType() == ElTy,
3003          "GEP is not of right type for indices!", &GEP, ElTy);
3004 
3005   if (GEP.getType()->isVectorTy()) {
3006     // Additional checks for vector GEPs.
3007     unsigned GEPWidth = GEP.getType()->getVectorNumElements();
3008     if (GEP.getPointerOperandType()->isVectorTy())
3009       Assert(GEPWidth == GEP.getPointerOperandType()->getVectorNumElements(),
3010              "Vector GEP result width doesn't match operand's", &GEP);
3011     for (Value *Idx : Idxs) {
3012       Type *IndexTy = Idx->getType();
3013       if (IndexTy->isVectorTy()) {
3014         unsigned IndexWidth = IndexTy->getVectorNumElements();
3015         Assert(IndexWidth == GEPWidth, "Invalid GEP index vector width", &GEP);
3016       }
3017       Assert(IndexTy->getScalarType()->isIntegerTy(),
3018              "All GEP indices should be of integer type");
3019     }
3020   }
3021   visitInstruction(GEP);
3022 }
3023 
3024 static bool isContiguous(const ConstantRange &A, const ConstantRange &B) {
3025   return A.getUpper() == B.getLower() || A.getLower() == B.getUpper();
3026 }
3027 
3028 void Verifier::visitRangeMetadata(Instruction &I, MDNode *Range, Type *Ty) {
3029   assert(Range && Range == I.getMetadata(LLVMContext::MD_range) &&
3030          "precondition violation");
3031 
3032   unsigned NumOperands = Range->getNumOperands();
3033   Assert(NumOperands % 2 == 0, "Unfinished range!", Range);
3034   unsigned NumRanges = NumOperands / 2;
3035   Assert(NumRanges >= 1, "It should have at least one range!", Range);
3036 
3037   ConstantRange LastRange(1); // Dummy initial value
3038   for (unsigned i = 0; i < NumRanges; ++i) {
3039     ConstantInt *Low =
3040         mdconst::dyn_extract<ConstantInt>(Range->getOperand(2 * i));
3041     Assert(Low, "The lower limit must be an integer!", Low);
3042     ConstantInt *High =
3043         mdconst::dyn_extract<ConstantInt>(Range->getOperand(2 * i + 1));
3044     Assert(High, "The upper limit must be an integer!", High);
3045     Assert(High->getType() == Low->getType() && High->getType() == Ty,
3046            "Range types must match instruction type!", &I);
3047 
3048     APInt HighV = High->getValue();
3049     APInt LowV = Low->getValue();
3050     ConstantRange CurRange(LowV, HighV);
3051     Assert(!CurRange.isEmptySet() && !CurRange.isFullSet(),
3052            "Range must not be empty!", Range);
3053     if (i != 0) {
3054       Assert(CurRange.intersectWith(LastRange).isEmptySet(),
3055              "Intervals are overlapping", Range);
3056       Assert(LowV.sgt(LastRange.getLower()), "Intervals are not in order",
3057              Range);
3058       Assert(!isContiguous(CurRange, LastRange), "Intervals are contiguous",
3059              Range);
3060     }
3061     LastRange = ConstantRange(LowV, HighV);
3062   }
3063   if (NumRanges > 2) {
3064     APInt FirstLow =
3065         mdconst::dyn_extract<ConstantInt>(Range->getOperand(0))->getValue();
3066     APInt FirstHigh =
3067         mdconst::dyn_extract<ConstantInt>(Range->getOperand(1))->getValue();
3068     ConstantRange FirstRange(FirstLow, FirstHigh);
3069     Assert(FirstRange.intersectWith(LastRange).isEmptySet(),
3070            "Intervals are overlapping", Range);
3071     Assert(!isContiguous(FirstRange, LastRange), "Intervals are contiguous",
3072            Range);
3073   }
3074 }
3075 
3076 void Verifier::checkAtomicMemAccessSize(Type *Ty, const Instruction *I) {
3077   unsigned Size = DL.getTypeSizeInBits(Ty);
3078   Assert(Size >= 8, "atomic memory access' size must be byte-sized", Ty, I);
3079   Assert(!(Size & (Size - 1)),
3080          "atomic memory access' operand must have a power-of-two size", Ty, I);
3081 }
3082 
3083 void Verifier::visitLoadInst(LoadInst &LI) {
3084   PointerType *PTy = dyn_cast<PointerType>(LI.getOperand(0)->getType());
3085   Assert(PTy, "Load operand must be a pointer.", &LI);
3086   Type *ElTy = LI.getType();
3087   Assert(LI.getAlignment() <= Value::MaximumAlignment,
3088          "huge alignment values are unsupported", &LI);
3089   Assert(ElTy->isSized(), "loading unsized types is not allowed", &LI);
3090   if (LI.isAtomic()) {
3091     Assert(LI.getOrdering() != AtomicOrdering::Release &&
3092                LI.getOrdering() != AtomicOrdering::AcquireRelease,
3093            "Load cannot have Release ordering", &LI);
3094     Assert(LI.getAlignment() != 0,
3095            "Atomic load must specify explicit alignment", &LI);
3096     Assert(ElTy->isIntegerTy() || ElTy->isPointerTy() ||
3097                ElTy->isFloatingPointTy(),
3098            "atomic load operand must have integer, pointer, or floating point "
3099            "type!",
3100            ElTy, &LI);
3101     checkAtomicMemAccessSize(ElTy, &LI);
3102   } else {
3103     Assert(LI.getSynchScope() == CrossThread,
3104            "Non-atomic load cannot have SynchronizationScope specified", &LI);
3105   }
3106 
3107   visitInstruction(LI);
3108 }
3109 
3110 void Verifier::visitStoreInst(StoreInst &SI) {
3111   PointerType *PTy = dyn_cast<PointerType>(SI.getOperand(1)->getType());
3112   Assert(PTy, "Store operand must be a pointer.", &SI);
3113   Type *ElTy = PTy->getElementType();
3114   Assert(ElTy == SI.getOperand(0)->getType(),
3115          "Stored value type does not match pointer operand type!", &SI, ElTy);
3116   Assert(SI.getAlignment() <= Value::MaximumAlignment,
3117          "huge alignment values are unsupported", &SI);
3118   Assert(ElTy->isSized(), "storing unsized types is not allowed", &SI);
3119   if (SI.isAtomic()) {
3120     Assert(SI.getOrdering() != AtomicOrdering::Acquire &&
3121                SI.getOrdering() != AtomicOrdering::AcquireRelease,
3122            "Store cannot have Acquire ordering", &SI);
3123     Assert(SI.getAlignment() != 0,
3124            "Atomic store must specify explicit alignment", &SI);
3125     Assert(ElTy->isIntegerTy() || ElTy->isPointerTy() ||
3126                ElTy->isFloatingPointTy(),
3127            "atomic store operand must have integer, pointer, or floating point "
3128            "type!",
3129            ElTy, &SI);
3130     checkAtomicMemAccessSize(ElTy, &SI);
3131   } else {
3132     Assert(SI.getSynchScope() == CrossThread,
3133            "Non-atomic store cannot have SynchronizationScope specified", &SI);
3134   }
3135   visitInstruction(SI);
3136 }
3137 
3138 /// Check that SwiftErrorVal is used as a swifterror argument in CS.
3139 void Verifier::verifySwiftErrorCallSite(CallSite CS,
3140                                         const Value *SwiftErrorVal) {
3141   unsigned Idx = 0;
3142   for (CallSite::arg_iterator I = CS.arg_begin(), E = CS.arg_end();
3143        I != E; ++I, ++Idx) {
3144     if (*I == SwiftErrorVal) {
3145       Assert(CS.paramHasAttr(Idx, Attribute::SwiftError),
3146              "swifterror value when used in a callsite should be marked "
3147              "with swifterror attribute",
3148               SwiftErrorVal, CS);
3149     }
3150   }
3151 }
3152 
3153 void Verifier::verifySwiftErrorValue(const Value *SwiftErrorVal) {
3154   // Check that swifterror value is only used by loads, stores, or as
3155   // a swifterror argument.
3156   for (const User *U : SwiftErrorVal->users()) {
3157     Assert(isa<LoadInst>(U) || isa<StoreInst>(U) || isa<CallInst>(U) ||
3158            isa<InvokeInst>(U),
3159            "swifterror value can only be loaded and stored from, or "
3160            "as a swifterror argument!",
3161            SwiftErrorVal, U);
3162     // If it is used by a store, check it is the second operand.
3163     if (auto StoreI = dyn_cast<StoreInst>(U))
3164       Assert(StoreI->getOperand(1) == SwiftErrorVal,
3165              "swifterror value should be the second operand when used "
3166              "by stores", SwiftErrorVal, U);
3167     if (auto CallI = dyn_cast<CallInst>(U))
3168       verifySwiftErrorCallSite(const_cast<CallInst*>(CallI), SwiftErrorVal);
3169     if (auto II = dyn_cast<InvokeInst>(U))
3170       verifySwiftErrorCallSite(const_cast<InvokeInst*>(II), SwiftErrorVal);
3171   }
3172 }
3173 
3174 void Verifier::visitAllocaInst(AllocaInst &AI) {
3175   SmallPtrSet<Type*, 4> Visited;
3176   PointerType *PTy = AI.getType();
3177   // TODO: Relax this restriction?
3178   Assert(PTy->getAddressSpace() == DL.getAllocaAddrSpace(),
3179          "Allocation instruction pointer not in the stack address space!",
3180          &AI);
3181   Assert(AI.getAllocatedType()->isSized(&Visited),
3182          "Cannot allocate unsized type", &AI);
3183   Assert(AI.getArraySize()->getType()->isIntegerTy(),
3184          "Alloca array size must have integer type", &AI);
3185   Assert(AI.getAlignment() <= Value::MaximumAlignment,
3186          "huge alignment values are unsupported", &AI);
3187 
3188   if (AI.isSwiftError()) {
3189     verifySwiftErrorValue(&AI);
3190   }
3191 
3192   visitInstruction(AI);
3193 }
3194 
3195 void Verifier::visitAtomicCmpXchgInst(AtomicCmpXchgInst &CXI) {
3196 
3197   // FIXME: more conditions???
3198   Assert(CXI.getSuccessOrdering() != AtomicOrdering::NotAtomic,
3199          "cmpxchg instructions must be atomic.", &CXI);
3200   Assert(CXI.getFailureOrdering() != AtomicOrdering::NotAtomic,
3201          "cmpxchg instructions must be atomic.", &CXI);
3202   Assert(CXI.getSuccessOrdering() != AtomicOrdering::Unordered,
3203          "cmpxchg instructions cannot be unordered.", &CXI);
3204   Assert(CXI.getFailureOrdering() != AtomicOrdering::Unordered,
3205          "cmpxchg instructions cannot be unordered.", &CXI);
3206   Assert(!isStrongerThan(CXI.getFailureOrdering(), CXI.getSuccessOrdering()),
3207          "cmpxchg instructions failure argument shall be no stronger than the "
3208          "success argument",
3209          &CXI);
3210   Assert(CXI.getFailureOrdering() != AtomicOrdering::Release &&
3211              CXI.getFailureOrdering() != AtomicOrdering::AcquireRelease,
3212          "cmpxchg failure ordering cannot include release semantics", &CXI);
3213 
3214   PointerType *PTy = dyn_cast<PointerType>(CXI.getOperand(0)->getType());
3215   Assert(PTy, "First cmpxchg operand must be a pointer.", &CXI);
3216   Type *ElTy = PTy->getElementType();
3217   Assert(ElTy->isIntegerTy() || ElTy->isPointerTy(),
3218         "cmpxchg operand must have integer or pointer type",
3219          ElTy, &CXI);
3220   checkAtomicMemAccessSize(ElTy, &CXI);
3221   Assert(ElTy == CXI.getOperand(1)->getType(),
3222          "Expected value type does not match pointer operand type!", &CXI,
3223          ElTy);
3224   Assert(ElTy == CXI.getOperand(2)->getType(),
3225          "Stored value type does not match pointer operand type!", &CXI, ElTy);
3226   visitInstruction(CXI);
3227 }
3228 
3229 void Verifier::visitAtomicRMWInst(AtomicRMWInst &RMWI) {
3230   Assert(RMWI.getOrdering() != AtomicOrdering::NotAtomic,
3231          "atomicrmw instructions must be atomic.", &RMWI);
3232   Assert(RMWI.getOrdering() != AtomicOrdering::Unordered,
3233          "atomicrmw instructions cannot be unordered.", &RMWI);
3234   PointerType *PTy = dyn_cast<PointerType>(RMWI.getOperand(0)->getType());
3235   Assert(PTy, "First atomicrmw operand must be a pointer.", &RMWI);
3236   Type *ElTy = PTy->getElementType();
3237   Assert(ElTy->isIntegerTy(), "atomicrmw operand must have integer type!",
3238          &RMWI, ElTy);
3239   checkAtomicMemAccessSize(ElTy, &RMWI);
3240   Assert(ElTy == RMWI.getOperand(1)->getType(),
3241          "Argument value type does not match pointer operand type!", &RMWI,
3242          ElTy);
3243   Assert(AtomicRMWInst::FIRST_BINOP <= RMWI.getOperation() &&
3244              RMWI.getOperation() <= AtomicRMWInst::LAST_BINOP,
3245          "Invalid binary operation!", &RMWI);
3246   visitInstruction(RMWI);
3247 }
3248 
3249 void Verifier::visitFenceInst(FenceInst &FI) {
3250   const AtomicOrdering Ordering = FI.getOrdering();
3251   Assert(Ordering == AtomicOrdering::Acquire ||
3252              Ordering == AtomicOrdering::Release ||
3253              Ordering == AtomicOrdering::AcquireRelease ||
3254              Ordering == AtomicOrdering::SequentiallyConsistent,
3255          "fence instructions may only have acquire, release, acq_rel, or "
3256          "seq_cst ordering.",
3257          &FI);
3258   visitInstruction(FI);
3259 }
3260 
3261 void Verifier::visitExtractValueInst(ExtractValueInst &EVI) {
3262   Assert(ExtractValueInst::getIndexedType(EVI.getAggregateOperand()->getType(),
3263                                           EVI.getIndices()) == EVI.getType(),
3264          "Invalid ExtractValueInst operands!", &EVI);
3265 
3266   visitInstruction(EVI);
3267 }
3268 
3269 void Verifier::visitInsertValueInst(InsertValueInst &IVI) {
3270   Assert(ExtractValueInst::getIndexedType(IVI.getAggregateOperand()->getType(),
3271                                           IVI.getIndices()) ==
3272              IVI.getOperand(1)->getType(),
3273          "Invalid InsertValueInst operands!", &IVI);
3274 
3275   visitInstruction(IVI);
3276 }
3277 
3278 static Value *getParentPad(Value *EHPad) {
3279   if (auto *FPI = dyn_cast<FuncletPadInst>(EHPad))
3280     return FPI->getParentPad();
3281 
3282   return cast<CatchSwitchInst>(EHPad)->getParentPad();
3283 }
3284 
3285 void Verifier::visitEHPadPredecessors(Instruction &I) {
3286   assert(I.isEHPad());
3287 
3288   BasicBlock *BB = I.getParent();
3289   Function *F = BB->getParent();
3290 
3291   Assert(BB != &F->getEntryBlock(), "EH pad cannot be in entry block.", &I);
3292 
3293   if (auto *LPI = dyn_cast<LandingPadInst>(&I)) {
3294     // The landingpad instruction defines its parent as a landing pad block. The
3295     // landing pad block may be branched to only by the unwind edge of an
3296     // invoke.
3297     for (BasicBlock *PredBB : predecessors(BB)) {
3298       const auto *II = dyn_cast<InvokeInst>(PredBB->getTerminator());
3299       Assert(II && II->getUnwindDest() == BB && II->getNormalDest() != BB,
3300              "Block containing LandingPadInst must be jumped to "
3301              "only by the unwind edge of an invoke.",
3302              LPI);
3303     }
3304     return;
3305   }
3306   if (auto *CPI = dyn_cast<CatchPadInst>(&I)) {
3307     if (!pred_empty(BB))
3308       Assert(BB->getUniquePredecessor() == CPI->getCatchSwitch()->getParent(),
3309              "Block containg CatchPadInst must be jumped to "
3310              "only by its catchswitch.",
3311              CPI);
3312     Assert(BB != CPI->getCatchSwitch()->getUnwindDest(),
3313            "Catchswitch cannot unwind to one of its catchpads",
3314            CPI->getCatchSwitch(), CPI);
3315     return;
3316   }
3317 
3318   // Verify that each pred has a legal terminator with a legal to/from EH
3319   // pad relationship.
3320   Instruction *ToPad = &I;
3321   Value *ToPadParent = getParentPad(ToPad);
3322   for (BasicBlock *PredBB : predecessors(BB)) {
3323     TerminatorInst *TI = PredBB->getTerminator();
3324     Value *FromPad;
3325     if (auto *II = dyn_cast<InvokeInst>(TI)) {
3326       Assert(II->getUnwindDest() == BB && II->getNormalDest() != BB,
3327              "EH pad must be jumped to via an unwind edge", ToPad, II);
3328       if (auto Bundle = II->getOperandBundle(LLVMContext::OB_funclet))
3329         FromPad = Bundle->Inputs[0];
3330       else
3331         FromPad = ConstantTokenNone::get(II->getContext());
3332     } else if (auto *CRI = dyn_cast<CleanupReturnInst>(TI)) {
3333       FromPad = CRI->getOperand(0);
3334       Assert(FromPad != ToPadParent, "A cleanupret must exit its cleanup", CRI);
3335     } else if (auto *CSI = dyn_cast<CatchSwitchInst>(TI)) {
3336       FromPad = CSI;
3337     } else {
3338       Assert(false, "EH pad must be jumped to via an unwind edge", ToPad, TI);
3339     }
3340 
3341     // The edge may exit from zero or more nested pads.
3342     SmallSet<Value *, 8> Seen;
3343     for (;; FromPad = getParentPad(FromPad)) {
3344       Assert(FromPad != ToPad,
3345              "EH pad cannot handle exceptions raised within it", FromPad, TI);
3346       if (FromPad == ToPadParent) {
3347         // This is a legal unwind edge.
3348         break;
3349       }
3350       Assert(!isa<ConstantTokenNone>(FromPad),
3351              "A single unwind edge may only enter one EH pad", TI);
3352       Assert(Seen.insert(FromPad).second,
3353              "EH pad jumps through a cycle of pads", FromPad);
3354     }
3355   }
3356 }
3357 
3358 void Verifier::visitLandingPadInst(LandingPadInst &LPI) {
3359   // The landingpad instruction is ill-formed if it doesn't have any clauses and
3360   // isn't a cleanup.
3361   Assert(LPI.getNumClauses() > 0 || LPI.isCleanup(),
3362          "LandingPadInst needs at least one clause or to be a cleanup.", &LPI);
3363 
3364   visitEHPadPredecessors(LPI);
3365 
3366   if (!LandingPadResultTy)
3367     LandingPadResultTy = LPI.getType();
3368   else
3369     Assert(LandingPadResultTy == LPI.getType(),
3370            "The landingpad instruction should have a consistent result type "
3371            "inside a function.",
3372            &LPI);
3373 
3374   Function *F = LPI.getParent()->getParent();
3375   Assert(F->hasPersonalityFn(),
3376          "LandingPadInst needs to be in a function with a personality.", &LPI);
3377 
3378   // The landingpad instruction must be the first non-PHI instruction in the
3379   // block.
3380   Assert(LPI.getParent()->getLandingPadInst() == &LPI,
3381          "LandingPadInst not the first non-PHI instruction in the block.",
3382          &LPI);
3383 
3384   for (unsigned i = 0, e = LPI.getNumClauses(); i < e; ++i) {
3385     Constant *Clause = LPI.getClause(i);
3386     if (LPI.isCatch(i)) {
3387       Assert(isa<PointerType>(Clause->getType()),
3388              "Catch operand does not have pointer type!", &LPI);
3389     } else {
3390       Assert(LPI.isFilter(i), "Clause is neither catch nor filter!", &LPI);
3391       Assert(isa<ConstantArray>(Clause) || isa<ConstantAggregateZero>(Clause),
3392              "Filter operand is not an array of constants!", &LPI);
3393     }
3394   }
3395 
3396   visitInstruction(LPI);
3397 }
3398 
3399 void Verifier::visitResumeInst(ResumeInst &RI) {
3400   Assert(RI.getFunction()->hasPersonalityFn(),
3401          "ResumeInst needs to be in a function with a personality.", &RI);
3402 
3403   if (!LandingPadResultTy)
3404     LandingPadResultTy = RI.getValue()->getType();
3405   else
3406     Assert(LandingPadResultTy == RI.getValue()->getType(),
3407            "The resume instruction should have a consistent result type "
3408            "inside a function.",
3409            &RI);
3410 
3411   visitTerminatorInst(RI);
3412 }
3413 
3414 void Verifier::visitCatchPadInst(CatchPadInst &CPI) {
3415   BasicBlock *BB = CPI.getParent();
3416 
3417   Function *F = BB->getParent();
3418   Assert(F->hasPersonalityFn(),
3419          "CatchPadInst needs to be in a function with a personality.", &CPI);
3420 
3421   Assert(isa<CatchSwitchInst>(CPI.getParentPad()),
3422          "CatchPadInst needs to be directly nested in a CatchSwitchInst.",
3423          CPI.getParentPad());
3424 
3425   // The catchpad instruction must be the first non-PHI instruction in the
3426   // block.
3427   Assert(BB->getFirstNonPHI() == &CPI,
3428          "CatchPadInst not the first non-PHI instruction in the block.", &CPI);
3429 
3430   visitEHPadPredecessors(CPI);
3431   visitFuncletPadInst(CPI);
3432 }
3433 
3434 void Verifier::visitCatchReturnInst(CatchReturnInst &CatchReturn) {
3435   Assert(isa<CatchPadInst>(CatchReturn.getOperand(0)),
3436          "CatchReturnInst needs to be provided a CatchPad", &CatchReturn,
3437          CatchReturn.getOperand(0));
3438 
3439   visitTerminatorInst(CatchReturn);
3440 }
3441 
3442 void Verifier::visitCleanupPadInst(CleanupPadInst &CPI) {
3443   BasicBlock *BB = CPI.getParent();
3444 
3445   Function *F = BB->getParent();
3446   Assert(F->hasPersonalityFn(),
3447          "CleanupPadInst needs to be in a function with a personality.", &CPI);
3448 
3449   // The cleanuppad instruction must be the first non-PHI instruction in the
3450   // block.
3451   Assert(BB->getFirstNonPHI() == &CPI,
3452          "CleanupPadInst not the first non-PHI instruction in the block.",
3453          &CPI);
3454 
3455   auto *ParentPad = CPI.getParentPad();
3456   Assert(isa<ConstantTokenNone>(ParentPad) || isa<FuncletPadInst>(ParentPad),
3457          "CleanupPadInst has an invalid parent.", &CPI);
3458 
3459   visitEHPadPredecessors(CPI);
3460   visitFuncletPadInst(CPI);
3461 }
3462 
3463 void Verifier::visitFuncletPadInst(FuncletPadInst &FPI) {
3464   User *FirstUser = nullptr;
3465   Value *FirstUnwindPad = nullptr;
3466   SmallVector<FuncletPadInst *, 8> Worklist({&FPI});
3467   SmallSet<FuncletPadInst *, 8> Seen;
3468 
3469   while (!Worklist.empty()) {
3470     FuncletPadInst *CurrentPad = Worklist.pop_back_val();
3471     Assert(Seen.insert(CurrentPad).second,
3472            "FuncletPadInst must not be nested within itself", CurrentPad);
3473     Value *UnresolvedAncestorPad = nullptr;
3474     for (User *U : CurrentPad->users()) {
3475       BasicBlock *UnwindDest;
3476       if (auto *CRI = dyn_cast<CleanupReturnInst>(U)) {
3477         UnwindDest = CRI->getUnwindDest();
3478       } else if (auto *CSI = dyn_cast<CatchSwitchInst>(U)) {
3479         // We allow catchswitch unwind to caller to nest
3480         // within an outer pad that unwinds somewhere else,
3481         // because catchswitch doesn't have a nounwind variant.
3482         // See e.g. SimplifyCFGOpt::SimplifyUnreachable.
3483         if (CSI->unwindsToCaller())
3484           continue;
3485         UnwindDest = CSI->getUnwindDest();
3486       } else if (auto *II = dyn_cast<InvokeInst>(U)) {
3487         UnwindDest = II->getUnwindDest();
3488       } else if (isa<CallInst>(U)) {
3489         // Calls which don't unwind may be found inside funclet
3490         // pads that unwind somewhere else.  We don't *require*
3491         // such calls to be annotated nounwind.
3492         continue;
3493       } else if (auto *CPI = dyn_cast<CleanupPadInst>(U)) {
3494         // The unwind dest for a cleanup can only be found by
3495         // recursive search.  Add it to the worklist, and we'll
3496         // search for its first use that determines where it unwinds.
3497         Worklist.push_back(CPI);
3498         continue;
3499       } else {
3500         Assert(isa<CatchReturnInst>(U), "Bogus funclet pad use", U);
3501         continue;
3502       }
3503 
3504       Value *UnwindPad;
3505       bool ExitsFPI;
3506       if (UnwindDest) {
3507         UnwindPad = UnwindDest->getFirstNonPHI();
3508         if (!cast<Instruction>(UnwindPad)->isEHPad())
3509           continue;
3510         Value *UnwindParent = getParentPad(UnwindPad);
3511         // Ignore unwind edges that don't exit CurrentPad.
3512         if (UnwindParent == CurrentPad)
3513           continue;
3514         // Determine whether the original funclet pad is exited,
3515         // and if we are scanning nested pads determine how many
3516         // of them are exited so we can stop searching their
3517         // children.
3518         Value *ExitedPad = CurrentPad;
3519         ExitsFPI = false;
3520         do {
3521           if (ExitedPad == &FPI) {
3522             ExitsFPI = true;
3523             // Now we can resolve any ancestors of CurrentPad up to
3524             // FPI, but not including FPI since we need to make sure
3525             // to check all direct users of FPI for consistency.
3526             UnresolvedAncestorPad = &FPI;
3527             break;
3528           }
3529           Value *ExitedParent = getParentPad(ExitedPad);
3530           if (ExitedParent == UnwindParent) {
3531             // ExitedPad is the ancestor-most pad which this unwind
3532             // edge exits, so we can resolve up to it, meaning that
3533             // ExitedParent is the first ancestor still unresolved.
3534             UnresolvedAncestorPad = ExitedParent;
3535             break;
3536           }
3537           ExitedPad = ExitedParent;
3538         } while (!isa<ConstantTokenNone>(ExitedPad));
3539       } else {
3540         // Unwinding to caller exits all pads.
3541         UnwindPad = ConstantTokenNone::get(FPI.getContext());
3542         ExitsFPI = true;
3543         UnresolvedAncestorPad = &FPI;
3544       }
3545 
3546       if (ExitsFPI) {
3547         // This unwind edge exits FPI.  Make sure it agrees with other
3548         // such edges.
3549         if (FirstUser) {
3550           Assert(UnwindPad == FirstUnwindPad, "Unwind edges out of a funclet "
3551                                               "pad must have the same unwind "
3552                                               "dest",
3553                  &FPI, U, FirstUser);
3554         } else {
3555           FirstUser = U;
3556           FirstUnwindPad = UnwindPad;
3557           // Record cleanup sibling unwinds for verifySiblingFuncletUnwinds
3558           if (isa<CleanupPadInst>(&FPI) && !isa<ConstantTokenNone>(UnwindPad) &&
3559               getParentPad(UnwindPad) == getParentPad(&FPI))
3560             SiblingFuncletInfo[&FPI] = cast<TerminatorInst>(U);
3561         }
3562       }
3563       // Make sure we visit all uses of FPI, but for nested pads stop as
3564       // soon as we know where they unwind to.
3565       if (CurrentPad != &FPI)
3566         break;
3567     }
3568     if (UnresolvedAncestorPad) {
3569       if (CurrentPad == UnresolvedAncestorPad) {
3570         // When CurrentPad is FPI itself, we don't mark it as resolved even if
3571         // we've found an unwind edge that exits it, because we need to verify
3572         // all direct uses of FPI.
3573         assert(CurrentPad == &FPI);
3574         continue;
3575       }
3576       // Pop off the worklist any nested pads that we've found an unwind
3577       // destination for.  The pads on the worklist are the uncles,
3578       // great-uncles, etc. of CurrentPad.  We've found an unwind destination
3579       // for all ancestors of CurrentPad up to but not including
3580       // UnresolvedAncestorPad.
3581       Value *ResolvedPad = CurrentPad;
3582       while (!Worklist.empty()) {
3583         Value *UnclePad = Worklist.back();
3584         Value *AncestorPad = getParentPad(UnclePad);
3585         // Walk ResolvedPad up the ancestor list until we either find the
3586         // uncle's parent or the last resolved ancestor.
3587         while (ResolvedPad != AncestorPad) {
3588           Value *ResolvedParent = getParentPad(ResolvedPad);
3589           if (ResolvedParent == UnresolvedAncestorPad) {
3590             break;
3591           }
3592           ResolvedPad = ResolvedParent;
3593         }
3594         // If the resolved ancestor search didn't find the uncle's parent,
3595         // then the uncle is not yet resolved.
3596         if (ResolvedPad != AncestorPad)
3597           break;
3598         // This uncle is resolved, so pop it from the worklist.
3599         Worklist.pop_back();
3600       }
3601     }
3602   }
3603 
3604   if (FirstUnwindPad) {
3605     if (auto *CatchSwitch = dyn_cast<CatchSwitchInst>(FPI.getParentPad())) {
3606       BasicBlock *SwitchUnwindDest = CatchSwitch->getUnwindDest();
3607       Value *SwitchUnwindPad;
3608       if (SwitchUnwindDest)
3609         SwitchUnwindPad = SwitchUnwindDest->getFirstNonPHI();
3610       else
3611         SwitchUnwindPad = ConstantTokenNone::get(FPI.getContext());
3612       Assert(SwitchUnwindPad == FirstUnwindPad,
3613              "Unwind edges out of a catch must have the same unwind dest as "
3614              "the parent catchswitch",
3615              &FPI, FirstUser, CatchSwitch);
3616     }
3617   }
3618 
3619   visitInstruction(FPI);
3620 }
3621 
3622 void Verifier::visitCatchSwitchInst(CatchSwitchInst &CatchSwitch) {
3623   BasicBlock *BB = CatchSwitch.getParent();
3624 
3625   Function *F = BB->getParent();
3626   Assert(F->hasPersonalityFn(),
3627          "CatchSwitchInst needs to be in a function with a personality.",
3628          &CatchSwitch);
3629 
3630   // The catchswitch instruction must be the first non-PHI instruction in the
3631   // block.
3632   Assert(BB->getFirstNonPHI() == &CatchSwitch,
3633          "CatchSwitchInst not the first non-PHI instruction in the block.",
3634          &CatchSwitch);
3635 
3636   auto *ParentPad = CatchSwitch.getParentPad();
3637   Assert(isa<ConstantTokenNone>(ParentPad) || isa<FuncletPadInst>(ParentPad),
3638          "CatchSwitchInst has an invalid parent.", ParentPad);
3639 
3640   if (BasicBlock *UnwindDest = CatchSwitch.getUnwindDest()) {
3641     Instruction *I = UnwindDest->getFirstNonPHI();
3642     Assert(I->isEHPad() && !isa<LandingPadInst>(I),
3643            "CatchSwitchInst must unwind to an EH block which is not a "
3644            "landingpad.",
3645            &CatchSwitch);
3646 
3647     // Record catchswitch sibling unwinds for verifySiblingFuncletUnwinds
3648     if (getParentPad(I) == ParentPad)
3649       SiblingFuncletInfo[&CatchSwitch] = &CatchSwitch;
3650   }
3651 
3652   Assert(CatchSwitch.getNumHandlers() != 0,
3653          "CatchSwitchInst cannot have empty handler list", &CatchSwitch);
3654 
3655   for (BasicBlock *Handler : CatchSwitch.handlers()) {
3656     Assert(isa<CatchPadInst>(Handler->getFirstNonPHI()),
3657            "CatchSwitchInst handlers must be catchpads", &CatchSwitch, Handler);
3658   }
3659 
3660   visitEHPadPredecessors(CatchSwitch);
3661   visitTerminatorInst(CatchSwitch);
3662 }
3663 
3664 void Verifier::visitCleanupReturnInst(CleanupReturnInst &CRI) {
3665   Assert(isa<CleanupPadInst>(CRI.getOperand(0)),
3666          "CleanupReturnInst needs to be provided a CleanupPad", &CRI,
3667          CRI.getOperand(0));
3668 
3669   if (BasicBlock *UnwindDest = CRI.getUnwindDest()) {
3670     Instruction *I = UnwindDest->getFirstNonPHI();
3671     Assert(I->isEHPad() && !isa<LandingPadInst>(I),
3672            "CleanupReturnInst must unwind to an EH block which is not a "
3673            "landingpad.",
3674            &CRI);
3675   }
3676 
3677   visitTerminatorInst(CRI);
3678 }
3679 
3680 void Verifier::verifyDominatesUse(Instruction &I, unsigned i) {
3681   Instruction *Op = cast<Instruction>(I.getOperand(i));
3682   // If the we have an invalid invoke, don't try to compute the dominance.
3683   // We already reject it in the invoke specific checks and the dominance
3684   // computation doesn't handle multiple edges.
3685   if (InvokeInst *II = dyn_cast<InvokeInst>(Op)) {
3686     if (II->getNormalDest() == II->getUnwindDest())
3687       return;
3688   }
3689 
3690   // Quick check whether the def has already been encountered in the same block.
3691   // PHI nodes are not checked to prevent accepting preceeding PHIs, because PHI
3692   // uses are defined to happen on the incoming edge, not at the instruction.
3693   //
3694   // FIXME: If this operand is a MetadataAsValue (wrapping a LocalAsMetadata)
3695   // wrapping an SSA value, assert that we've already encountered it.  See
3696   // related FIXME in Mapper::mapLocalAsMetadata in ValueMapper.cpp.
3697   if (!isa<PHINode>(I) && InstsInThisBlock.count(Op))
3698     return;
3699 
3700   const Use &U = I.getOperandUse(i);
3701   Assert(DT.dominates(Op, U),
3702          "Instruction does not dominate all uses!", Op, &I);
3703 }
3704 
3705 void Verifier::visitDereferenceableMetadata(Instruction& I, MDNode* MD) {
3706   Assert(I.getType()->isPointerTy(), "dereferenceable, dereferenceable_or_null "
3707          "apply only to pointer types", &I);
3708   Assert(isa<LoadInst>(I),
3709          "dereferenceable, dereferenceable_or_null apply only to load"
3710          " instructions, use attributes for calls or invokes", &I);
3711   Assert(MD->getNumOperands() == 1, "dereferenceable, dereferenceable_or_null "
3712          "take one operand!", &I);
3713   ConstantInt *CI = mdconst::dyn_extract<ConstantInt>(MD->getOperand(0));
3714   Assert(CI && CI->getType()->isIntegerTy(64), "dereferenceable, "
3715          "dereferenceable_or_null metadata value must be an i64!", &I);
3716 }
3717 
3718 /// verifyInstruction - Verify that an instruction is well formed.
3719 ///
3720 void Verifier::visitInstruction(Instruction &I) {
3721   BasicBlock *BB = I.getParent();
3722   Assert(BB, "Instruction not embedded in basic block!", &I);
3723 
3724   if (!isa<PHINode>(I)) {   // Check that non-phi nodes are not self referential
3725     for (User *U : I.users()) {
3726       Assert(U != (User *)&I || !DT.isReachableFromEntry(BB),
3727              "Only PHI nodes may reference their own value!", &I);
3728     }
3729   }
3730 
3731   // Check that void typed values don't have names
3732   Assert(!I.getType()->isVoidTy() || !I.hasName(),
3733          "Instruction has a name, but provides a void value!", &I);
3734 
3735   // Check that the return value of the instruction is either void or a legal
3736   // value type.
3737   Assert(I.getType()->isVoidTy() || I.getType()->isFirstClassType(),
3738          "Instruction returns a non-scalar type!", &I);
3739 
3740   // Check that the instruction doesn't produce metadata. Calls are already
3741   // checked against the callee type.
3742   Assert(!I.getType()->isMetadataTy() || isa<CallInst>(I) || isa<InvokeInst>(I),
3743          "Invalid use of metadata!", &I);
3744 
3745   // Check that all uses of the instruction, if they are instructions
3746   // themselves, actually have parent basic blocks.  If the use is not an
3747   // instruction, it is an error!
3748   for (Use &U : I.uses()) {
3749     if (Instruction *Used = dyn_cast<Instruction>(U.getUser()))
3750       Assert(Used->getParent() != nullptr,
3751              "Instruction referencing"
3752              " instruction not embedded in a basic block!",
3753              &I, Used);
3754     else {
3755       CheckFailed("Use of instruction is not an instruction!", U);
3756       return;
3757     }
3758   }
3759 
3760   for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i) {
3761     Assert(I.getOperand(i) != nullptr, "Instruction has null operand!", &I);
3762 
3763     // Check to make sure that only first-class-values are operands to
3764     // instructions.
3765     if (!I.getOperand(i)->getType()->isFirstClassType()) {
3766       Assert(false, "Instruction operands must be first-class values!", &I);
3767     }
3768 
3769     if (Function *F = dyn_cast<Function>(I.getOperand(i))) {
3770       // Check to make sure that the "address of" an intrinsic function is never
3771       // taken.
3772       Assert(
3773           !F->isIntrinsic() ||
3774               i == (isa<CallInst>(I) ? e - 1 : isa<InvokeInst>(I) ? e - 3 : 0),
3775           "Cannot take the address of an intrinsic!", &I);
3776       Assert(
3777           !F->isIntrinsic() || isa<CallInst>(I) ||
3778               F->getIntrinsicID() == Intrinsic::donothing ||
3779               F->getIntrinsicID() == Intrinsic::coro_resume ||
3780               F->getIntrinsicID() == Intrinsic::coro_destroy ||
3781               F->getIntrinsicID() == Intrinsic::experimental_patchpoint_void ||
3782               F->getIntrinsicID() == Intrinsic::experimental_patchpoint_i64 ||
3783               F->getIntrinsicID() == Intrinsic::experimental_gc_statepoint,
3784           "Cannot invoke an intrinsic other than donothing, patchpoint, "
3785           "statepoint, coro_resume or coro_destroy",
3786           &I);
3787       Assert(F->getParent() == &M, "Referencing function in another module!",
3788              &I, &M, F, F->getParent());
3789     } else if (BasicBlock *OpBB = dyn_cast<BasicBlock>(I.getOperand(i))) {
3790       Assert(OpBB->getParent() == BB->getParent(),
3791              "Referring to a basic block in another function!", &I);
3792     } else if (Argument *OpArg = dyn_cast<Argument>(I.getOperand(i))) {
3793       Assert(OpArg->getParent() == BB->getParent(),
3794              "Referring to an argument in another function!", &I);
3795     } else if (GlobalValue *GV = dyn_cast<GlobalValue>(I.getOperand(i))) {
3796       Assert(GV->getParent() == &M, "Referencing global in another module!", &I,
3797              &M, GV, GV->getParent());
3798     } else if (isa<Instruction>(I.getOperand(i))) {
3799       verifyDominatesUse(I, i);
3800     } else if (isa<InlineAsm>(I.getOperand(i))) {
3801       Assert((i + 1 == e && isa<CallInst>(I)) ||
3802                  (i + 3 == e && isa<InvokeInst>(I)),
3803              "Cannot take the address of an inline asm!", &I);
3804     } else if (ConstantExpr *CE = dyn_cast<ConstantExpr>(I.getOperand(i))) {
3805       if (CE->getType()->isPtrOrPtrVectorTy() ||
3806           !DL.getNonIntegralAddressSpaces().empty()) {
3807         // If we have a ConstantExpr pointer, we need to see if it came from an
3808         // illegal bitcast.  If the datalayout string specifies non-integral
3809         // address spaces then we also need to check for illegal ptrtoint and
3810         // inttoptr expressions.
3811         visitConstantExprsRecursively(CE);
3812       }
3813     }
3814   }
3815 
3816   if (MDNode *MD = I.getMetadata(LLVMContext::MD_fpmath)) {
3817     Assert(I.getType()->isFPOrFPVectorTy(),
3818            "fpmath requires a floating point result!", &I);
3819     Assert(MD->getNumOperands() == 1, "fpmath takes one operand!", &I);
3820     if (ConstantFP *CFP0 =
3821             mdconst::dyn_extract_or_null<ConstantFP>(MD->getOperand(0))) {
3822       const APFloat &Accuracy = CFP0->getValueAPF();
3823       Assert(&Accuracy.getSemantics() == &APFloat::IEEEsingle(),
3824              "fpmath accuracy must have float type", &I);
3825       Assert(Accuracy.isFiniteNonZero() && !Accuracy.isNegative(),
3826              "fpmath accuracy not a positive number!", &I);
3827     } else {
3828       Assert(false, "invalid fpmath accuracy!", &I);
3829     }
3830   }
3831 
3832   if (MDNode *Range = I.getMetadata(LLVMContext::MD_range)) {
3833     Assert(isa<LoadInst>(I) || isa<CallInst>(I) || isa<InvokeInst>(I),
3834            "Ranges are only for loads, calls and invokes!", &I);
3835     visitRangeMetadata(I, Range, I.getType());
3836   }
3837 
3838   if (I.getMetadata(LLVMContext::MD_nonnull)) {
3839     Assert(I.getType()->isPointerTy(), "nonnull applies only to pointer types",
3840            &I);
3841     Assert(isa<LoadInst>(I),
3842            "nonnull applies only to load instructions, use attributes"
3843            " for calls or invokes",
3844            &I);
3845   }
3846 
3847   if (MDNode *MD = I.getMetadata(LLVMContext::MD_dereferenceable))
3848     visitDereferenceableMetadata(I, MD);
3849 
3850   if (MDNode *MD = I.getMetadata(LLVMContext::MD_dereferenceable_or_null))
3851     visitDereferenceableMetadata(I, MD);
3852 
3853   if (MDNode *TBAA = I.getMetadata(LLVMContext::MD_tbaa))
3854     TBAAVerifyHelper.visitTBAAMetadata(I, TBAA);
3855 
3856   if (MDNode *AlignMD = I.getMetadata(LLVMContext::MD_align)) {
3857     Assert(I.getType()->isPointerTy(), "align applies only to pointer types",
3858            &I);
3859     Assert(isa<LoadInst>(I), "align applies only to load instructions, "
3860            "use attributes for calls or invokes", &I);
3861     Assert(AlignMD->getNumOperands() == 1, "align takes one operand!", &I);
3862     ConstantInt *CI = mdconst::dyn_extract<ConstantInt>(AlignMD->getOperand(0));
3863     Assert(CI && CI->getType()->isIntegerTy(64),
3864            "align metadata value must be an i64!", &I);
3865     uint64_t Align = CI->getZExtValue();
3866     Assert(isPowerOf2_64(Align),
3867            "align metadata value must be a power of 2!", &I);
3868     Assert(Align <= Value::MaximumAlignment,
3869            "alignment is larger that implementation defined limit", &I);
3870   }
3871 
3872   if (MDNode *N = I.getDebugLoc().getAsMDNode()) {
3873     AssertDI(isa<DILocation>(N), "invalid !dbg metadata attachment", &I, N);
3874     visitMDNode(*N);
3875   }
3876 
3877   if (auto *DII = dyn_cast<DbgInfoIntrinsic>(&I))
3878     verifyFragmentExpression(*DII);
3879 
3880   InstsInThisBlock.insert(&I);
3881 }
3882 
3883 /// Allow intrinsics to be verified in different ways.
3884 void Verifier::visitIntrinsicCallSite(Intrinsic::ID ID, CallSite CS) {
3885   Function *IF = CS.getCalledFunction();
3886   Assert(IF->isDeclaration(), "Intrinsic functions should never be defined!",
3887          IF);
3888 
3889   // Verify that the intrinsic prototype lines up with what the .td files
3890   // describe.
3891   FunctionType *IFTy = IF->getFunctionType();
3892   bool IsVarArg = IFTy->isVarArg();
3893 
3894   SmallVector<Intrinsic::IITDescriptor, 8> Table;
3895   getIntrinsicInfoTableEntries(ID, Table);
3896   ArrayRef<Intrinsic::IITDescriptor> TableRef = Table;
3897 
3898   SmallVector<Type *, 4> ArgTys;
3899   Assert(!Intrinsic::matchIntrinsicType(IFTy->getReturnType(),
3900                                         TableRef, ArgTys),
3901          "Intrinsic has incorrect return type!", IF);
3902   for (unsigned i = 0, e = IFTy->getNumParams(); i != e; ++i)
3903     Assert(!Intrinsic::matchIntrinsicType(IFTy->getParamType(i),
3904                                           TableRef, ArgTys),
3905            "Intrinsic has incorrect argument type!", IF);
3906 
3907   // Verify if the intrinsic call matches the vararg property.
3908   if (IsVarArg)
3909     Assert(!Intrinsic::matchIntrinsicVarArg(IsVarArg, TableRef),
3910            "Intrinsic was not defined with variable arguments!", IF);
3911   else
3912     Assert(!Intrinsic::matchIntrinsicVarArg(IsVarArg, TableRef),
3913            "Callsite was not defined with variable arguments!", IF);
3914 
3915   // All descriptors should be absorbed by now.
3916   Assert(TableRef.empty(), "Intrinsic has too few arguments!", IF);
3917 
3918   // Now that we have the intrinsic ID and the actual argument types (and we
3919   // know they are legal for the intrinsic!) get the intrinsic name through the
3920   // usual means.  This allows us to verify the mangling of argument types into
3921   // the name.
3922   const std::string ExpectedName = Intrinsic::getName(ID, ArgTys);
3923   Assert(ExpectedName == IF->getName(),
3924          "Intrinsic name not mangled correctly for type arguments! "
3925          "Should be: " +
3926              ExpectedName,
3927          IF);
3928 
3929   // If the intrinsic takes MDNode arguments, verify that they are either global
3930   // or are local to *this* function.
3931   for (Value *V : CS.args())
3932     if (auto *MD = dyn_cast<MetadataAsValue>(V))
3933       visitMetadataAsValue(*MD, CS.getCaller());
3934 
3935   switch (ID) {
3936   default:
3937     break;
3938   case Intrinsic::coro_id: {
3939     auto *InfoArg = CS.getArgOperand(3)->stripPointerCasts();
3940     if (isa<ConstantPointerNull>(InfoArg))
3941       break;
3942     auto *GV = dyn_cast<GlobalVariable>(InfoArg);
3943     Assert(GV && GV->isConstant() && GV->hasDefinitiveInitializer(),
3944       "info argument of llvm.coro.begin must refer to an initialized "
3945       "constant");
3946     Constant *Init = GV->getInitializer();
3947     Assert(isa<ConstantStruct>(Init) || isa<ConstantArray>(Init),
3948       "info argument of llvm.coro.begin must refer to either a struct or "
3949       "an array");
3950     break;
3951   }
3952   case Intrinsic::ctlz:  // llvm.ctlz
3953   case Intrinsic::cttz:  // llvm.cttz
3954     Assert(isa<ConstantInt>(CS.getArgOperand(1)),
3955            "is_zero_undef argument of bit counting intrinsics must be a "
3956            "constant int",
3957            CS);
3958     break;
3959   case Intrinsic::experimental_constrained_fadd:
3960   case Intrinsic::experimental_constrained_fsub:
3961   case Intrinsic::experimental_constrained_fmul:
3962   case Intrinsic::experimental_constrained_fdiv:
3963   case Intrinsic::experimental_constrained_frem:
3964     visitConstrainedFPIntrinsic(
3965         cast<ConstrainedFPIntrinsic>(*CS.getInstruction()));
3966     break;
3967   case Intrinsic::dbg_declare: // llvm.dbg.declare
3968     Assert(isa<MetadataAsValue>(CS.getArgOperand(0)),
3969            "invalid llvm.dbg.declare intrinsic call 1", CS);
3970     visitDbgIntrinsic("declare", cast<DbgDeclareInst>(*CS.getInstruction()));
3971     break;
3972   case Intrinsic::dbg_value: // llvm.dbg.value
3973     visitDbgIntrinsic("value", cast<DbgValueInst>(*CS.getInstruction()));
3974     break;
3975   case Intrinsic::memcpy:
3976   case Intrinsic::memmove:
3977   case Intrinsic::memset: {
3978     ConstantInt *AlignCI = dyn_cast<ConstantInt>(CS.getArgOperand(3));
3979     Assert(AlignCI,
3980            "alignment argument of memory intrinsics must be a constant int",
3981            CS);
3982     const APInt &AlignVal = AlignCI->getValue();
3983     Assert(AlignCI->isZero() || AlignVal.isPowerOf2(),
3984            "alignment argument of memory intrinsics must be a power of 2", CS);
3985     Assert(isa<ConstantInt>(CS.getArgOperand(4)),
3986            "isvolatile argument of memory intrinsics must be a constant int",
3987            CS);
3988     break;
3989   }
3990   case Intrinsic::memcpy_element_atomic: {
3991     ConstantInt *ElementSizeCI = dyn_cast<ConstantInt>(CS.getArgOperand(3));
3992     Assert(ElementSizeCI, "element size of the element-wise atomic memory "
3993                           "intrinsic must be a constant int",
3994            CS);
3995     const APInt &ElementSizeVal = ElementSizeCI->getValue();
3996     Assert(ElementSizeVal.isPowerOf2(),
3997            "element size of the element-wise atomic memory intrinsic "
3998            "must be a power of 2",
3999            CS);
4000 
4001     auto IsValidAlignment = [&](uint64_t Alignment) {
4002       return isPowerOf2_64(Alignment) && ElementSizeVal.ule(Alignment);
4003     };
4004 
4005     uint64_t DstAlignment = CS.getParamAlignment(0),
4006              SrcAlignment = CS.getParamAlignment(1);
4007 
4008     Assert(IsValidAlignment(DstAlignment),
4009            "incorrect alignment of the destination argument",
4010            CS);
4011     Assert(IsValidAlignment(SrcAlignment),
4012            "incorrect alignment of the source argument",
4013            CS);
4014     break;
4015   }
4016   case Intrinsic::gcroot:
4017   case Intrinsic::gcwrite:
4018   case Intrinsic::gcread:
4019     if (ID == Intrinsic::gcroot) {
4020       AllocaInst *AI =
4021         dyn_cast<AllocaInst>(CS.getArgOperand(0)->stripPointerCasts());
4022       Assert(AI, "llvm.gcroot parameter #1 must be an alloca.", CS);
4023       Assert(isa<Constant>(CS.getArgOperand(1)),
4024              "llvm.gcroot parameter #2 must be a constant.", CS);
4025       if (!AI->getAllocatedType()->isPointerTy()) {
4026         Assert(!isa<ConstantPointerNull>(CS.getArgOperand(1)),
4027                "llvm.gcroot parameter #1 must either be a pointer alloca, "
4028                "or argument #2 must be a non-null constant.",
4029                CS);
4030       }
4031     }
4032 
4033     Assert(CS.getParent()->getParent()->hasGC(),
4034            "Enclosing function does not use GC.", CS);
4035     break;
4036   case Intrinsic::init_trampoline:
4037     Assert(isa<Function>(CS.getArgOperand(1)->stripPointerCasts()),
4038            "llvm.init_trampoline parameter #2 must resolve to a function.",
4039            CS);
4040     break;
4041   case Intrinsic::prefetch:
4042     Assert(isa<ConstantInt>(CS.getArgOperand(1)) &&
4043                isa<ConstantInt>(CS.getArgOperand(2)) &&
4044                cast<ConstantInt>(CS.getArgOperand(1))->getZExtValue() < 2 &&
4045                cast<ConstantInt>(CS.getArgOperand(2))->getZExtValue() < 4,
4046            "invalid arguments to llvm.prefetch", CS);
4047     break;
4048   case Intrinsic::stackprotector:
4049     Assert(isa<AllocaInst>(CS.getArgOperand(1)->stripPointerCasts()),
4050            "llvm.stackprotector parameter #2 must resolve to an alloca.", CS);
4051     break;
4052   case Intrinsic::lifetime_start:
4053   case Intrinsic::lifetime_end:
4054   case Intrinsic::invariant_start:
4055     Assert(isa<ConstantInt>(CS.getArgOperand(0)),
4056            "size argument of memory use markers must be a constant integer",
4057            CS);
4058     break;
4059   case Intrinsic::invariant_end:
4060     Assert(isa<ConstantInt>(CS.getArgOperand(1)),
4061            "llvm.invariant.end parameter #2 must be a constant integer", CS);
4062     break;
4063 
4064   case Intrinsic::localescape: {
4065     BasicBlock *BB = CS.getParent();
4066     Assert(BB == &BB->getParent()->front(),
4067            "llvm.localescape used outside of entry block", CS);
4068     Assert(!SawFrameEscape,
4069            "multiple calls to llvm.localescape in one function", CS);
4070     for (Value *Arg : CS.args()) {
4071       if (isa<ConstantPointerNull>(Arg))
4072         continue; // Null values are allowed as placeholders.
4073       auto *AI = dyn_cast<AllocaInst>(Arg->stripPointerCasts());
4074       Assert(AI && AI->isStaticAlloca(),
4075              "llvm.localescape only accepts static allocas", CS);
4076     }
4077     FrameEscapeInfo[BB->getParent()].first = CS.getNumArgOperands();
4078     SawFrameEscape = true;
4079     break;
4080   }
4081   case Intrinsic::localrecover: {
4082     Value *FnArg = CS.getArgOperand(0)->stripPointerCasts();
4083     Function *Fn = dyn_cast<Function>(FnArg);
4084     Assert(Fn && !Fn->isDeclaration(),
4085            "llvm.localrecover first "
4086            "argument must be function defined in this module",
4087            CS);
4088     auto *IdxArg = dyn_cast<ConstantInt>(CS.getArgOperand(2));
4089     Assert(IdxArg, "idx argument of llvm.localrecover must be a constant int",
4090            CS);
4091     auto &Entry = FrameEscapeInfo[Fn];
4092     Entry.second = unsigned(
4093         std::max(uint64_t(Entry.second), IdxArg->getLimitedValue(~0U) + 1));
4094     break;
4095   }
4096 
4097   case Intrinsic::experimental_gc_statepoint:
4098     Assert(!CS.isInlineAsm(),
4099            "gc.statepoint support for inline assembly unimplemented", CS);
4100     Assert(CS.getParent()->getParent()->hasGC(),
4101            "Enclosing function does not use GC.", CS);
4102 
4103     verifyStatepoint(CS);
4104     break;
4105   case Intrinsic::experimental_gc_result: {
4106     Assert(CS.getParent()->getParent()->hasGC(),
4107            "Enclosing function does not use GC.", CS);
4108     // Are we tied to a statepoint properly?
4109     CallSite StatepointCS(CS.getArgOperand(0));
4110     const Function *StatepointFn =
4111       StatepointCS.getInstruction() ? StatepointCS.getCalledFunction() : nullptr;
4112     Assert(StatepointFn && StatepointFn->isDeclaration() &&
4113                StatepointFn->getIntrinsicID() ==
4114                    Intrinsic::experimental_gc_statepoint,
4115            "gc.result operand #1 must be from a statepoint", CS,
4116            CS.getArgOperand(0));
4117 
4118     // Assert that result type matches wrapped callee.
4119     const Value *Target = StatepointCS.getArgument(2);
4120     auto *PT = cast<PointerType>(Target->getType());
4121     auto *TargetFuncType = cast<FunctionType>(PT->getElementType());
4122     Assert(CS.getType() == TargetFuncType->getReturnType(),
4123            "gc.result result type does not match wrapped callee", CS);
4124     break;
4125   }
4126   case Intrinsic::experimental_gc_relocate: {
4127     Assert(CS.getNumArgOperands() == 3, "wrong number of arguments", CS);
4128 
4129     Assert(isa<PointerType>(CS.getType()->getScalarType()),
4130            "gc.relocate must return a pointer or a vector of pointers", CS);
4131 
4132     // Check that this relocate is correctly tied to the statepoint
4133 
4134     // This is case for relocate on the unwinding path of an invoke statepoint
4135     if (LandingPadInst *LandingPad =
4136           dyn_cast<LandingPadInst>(CS.getArgOperand(0))) {
4137 
4138       const BasicBlock *InvokeBB =
4139           LandingPad->getParent()->getUniquePredecessor();
4140 
4141       // Landingpad relocates should have only one predecessor with invoke
4142       // statepoint terminator
4143       Assert(InvokeBB, "safepoints should have unique landingpads",
4144              LandingPad->getParent());
4145       Assert(InvokeBB->getTerminator(), "safepoint block should be well formed",
4146              InvokeBB);
4147       Assert(isStatepoint(InvokeBB->getTerminator()),
4148              "gc relocate should be linked to a statepoint", InvokeBB);
4149     }
4150     else {
4151       // In all other cases relocate should be tied to the statepoint directly.
4152       // This covers relocates on a normal return path of invoke statepoint and
4153       // relocates of a call statepoint.
4154       auto Token = CS.getArgOperand(0);
4155       Assert(isa<Instruction>(Token) && isStatepoint(cast<Instruction>(Token)),
4156              "gc relocate is incorrectly tied to the statepoint", CS, Token);
4157     }
4158 
4159     // Verify rest of the relocate arguments.
4160 
4161     ImmutableCallSite StatepointCS(
4162         cast<GCRelocateInst>(*CS.getInstruction()).getStatepoint());
4163 
4164     // Both the base and derived must be piped through the safepoint.
4165     Value* Base = CS.getArgOperand(1);
4166     Assert(isa<ConstantInt>(Base),
4167            "gc.relocate operand #2 must be integer offset", CS);
4168 
4169     Value* Derived = CS.getArgOperand(2);
4170     Assert(isa<ConstantInt>(Derived),
4171            "gc.relocate operand #3 must be integer offset", CS);
4172 
4173     const int BaseIndex = cast<ConstantInt>(Base)->getZExtValue();
4174     const int DerivedIndex = cast<ConstantInt>(Derived)->getZExtValue();
4175     // Check the bounds
4176     Assert(0 <= BaseIndex && BaseIndex < (int)StatepointCS.arg_size(),
4177            "gc.relocate: statepoint base index out of bounds", CS);
4178     Assert(0 <= DerivedIndex && DerivedIndex < (int)StatepointCS.arg_size(),
4179            "gc.relocate: statepoint derived index out of bounds", CS);
4180 
4181     // Check that BaseIndex and DerivedIndex fall within the 'gc parameters'
4182     // section of the statepoint's argument.
4183     Assert(StatepointCS.arg_size() > 0,
4184            "gc.statepoint: insufficient arguments");
4185     Assert(isa<ConstantInt>(StatepointCS.getArgument(3)),
4186            "gc.statement: number of call arguments must be constant integer");
4187     const unsigned NumCallArgs =
4188         cast<ConstantInt>(StatepointCS.getArgument(3))->getZExtValue();
4189     Assert(StatepointCS.arg_size() > NumCallArgs + 5,
4190            "gc.statepoint: mismatch in number of call arguments");
4191     Assert(isa<ConstantInt>(StatepointCS.getArgument(NumCallArgs + 5)),
4192            "gc.statepoint: number of transition arguments must be "
4193            "a constant integer");
4194     const int NumTransitionArgs =
4195         cast<ConstantInt>(StatepointCS.getArgument(NumCallArgs + 5))
4196             ->getZExtValue();
4197     const int DeoptArgsStart = 4 + NumCallArgs + 1 + NumTransitionArgs + 1;
4198     Assert(isa<ConstantInt>(StatepointCS.getArgument(DeoptArgsStart)),
4199            "gc.statepoint: number of deoptimization arguments must be "
4200            "a constant integer");
4201     const int NumDeoptArgs =
4202         cast<ConstantInt>(StatepointCS.getArgument(DeoptArgsStart))
4203             ->getZExtValue();
4204     const int GCParamArgsStart = DeoptArgsStart + 1 + NumDeoptArgs;
4205     const int GCParamArgsEnd = StatepointCS.arg_size();
4206     Assert(GCParamArgsStart <= BaseIndex && BaseIndex < GCParamArgsEnd,
4207            "gc.relocate: statepoint base index doesn't fall within the "
4208            "'gc parameters' section of the statepoint call",
4209            CS);
4210     Assert(GCParamArgsStart <= DerivedIndex && DerivedIndex < GCParamArgsEnd,
4211            "gc.relocate: statepoint derived index doesn't fall within the "
4212            "'gc parameters' section of the statepoint call",
4213            CS);
4214 
4215     // Relocated value must be either a pointer type or vector-of-pointer type,
4216     // but gc_relocate does not need to return the same pointer type as the
4217     // relocated pointer. It can be casted to the correct type later if it's
4218     // desired. However, they must have the same address space and 'vectorness'
4219     GCRelocateInst &Relocate = cast<GCRelocateInst>(*CS.getInstruction());
4220     Assert(Relocate.getDerivedPtr()->getType()->getScalarType()->isPointerTy(),
4221            "gc.relocate: relocated value must be a gc pointer", CS);
4222 
4223     auto ResultType = CS.getType();
4224     auto DerivedType = Relocate.getDerivedPtr()->getType();
4225     Assert(ResultType->isVectorTy() == DerivedType->isVectorTy(),
4226            "gc.relocate: vector relocates to vector and pointer to pointer",
4227            CS);
4228     Assert(
4229         ResultType->getPointerAddressSpace() ==
4230             DerivedType->getPointerAddressSpace(),
4231         "gc.relocate: relocating a pointer shouldn't change its address space",
4232         CS);
4233     break;
4234   }
4235   case Intrinsic::eh_exceptioncode:
4236   case Intrinsic::eh_exceptionpointer: {
4237     Assert(isa<CatchPadInst>(CS.getArgOperand(0)),
4238            "eh.exceptionpointer argument must be a catchpad", CS);
4239     break;
4240   }
4241   case Intrinsic::masked_load: {
4242     Assert(CS.getType()->isVectorTy(), "masked_load: must return a vector", CS);
4243 
4244     Value *Ptr = CS.getArgOperand(0);
4245     //Value *Alignment = CS.getArgOperand(1);
4246     Value *Mask = CS.getArgOperand(2);
4247     Value *PassThru = CS.getArgOperand(3);
4248     Assert(Mask->getType()->isVectorTy(),
4249            "masked_load: mask must be vector", CS);
4250 
4251     // DataTy is the overloaded type
4252     Type *DataTy = cast<PointerType>(Ptr->getType())->getElementType();
4253     Assert(DataTy == CS.getType(),
4254            "masked_load: return must match pointer type", CS);
4255     Assert(PassThru->getType() == DataTy,
4256            "masked_load: pass through and data type must match", CS);
4257     Assert(Mask->getType()->getVectorNumElements() ==
4258            DataTy->getVectorNumElements(),
4259            "masked_load: vector mask must be same length as data", CS);
4260     break;
4261   }
4262   case Intrinsic::masked_store: {
4263     Value *Val = CS.getArgOperand(0);
4264     Value *Ptr = CS.getArgOperand(1);
4265     //Value *Alignment = CS.getArgOperand(2);
4266     Value *Mask = CS.getArgOperand(3);
4267     Assert(Mask->getType()->isVectorTy(),
4268            "masked_store: mask must be vector", CS);
4269 
4270     // DataTy is the overloaded type
4271     Type *DataTy = cast<PointerType>(Ptr->getType())->getElementType();
4272     Assert(DataTy == Val->getType(),
4273            "masked_store: storee must match pointer type", CS);
4274     Assert(Mask->getType()->getVectorNumElements() ==
4275            DataTy->getVectorNumElements(),
4276            "masked_store: vector mask must be same length as data", CS);
4277     break;
4278   }
4279 
4280   case Intrinsic::experimental_guard: {
4281     Assert(CS.isCall(), "experimental_guard cannot be invoked", CS);
4282     Assert(CS.countOperandBundlesOfType(LLVMContext::OB_deopt) == 1,
4283            "experimental_guard must have exactly one "
4284            "\"deopt\" operand bundle");
4285     break;
4286   }
4287 
4288   case Intrinsic::experimental_deoptimize: {
4289     Assert(CS.isCall(), "experimental_deoptimize cannot be invoked", CS);
4290     Assert(CS.countOperandBundlesOfType(LLVMContext::OB_deopt) == 1,
4291            "experimental_deoptimize must have exactly one "
4292            "\"deopt\" operand bundle");
4293     Assert(CS.getType() == CS.getInstruction()->getFunction()->getReturnType(),
4294            "experimental_deoptimize return type must match caller return type");
4295 
4296     if (CS.isCall()) {
4297       auto *DeoptCI = CS.getInstruction();
4298       auto *RI = dyn_cast<ReturnInst>(DeoptCI->getNextNode());
4299       Assert(RI,
4300              "calls to experimental_deoptimize must be followed by a return");
4301 
4302       if (!CS.getType()->isVoidTy() && RI)
4303         Assert(RI->getReturnValue() == DeoptCI,
4304                "calls to experimental_deoptimize must be followed by a return "
4305                "of the value computed by experimental_deoptimize");
4306     }
4307 
4308     break;
4309   }
4310   };
4311 }
4312 
4313 /// \brief Carefully grab the subprogram from a local scope.
4314 ///
4315 /// This carefully grabs the subprogram from a local scope, avoiding the
4316 /// built-in assertions that would typically fire.
4317 static DISubprogram *getSubprogram(Metadata *LocalScope) {
4318   if (!LocalScope)
4319     return nullptr;
4320 
4321   if (auto *SP = dyn_cast<DISubprogram>(LocalScope))
4322     return SP;
4323 
4324   if (auto *LB = dyn_cast<DILexicalBlockBase>(LocalScope))
4325     return getSubprogram(LB->getRawScope());
4326 
4327   // Just return null; broken scope chains are checked elsewhere.
4328   assert(!isa<DILocalScope>(LocalScope) && "Unknown type of local scope");
4329   return nullptr;
4330 }
4331 
4332 void Verifier::visitConstrainedFPIntrinsic(ConstrainedFPIntrinsic &FPI) {
4333   Assert(isa<MetadataAsValue>(FPI.getOperand(2)),
4334          "invalid rounding mode argument", &FPI);
4335   Assert(FPI.getRoundingMode() != ConstrainedFPIntrinsic::rmInvalid,
4336          "invalid rounding mode argument", &FPI);
4337   Assert(FPI.getExceptionBehavior() != ConstrainedFPIntrinsic::ebInvalid,
4338          "invalid exception behavior argument", &FPI);
4339 }
4340 
4341 template <class DbgIntrinsicTy>
4342 void Verifier::visitDbgIntrinsic(StringRef Kind, DbgIntrinsicTy &DII) {
4343   auto *MD = cast<MetadataAsValue>(DII.getArgOperand(0))->getMetadata();
4344   AssertDI(isa<ValueAsMetadata>(MD) ||
4345              (isa<MDNode>(MD) && !cast<MDNode>(MD)->getNumOperands()),
4346          "invalid llvm.dbg." + Kind + " intrinsic address/value", &DII, MD);
4347   AssertDI(isa<DILocalVariable>(DII.getRawVariable()),
4348          "invalid llvm.dbg." + Kind + " intrinsic variable", &DII,
4349          DII.getRawVariable());
4350   AssertDI(isa<DIExpression>(DII.getRawExpression()),
4351          "invalid llvm.dbg." + Kind + " intrinsic expression", &DII,
4352          DII.getRawExpression());
4353 
4354   // Ignore broken !dbg attachments; they're checked elsewhere.
4355   if (MDNode *N = DII.getDebugLoc().getAsMDNode())
4356     if (!isa<DILocation>(N))
4357       return;
4358 
4359   BasicBlock *BB = DII.getParent();
4360   Function *F = BB ? BB->getParent() : nullptr;
4361 
4362   // The scopes for variables and !dbg attachments must agree.
4363   DILocalVariable *Var = DII.getVariable();
4364   DILocation *Loc = DII.getDebugLoc();
4365   Assert(Loc, "llvm.dbg." + Kind + " intrinsic requires a !dbg attachment",
4366          &DII, BB, F);
4367 
4368   DISubprogram *VarSP = getSubprogram(Var->getRawScope());
4369   DISubprogram *LocSP = getSubprogram(Loc->getRawScope());
4370   if (!VarSP || !LocSP)
4371     return; // Broken scope chains are checked elsewhere.
4372 
4373   AssertDI(VarSP == LocSP, "mismatched subprogram between llvm.dbg." + Kind +
4374                                " variable and !dbg attachment",
4375            &DII, BB, F, Var, Var->getScope()->getSubprogram(), Loc,
4376            Loc->getScope()->getSubprogram());
4377 
4378   verifyFnArgs(DII);
4379 }
4380 
4381 static uint64_t getVariableSize(const DILocalVariable &V) {
4382   // Be careful of broken types (checked elsewhere).
4383   const Metadata *RawType = V.getRawType();
4384   while (RawType) {
4385     // Try to get the size directly.
4386     if (auto *T = dyn_cast<DIType>(RawType))
4387       if (uint64_t Size = T->getSizeInBits())
4388         return Size;
4389 
4390     if (auto *DT = dyn_cast<DIDerivedType>(RawType)) {
4391       // Look at the base type.
4392       RawType = DT->getRawBaseType();
4393       continue;
4394     }
4395 
4396     // Missing type or size.
4397     break;
4398   }
4399 
4400   // Fail gracefully.
4401   return 0;
4402 }
4403 
4404 void Verifier::verifyFragmentExpression(const DbgInfoIntrinsic &I) {
4405   DILocalVariable *V;
4406   DIExpression *E;
4407   if (auto *DVI = dyn_cast<DbgValueInst>(&I)) {
4408     V = dyn_cast_or_null<DILocalVariable>(DVI->getRawVariable());
4409     E = dyn_cast_or_null<DIExpression>(DVI->getRawExpression());
4410   } else {
4411     auto *DDI = cast<DbgDeclareInst>(&I);
4412     V = dyn_cast_or_null<DILocalVariable>(DDI->getRawVariable());
4413     E = dyn_cast_or_null<DIExpression>(DDI->getRawExpression());
4414   }
4415 
4416   // We don't know whether this intrinsic verified correctly.
4417   if (!V || !E || !E->isValid())
4418     return;
4419 
4420   // Nothing to do if this isn't a bit piece expression.
4421   auto Fragment = E->getFragmentInfo();
4422   if (!Fragment)
4423     return;
4424 
4425   // The frontend helps out GDB by emitting the members of local anonymous
4426   // unions as artificial local variables with shared storage. When SROA splits
4427   // the storage for artificial local variables that are smaller than the entire
4428   // union, the overhang piece will be outside of the allotted space for the
4429   // variable and this check fails.
4430   // FIXME: Remove this check as soon as clang stops doing this; it hides bugs.
4431   if (V->isArtificial())
4432     return;
4433 
4434   // If there's no size, the type is broken, but that should be checked
4435   // elsewhere.
4436   uint64_t VarSize = getVariableSize(*V);
4437   if (!VarSize)
4438     return;
4439 
4440   unsigned FragSize = Fragment->SizeInBits;
4441   unsigned FragOffset = Fragment->OffsetInBits;
4442   AssertDI(FragSize + FragOffset <= VarSize,
4443          "fragment is larger than or outside of variable", &I, V, E);
4444   AssertDI(FragSize != VarSize, "fragment covers entire variable", &I, V, E);
4445 }
4446 
4447 void Verifier::verifyFnArgs(const DbgInfoIntrinsic &I) {
4448   // This function does not take the scope of noninlined function arguments into
4449   // account. Don't run it if current function is nodebug, because it may
4450   // contain inlined debug intrinsics.
4451   if (!HasDebugInfo)
4452     return;
4453 
4454   DILocalVariable *Var;
4455   if (auto *DV = dyn_cast<DbgValueInst>(&I)) {
4456     // For performance reasons only check non-inlined ones.
4457     if (DV->getDebugLoc()->getInlinedAt())
4458       return;
4459     Var = DV->getVariable();
4460   } else {
4461     auto *DD = cast<DbgDeclareInst>(&I);
4462     if (DD->getDebugLoc()->getInlinedAt())
4463       return;
4464     Var = DD->getVariable();
4465   }
4466   AssertDI(Var, "dbg intrinsic without variable");
4467 
4468   unsigned ArgNo = Var->getArg();
4469   if (!ArgNo)
4470     return;
4471 
4472   // Verify there are no duplicate function argument debug info entries.
4473   // These will cause hard-to-debug assertions in the DWARF backend.
4474   if (DebugFnArgs.size() < ArgNo)
4475     DebugFnArgs.resize(ArgNo, nullptr);
4476 
4477   auto *Prev = DebugFnArgs[ArgNo - 1];
4478   DebugFnArgs[ArgNo - 1] = Var;
4479   AssertDI(!Prev || (Prev == Var), "conflicting debug info for argument", &I,
4480            Prev, Var);
4481 }
4482 
4483 void Verifier::verifyCompileUnits() {
4484   auto *CUs = M.getNamedMetadata("llvm.dbg.cu");
4485   SmallPtrSet<const Metadata *, 2> Listed;
4486   if (CUs)
4487     Listed.insert(CUs->op_begin(), CUs->op_end());
4488   for (auto *CU : CUVisited)
4489     AssertDI(Listed.count(CU), "DICompileUnit not listed in llvm.dbg.cu", CU);
4490   CUVisited.clear();
4491 }
4492 
4493 void Verifier::verifyDeoptimizeCallingConvs() {
4494   if (DeoptimizeDeclarations.empty())
4495     return;
4496 
4497   const Function *First = DeoptimizeDeclarations[0];
4498   for (auto *F : makeArrayRef(DeoptimizeDeclarations).slice(1)) {
4499     Assert(First->getCallingConv() == F->getCallingConv(),
4500            "All llvm.experimental.deoptimize declarations must have the same "
4501            "calling convention",
4502            First, F);
4503   }
4504 }
4505 
4506 //===----------------------------------------------------------------------===//
4507 //  Implement the public interfaces to this file...
4508 //===----------------------------------------------------------------------===//
4509 
4510 bool llvm::verifyFunction(const Function &f, raw_ostream *OS) {
4511   Function &F = const_cast<Function &>(f);
4512 
4513   // Don't use a raw_null_ostream.  Printing IR is expensive.
4514   Verifier V(OS, /*ShouldTreatBrokenDebugInfoAsError=*/true, *f.getParent());
4515 
4516   // Note that this function's return value is inverted from what you would
4517   // expect of a function called "verify".
4518   return !V.verify(F);
4519 }
4520 
4521 bool llvm::verifyModule(const Module &M, raw_ostream *OS,
4522                         bool *BrokenDebugInfo) {
4523   // Don't use a raw_null_ostream.  Printing IR is expensive.
4524   Verifier V(OS, /*ShouldTreatBrokenDebugInfoAsError=*/!BrokenDebugInfo, M);
4525 
4526   bool Broken = false;
4527   for (const Function &F : M)
4528     Broken |= !V.verify(F);
4529 
4530   Broken |= !V.verify();
4531   if (BrokenDebugInfo)
4532     *BrokenDebugInfo = V.hasBrokenDebugInfo();
4533   // Note that this function's return value is inverted from what you would
4534   // expect of a function called "verify".
4535   return Broken;
4536 }
4537 
4538 namespace {
4539 
4540 struct VerifierLegacyPass : public FunctionPass {
4541   static char ID;
4542 
4543   std::unique_ptr<Verifier> V;
4544   bool FatalErrors = true;
4545 
4546   VerifierLegacyPass() : FunctionPass(ID) {
4547     initializeVerifierLegacyPassPass(*PassRegistry::getPassRegistry());
4548   }
4549   explicit VerifierLegacyPass(bool FatalErrors)
4550       : FunctionPass(ID),
4551         FatalErrors(FatalErrors) {
4552     initializeVerifierLegacyPassPass(*PassRegistry::getPassRegistry());
4553   }
4554 
4555   bool doInitialization(Module &M) override {
4556     V = llvm::make_unique<Verifier>(
4557         &dbgs(), /*ShouldTreatBrokenDebugInfoAsError=*/false, M);
4558     return false;
4559   }
4560 
4561   bool runOnFunction(Function &F) override {
4562     if (!V->verify(F) && FatalErrors)
4563       report_fatal_error("Broken function found, compilation aborted!");
4564 
4565     return false;
4566   }
4567 
4568   bool doFinalization(Module &M) override {
4569     bool HasErrors = false;
4570     for (Function &F : M)
4571       if (F.isDeclaration())
4572         HasErrors |= !V->verify(F);
4573 
4574     HasErrors |= !V->verify();
4575     if (FatalErrors) {
4576       if (HasErrors)
4577         report_fatal_error("Broken module found, compilation aborted!");
4578       assert(!V->hasBrokenDebugInfo() && "Module contains invalid debug info");
4579     }
4580 
4581     // Strip broken debug info.
4582     if (V->hasBrokenDebugInfo()) {
4583       DiagnosticInfoIgnoringInvalidDebugMetadata DiagInvalid(M);
4584       M.getContext().diagnose(DiagInvalid);
4585       if (!StripDebugInfo(M))
4586         report_fatal_error("Failed to strip malformed debug info");
4587     }
4588     return false;
4589   }
4590 
4591   void getAnalysisUsage(AnalysisUsage &AU) const override {
4592     AU.setPreservesAll();
4593   }
4594 };
4595 
4596 } // end anonymous namespace
4597 
4598 /// Helper to issue failure from the TBAA verification
4599 template <typename... Tys> void TBAAVerifier::CheckFailed(Tys &&... Args) {
4600   if (Diagnostic)
4601     return Diagnostic->CheckFailed(Args...);
4602 }
4603 
4604 #define AssertTBAA(C, ...)                                                     \
4605   do {                                                                         \
4606     if (!(C)) {                                                                \
4607       CheckFailed(__VA_ARGS__);                                                \
4608       return false;                                                            \
4609     }                                                                          \
4610   } while (false)
4611 
4612 /// Verify that \p BaseNode can be used as the "base type" in the struct-path
4613 /// TBAA scheme.  This means \p BaseNode is either a scalar node, or a
4614 /// struct-type node describing an aggregate data structure (like a struct).
4615 TBAAVerifier::TBAABaseNodeSummary
4616 TBAAVerifier::verifyTBAABaseNode(Instruction &I, const MDNode *BaseNode) {
4617   if (BaseNode->getNumOperands() < 2) {
4618     CheckFailed("Base nodes must have at least two operands", &I, BaseNode);
4619     return {true, ~0u};
4620   }
4621 
4622   auto Itr = TBAABaseNodes.find(BaseNode);
4623   if (Itr != TBAABaseNodes.end())
4624     return Itr->second;
4625 
4626   auto Result = verifyTBAABaseNodeImpl(I, BaseNode);
4627   auto InsertResult = TBAABaseNodes.insert({BaseNode, Result});
4628   (void)InsertResult;
4629   assert(InsertResult.second && "We just checked!");
4630   return Result;
4631 }
4632 
4633 TBAAVerifier::TBAABaseNodeSummary
4634 TBAAVerifier::verifyTBAABaseNodeImpl(Instruction &I, const MDNode *BaseNode) {
4635   const TBAAVerifier::TBAABaseNodeSummary InvalidNode = {true, ~0u};
4636 
4637   if (BaseNode->getNumOperands() == 2) {
4638     // Scalar nodes can only be accessed at offset 0.
4639     return isValidScalarTBAANode(BaseNode)
4640                ? TBAAVerifier::TBAABaseNodeSummary({false, 0})
4641                : InvalidNode;
4642   }
4643 
4644   if (BaseNode->getNumOperands() % 2 != 1) {
4645     CheckFailed("Struct tag nodes must have an odd number of operands!",
4646                 BaseNode);
4647     return InvalidNode;
4648   }
4649 
4650   if (!isa<MDString>(BaseNode->getOperand(0))) {
4651     CheckFailed("Struct tag nodes have a string as their first operand",
4652                 BaseNode);
4653     return InvalidNode;
4654   }
4655 
4656   bool Failed = false;
4657 
4658   Optional<APInt> PrevOffset;
4659   unsigned BitWidth = ~0u;
4660 
4661   // We've already checked that BaseNode is not a degenerate root node with one
4662   // operand in \c verifyTBAABaseNode, so this loop should run at least once.
4663   for (unsigned Idx = 1; Idx < BaseNode->getNumOperands(); Idx += 2) {
4664     const MDOperand &FieldTy = BaseNode->getOperand(Idx);
4665     const MDOperand &FieldOffset = BaseNode->getOperand(Idx + 1);
4666     if (!isa<MDNode>(FieldTy)) {
4667       CheckFailed("Incorrect field entry in struct type node!", &I, BaseNode);
4668       Failed = true;
4669       continue;
4670     }
4671 
4672     auto *OffsetEntryCI =
4673         mdconst::dyn_extract_or_null<ConstantInt>(FieldOffset);
4674     if (!OffsetEntryCI) {
4675       CheckFailed("Offset entries must be constants!", &I, BaseNode);
4676       Failed = true;
4677       continue;
4678     }
4679 
4680     if (BitWidth == ~0u)
4681       BitWidth = OffsetEntryCI->getBitWidth();
4682 
4683     if (OffsetEntryCI->getBitWidth() != BitWidth) {
4684       CheckFailed(
4685           "Bitwidth between the offsets and struct type entries must match", &I,
4686           BaseNode);
4687       Failed = true;
4688       continue;
4689     }
4690 
4691     // NB! As far as I can tell, we generate a non-strictly increasing offset
4692     // sequence only from structs that have zero size bit fields.  When
4693     // recursing into a contained struct in \c getFieldNodeFromTBAABaseNode we
4694     // pick the field lexically the latest in struct type metadata node.  This
4695     // mirrors the actual behavior of the alias analysis implementation.
4696     bool IsAscending =
4697         !PrevOffset || PrevOffset->ule(OffsetEntryCI->getValue());
4698 
4699     if (!IsAscending) {
4700       CheckFailed("Offsets must be increasing!", &I, BaseNode);
4701       Failed = true;
4702     }
4703 
4704     PrevOffset = OffsetEntryCI->getValue();
4705   }
4706 
4707   return Failed ? InvalidNode
4708                 : TBAAVerifier::TBAABaseNodeSummary(false, BitWidth);
4709 }
4710 
4711 static bool IsRootTBAANode(const MDNode *MD) {
4712   return MD->getNumOperands() < 2;
4713 }
4714 
4715 static bool IsScalarTBAANodeImpl(const MDNode *MD,
4716                                  SmallPtrSetImpl<const MDNode *> &Visited) {
4717   if (MD->getNumOperands() != 2 && MD->getNumOperands() != 3)
4718     return false;
4719 
4720   if (!isa<MDString>(MD->getOperand(0)))
4721     return false;
4722 
4723   if (MD->getNumOperands() == 3) {
4724     auto *Offset = mdconst::dyn_extract<ConstantInt>(MD->getOperand(2));
4725     if (!(Offset && Offset->isZero() && isa<MDString>(MD->getOperand(0))))
4726       return false;
4727   }
4728 
4729   auto *Parent = dyn_cast_or_null<MDNode>(MD->getOperand(1));
4730   return Parent && Visited.insert(Parent).second &&
4731          (IsRootTBAANode(Parent) || IsScalarTBAANodeImpl(Parent, Visited));
4732 }
4733 
4734 bool TBAAVerifier::isValidScalarTBAANode(const MDNode *MD) {
4735   auto ResultIt = TBAAScalarNodes.find(MD);
4736   if (ResultIt != TBAAScalarNodes.end())
4737     return ResultIt->second;
4738 
4739   SmallPtrSet<const MDNode *, 4> Visited;
4740   bool Result = IsScalarTBAANodeImpl(MD, Visited);
4741   auto InsertResult = TBAAScalarNodes.insert({MD, Result});
4742   (void)InsertResult;
4743   assert(InsertResult.second && "Just checked!");
4744 
4745   return Result;
4746 }
4747 
4748 /// Returns the field node at the offset \p Offset in \p BaseNode.  Update \p
4749 /// Offset in place to be the offset within the field node returned.
4750 ///
4751 /// We assume we've okayed \p BaseNode via \c verifyTBAABaseNode.
4752 MDNode *TBAAVerifier::getFieldNodeFromTBAABaseNode(Instruction &I,
4753                                                    const MDNode *BaseNode,
4754                                                    APInt &Offset) {
4755   assert(BaseNode->getNumOperands() >= 2 && "Invalid base node!");
4756 
4757   // Scalar nodes have only one possible "field" -- their parent in the access
4758   // hierarchy.  Offset must be zero at this point, but our caller is supposed
4759   // to Assert that.
4760   if (BaseNode->getNumOperands() == 2)
4761     return cast<MDNode>(BaseNode->getOperand(1));
4762 
4763   for (unsigned Idx = 1; Idx < BaseNode->getNumOperands(); Idx += 2) {
4764     auto *OffsetEntryCI =
4765         mdconst::extract<ConstantInt>(BaseNode->getOperand(Idx + 1));
4766     if (OffsetEntryCI->getValue().ugt(Offset)) {
4767       if (Idx == 1) {
4768         CheckFailed("Could not find TBAA parent in struct type node", &I,
4769                     BaseNode, &Offset);
4770         return nullptr;
4771       }
4772 
4773       auto *PrevOffsetEntryCI =
4774           mdconst::extract<ConstantInt>(BaseNode->getOperand(Idx - 1));
4775       Offset -= PrevOffsetEntryCI->getValue();
4776       return cast<MDNode>(BaseNode->getOperand(Idx - 2));
4777     }
4778   }
4779 
4780   auto *LastOffsetEntryCI = mdconst::extract<ConstantInt>(
4781       BaseNode->getOperand(BaseNode->getNumOperands() - 1));
4782 
4783   Offset -= LastOffsetEntryCI->getValue();
4784   return cast<MDNode>(BaseNode->getOperand(BaseNode->getNumOperands() - 2));
4785 }
4786 
4787 bool TBAAVerifier::visitTBAAMetadata(Instruction &I, const MDNode *MD) {
4788   AssertTBAA(isa<LoadInst>(I) || isa<StoreInst>(I) || isa<CallInst>(I) ||
4789                  isa<VAArgInst>(I) || isa<AtomicRMWInst>(I) ||
4790                  isa<AtomicCmpXchgInst>(I),
4791              "TBAA is only for loads, stores and calls!", &I);
4792 
4793   bool IsStructPathTBAA =
4794       isa<MDNode>(MD->getOperand(0)) && MD->getNumOperands() >= 3;
4795 
4796   AssertTBAA(
4797       IsStructPathTBAA,
4798       "Old-style TBAA is no longer allowed, use struct-path TBAA instead", &I);
4799 
4800   AssertTBAA(MD->getNumOperands() < 5,
4801              "Struct tag metadata must have either 3 or 4 operands", &I, MD);
4802 
4803   MDNode *BaseNode = dyn_cast_or_null<MDNode>(MD->getOperand(0));
4804   MDNode *AccessType = dyn_cast_or_null<MDNode>(MD->getOperand(1));
4805 
4806   if (MD->getNumOperands() == 4) {
4807     auto *IsImmutableCI =
4808         mdconst::dyn_extract_or_null<ConstantInt>(MD->getOperand(3));
4809     AssertTBAA(IsImmutableCI,
4810                "Immutability tag on struct tag metadata must be a constant", &I,
4811                MD);
4812     AssertTBAA(
4813         IsImmutableCI->isZero() || IsImmutableCI->isOne(),
4814         "Immutability part of the struct tag metadata must be either 0 or 1",
4815         &I, MD);
4816   }
4817 
4818   AssertTBAA(BaseNode && AccessType,
4819              "Malformed struct tag metadata:  base and access-type "
4820              "should be non-null and point to Metadata nodes",
4821              &I, MD, BaseNode, AccessType);
4822 
4823   AssertTBAA(isValidScalarTBAANode(AccessType),
4824              "Access type node must be a valid scalar type", &I, MD,
4825              AccessType);
4826 
4827   auto *OffsetCI = mdconst::dyn_extract_or_null<ConstantInt>(MD->getOperand(2));
4828   AssertTBAA(OffsetCI, "Offset must be constant integer", &I, MD);
4829 
4830   APInt Offset = OffsetCI->getValue();
4831   bool SeenAccessTypeInPath = false;
4832 
4833   SmallPtrSet<MDNode *, 4> StructPath;
4834 
4835   for (/* empty */; BaseNode && !IsRootTBAANode(BaseNode);
4836        BaseNode = getFieldNodeFromTBAABaseNode(I, BaseNode, Offset)) {
4837     if (!StructPath.insert(BaseNode).second) {
4838       CheckFailed("Cycle detected in struct path", &I, MD);
4839       return false;
4840     }
4841 
4842     bool Invalid;
4843     unsigned BaseNodeBitWidth;
4844     std::tie(Invalid, BaseNodeBitWidth) = verifyTBAABaseNode(I, BaseNode);
4845 
4846     // If the base node is invalid in itself, then we've already printed all the
4847     // errors we wanted to print.
4848     if (Invalid)
4849       return false;
4850 
4851     SeenAccessTypeInPath |= BaseNode == AccessType;
4852 
4853     if (isValidScalarTBAANode(BaseNode) || BaseNode == AccessType)
4854       AssertTBAA(Offset == 0, "Offset not zero at the point of scalar access",
4855                  &I, MD, &Offset);
4856 
4857     AssertTBAA(BaseNodeBitWidth == Offset.getBitWidth() ||
4858                    (BaseNodeBitWidth == 0 && Offset == 0),
4859                "Access bit-width not the same as description bit-width", &I, MD,
4860                BaseNodeBitWidth, Offset.getBitWidth());
4861   }
4862 
4863   AssertTBAA(SeenAccessTypeInPath, "Did not see access type in access path!",
4864              &I, MD);
4865   return true;
4866 }
4867 
4868 char VerifierLegacyPass::ID = 0;
4869 INITIALIZE_PASS(VerifierLegacyPass, "verify", "Module Verifier", false, false)
4870 
4871 FunctionPass *llvm::createVerifierPass(bool FatalErrors) {
4872   return new VerifierLegacyPass(FatalErrors);
4873 }
4874 
4875 AnalysisKey VerifierAnalysis::Key;
4876 VerifierAnalysis::Result VerifierAnalysis::run(Module &M,
4877                                                ModuleAnalysisManager &) {
4878   Result Res;
4879   Res.IRBroken = llvm::verifyModule(M, &dbgs(), &Res.DebugInfoBroken);
4880   return Res;
4881 }
4882 
4883 VerifierAnalysis::Result VerifierAnalysis::run(Function &F,
4884                                                FunctionAnalysisManager &) {
4885   return { llvm::verifyFunction(F, &dbgs()), false };
4886 }
4887 
4888 PreservedAnalyses VerifierPass::run(Module &M, ModuleAnalysisManager &AM) {
4889   auto Res = AM.getResult<VerifierAnalysis>(M);
4890   if (FatalErrors) {
4891     if (Res.IRBroken)
4892       report_fatal_error("Broken module found, compilation aborted!");
4893     assert(!Res.DebugInfoBroken && "Module contains invalid debug info");
4894   }
4895 
4896   // Strip broken debug info.
4897   if (Res.DebugInfoBroken) {
4898     DiagnosticInfoIgnoringInvalidDebugMetadata DiagInvalid(M);
4899     M.getContext().diagnose(DiagInvalid);
4900     if (!StripDebugInfo(M))
4901       report_fatal_error("Failed to strip malformed debug info");
4902   }
4903   return PreservedAnalyses::all();
4904 }
4905 
4906 PreservedAnalyses VerifierPass::run(Function &F, FunctionAnalysisManager &AM) {
4907   auto res = AM.getResult<VerifierAnalysis>(F);
4908   if (res.IRBroken && FatalErrors)
4909     report_fatal_error("Broken function found, compilation aborted!");
4910 
4911   return PreservedAnalyses::all();
4912 }
4913