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 // * All landingpad instructions must use the same personality function with 43 // the same function. 44 // * All other things that are tested by asserts spread about the code... 45 // 46 //===----------------------------------------------------------------------===// 47 48 #include "llvm/IR/Verifier.h" 49 #include "llvm/ADT/STLExtras.h" 50 #include "llvm/ADT/SetVector.h" 51 #include "llvm/ADT/SmallPtrSet.h" 52 #include "llvm/ADT/SmallVector.h" 53 #include "llvm/ADT/StringExtras.h" 54 #include "llvm/IR/CFG.h" 55 #include "llvm/IR/CallSite.h" 56 #include "llvm/IR/CallingConv.h" 57 #include "llvm/IR/ConstantRange.h" 58 #include "llvm/IR/Constants.h" 59 #include "llvm/IR/DataLayout.h" 60 #include "llvm/IR/DebugInfo.h" 61 #include "llvm/IR/DerivedTypes.h" 62 #include "llvm/IR/Dominators.h" 63 #include "llvm/IR/InlineAsm.h" 64 #include "llvm/IR/InstIterator.h" 65 #include "llvm/IR/InstVisitor.h" 66 #include "llvm/IR/IntrinsicInst.h" 67 #include "llvm/IR/LLVMContext.h" 68 #include "llvm/IR/Metadata.h" 69 #include "llvm/IR/Module.h" 70 #include "llvm/IR/PassManager.h" 71 #include "llvm/IR/Statepoint.h" 72 #include "llvm/Pass.h" 73 #include "llvm/Support/CommandLine.h" 74 #include "llvm/Support/Debug.h" 75 #include "llvm/Support/ErrorHandling.h" 76 #include "llvm/Support/raw_ostream.h" 77 #include <algorithm> 78 #include <cstdarg> 79 using namespace llvm; 80 81 static cl::opt<bool> VerifyDebugInfo("verify-debug-info", cl::init(true)); 82 83 namespace { 84 struct VerifierSupport { 85 raw_ostream &OS; 86 const Module *M; 87 88 /// \brief Track the brokenness of the module while recursively visiting. 89 bool Broken; 90 91 explicit VerifierSupport(raw_ostream &OS) 92 : OS(OS), M(nullptr), Broken(false) {} 93 94 private: 95 void Write(const Value *V) { 96 if (!V) 97 return; 98 if (isa<Instruction>(V)) { 99 OS << *V << '\n'; 100 } else { 101 V->printAsOperand(OS, true, M); 102 OS << '\n'; 103 } 104 } 105 106 void Write(const Metadata *MD) { 107 if (!MD) 108 return; 109 MD->print(OS, M); 110 OS << '\n'; 111 } 112 113 template <class T> void Write(const MDTupleTypedArrayWrapper<T> &MD) { 114 Write(MD.get()); 115 } 116 117 void Write(const NamedMDNode *NMD) { 118 if (!NMD) 119 return; 120 NMD->print(OS); 121 OS << '\n'; 122 } 123 124 void Write(Type *T) { 125 if (!T) 126 return; 127 OS << ' ' << *T; 128 } 129 130 void Write(const Comdat *C) { 131 if (!C) 132 return; 133 OS << *C; 134 } 135 136 template <typename T1, typename... Ts> 137 void WriteTs(const T1 &V1, const Ts &... Vs) { 138 Write(V1); 139 WriteTs(Vs...); 140 } 141 142 template <typename... Ts> void WriteTs() {} 143 144 public: 145 /// \brief A check failed, so printout out the condition and the message. 146 /// 147 /// This provides a nice place to put a breakpoint if you want to see why 148 /// something is not correct. 149 void CheckFailed(const Twine &Message) { 150 OS << Message << '\n'; 151 Broken = true; 152 } 153 154 /// \brief A check failed (with values to print). 155 /// 156 /// This calls the Message-only version so that the above is easier to set a 157 /// breakpoint on. 158 template <typename T1, typename... Ts> 159 void CheckFailed(const Twine &Message, const T1 &V1, const Ts &... Vs) { 160 CheckFailed(Message); 161 WriteTs(V1, Vs...); 162 } 163 }; 164 165 class Verifier : public InstVisitor<Verifier>, VerifierSupport { 166 friend class InstVisitor<Verifier>; 167 168 LLVMContext *Context; 169 DominatorTree DT; 170 171 /// \brief When verifying a basic block, keep track of all of the 172 /// instructions we have seen so far. 173 /// 174 /// This allows us to do efficient dominance checks for the case when an 175 /// instruction has an operand that is an instruction in the same block. 176 SmallPtrSet<Instruction *, 16> InstsInThisBlock; 177 178 /// \brief Keep track of the metadata nodes that have been checked already. 179 SmallPtrSet<const Metadata *, 32> MDNodes; 180 181 /// \brief Track unresolved string-based type references. 182 SmallDenseMap<const MDString *, const MDNode *, 32> UnresolvedTypeRefs; 183 184 /// \brief The personality function referenced by the LandingPadInsts. 185 /// All LandingPadInsts within the same function must use the same 186 /// personality function. 187 const Value *PersonalityFn; 188 189 /// \brief Whether we've seen a call to @llvm.frameescape in this function 190 /// already. 191 bool SawFrameEscape; 192 193 /// Stores the count of how many objects were passed to llvm.frameescape for a 194 /// given function and the largest index passed to llvm.framerecover. 195 DenseMap<Function *, std::pair<unsigned, unsigned>> FrameEscapeInfo; 196 197 public: 198 explicit Verifier(raw_ostream &OS) 199 : VerifierSupport(OS), Context(nullptr), PersonalityFn(nullptr), 200 SawFrameEscape(false) {} 201 202 bool verify(const Function &F) { 203 M = F.getParent(); 204 Context = &M->getContext(); 205 206 // First ensure the function is well-enough formed to compute dominance 207 // information. 208 if (F.empty()) { 209 OS << "Function '" << F.getName() 210 << "' does not contain an entry block!\n"; 211 return false; 212 } 213 for (Function::const_iterator I = F.begin(), E = F.end(); I != E; ++I) { 214 if (I->empty() || !I->back().isTerminator()) { 215 OS << "Basic Block in function '" << F.getName() 216 << "' does not have terminator!\n"; 217 I->printAsOperand(OS, true); 218 OS << "\n"; 219 return false; 220 } 221 } 222 223 // Now directly compute a dominance tree. We don't rely on the pass 224 // manager to provide this as it isolates us from a potentially 225 // out-of-date dominator tree and makes it significantly more complex to 226 // run this code outside of a pass manager. 227 // FIXME: It's really gross that we have to cast away constness here. 228 DT.recalculate(const_cast<Function &>(F)); 229 230 Broken = false; 231 // FIXME: We strip const here because the inst visitor strips const. 232 visit(const_cast<Function &>(F)); 233 InstsInThisBlock.clear(); 234 PersonalityFn = nullptr; 235 SawFrameEscape = false; 236 237 return !Broken; 238 } 239 240 bool verify(const Module &M) { 241 this->M = &M; 242 Context = &M.getContext(); 243 Broken = false; 244 245 // Scan through, checking all of the external function's linkage now... 246 for (Module::const_iterator I = M.begin(), E = M.end(); I != E; ++I) { 247 visitGlobalValue(*I); 248 249 // Check to make sure function prototypes are okay. 250 if (I->isDeclaration()) 251 visitFunction(*I); 252 } 253 254 // Now that we've visited every function, verify that we never asked to 255 // recover a frame index that wasn't escaped. 256 verifyFrameRecoverIndices(); 257 258 for (Module::const_global_iterator I = M.global_begin(), E = M.global_end(); 259 I != E; ++I) 260 visitGlobalVariable(*I); 261 262 for (Module::const_alias_iterator I = M.alias_begin(), E = M.alias_end(); 263 I != E; ++I) 264 visitGlobalAlias(*I); 265 266 for (Module::const_named_metadata_iterator I = M.named_metadata_begin(), 267 E = M.named_metadata_end(); 268 I != E; ++I) 269 visitNamedMDNode(*I); 270 271 for (const StringMapEntry<Comdat> &SMEC : M.getComdatSymbolTable()) 272 visitComdat(SMEC.getValue()); 273 274 visitModuleFlags(M); 275 visitModuleIdents(M); 276 277 // Verify type referneces last. 278 verifyTypeRefs(); 279 280 return !Broken; 281 } 282 283 private: 284 // Verification methods... 285 void visitGlobalValue(const GlobalValue &GV); 286 void visitGlobalVariable(const GlobalVariable &GV); 287 void visitGlobalAlias(const GlobalAlias &GA); 288 void visitAliaseeSubExpr(const GlobalAlias &A, const Constant &C); 289 void visitAliaseeSubExpr(SmallPtrSetImpl<const GlobalAlias *> &Visited, 290 const GlobalAlias &A, const Constant &C); 291 void visitNamedMDNode(const NamedMDNode &NMD); 292 void visitMDNode(const MDNode &MD); 293 void visitMetadataAsValue(const MetadataAsValue &MD, Function *F); 294 void visitValueAsMetadata(const ValueAsMetadata &MD, Function *F); 295 void visitComdat(const Comdat &C); 296 void visitModuleIdents(const Module &M); 297 void visitModuleFlags(const Module &M); 298 void visitModuleFlag(const MDNode *Op, 299 DenseMap<const MDString *, const MDNode *> &SeenIDs, 300 SmallVectorImpl<const MDNode *> &Requirements); 301 void visitFunction(const Function &F); 302 void visitBasicBlock(BasicBlock &BB); 303 void visitRangeMetadata(Instruction& I, MDNode* Range, Type* Ty); 304 305 template <class Ty> bool isValidMetadataArray(const MDTuple &N); 306 #define HANDLE_SPECIALIZED_MDNODE_LEAF(CLASS) void visit##CLASS(const CLASS &N); 307 #include "llvm/IR/Metadata.def" 308 void visitDIScope(const DIScope &N); 309 void visitDIDerivedTypeBase(const DIDerivedTypeBase &N); 310 void visitDIVariable(const DIVariable &N); 311 void visitDILexicalBlockBase(const DILexicalBlockBase &N); 312 void visitDITemplateParameter(const DITemplateParameter &N); 313 314 void visitTemplateParams(const MDNode &N, const Metadata &RawParams); 315 316 /// \brief Check for a valid string-based type reference. 317 /// 318 /// Checks if \c MD is a string-based type reference. If it is, keeps track 319 /// of it (and its user, \c N) for error messages later. 320 bool isValidUUID(const MDNode &N, const Metadata *MD); 321 322 /// \brief Check for a valid type reference. 323 /// 324 /// Checks for subclasses of \a DIType, or \a isValidUUID(). 325 bool isTypeRef(const MDNode &N, const Metadata *MD); 326 327 /// \brief Check for a valid scope reference. 328 /// 329 /// Checks for subclasses of \a DIScope, or \a isValidUUID(). 330 bool isScopeRef(const MDNode &N, const Metadata *MD); 331 332 /// \brief Check for a valid debug info reference. 333 /// 334 /// Checks for subclasses of \a DINode, or \a isValidUUID(). 335 bool isDIRef(const MDNode &N, const Metadata *MD); 336 337 // InstVisitor overrides... 338 using InstVisitor<Verifier>::visit; 339 void visit(Instruction &I); 340 341 void visitTruncInst(TruncInst &I); 342 void visitZExtInst(ZExtInst &I); 343 void visitSExtInst(SExtInst &I); 344 void visitFPTruncInst(FPTruncInst &I); 345 void visitFPExtInst(FPExtInst &I); 346 void visitFPToUIInst(FPToUIInst &I); 347 void visitFPToSIInst(FPToSIInst &I); 348 void visitUIToFPInst(UIToFPInst &I); 349 void visitSIToFPInst(SIToFPInst &I); 350 void visitIntToPtrInst(IntToPtrInst &I); 351 void visitPtrToIntInst(PtrToIntInst &I); 352 void visitBitCastInst(BitCastInst &I); 353 void visitAddrSpaceCastInst(AddrSpaceCastInst &I); 354 void visitPHINode(PHINode &PN); 355 void visitBinaryOperator(BinaryOperator &B); 356 void visitICmpInst(ICmpInst &IC); 357 void visitFCmpInst(FCmpInst &FC); 358 void visitExtractElementInst(ExtractElementInst &EI); 359 void visitInsertElementInst(InsertElementInst &EI); 360 void visitShuffleVectorInst(ShuffleVectorInst &EI); 361 void visitVAArgInst(VAArgInst &VAA) { visitInstruction(VAA); } 362 void visitCallInst(CallInst &CI); 363 void visitInvokeInst(InvokeInst &II); 364 void visitGetElementPtrInst(GetElementPtrInst &GEP); 365 void visitLoadInst(LoadInst &LI); 366 void visitStoreInst(StoreInst &SI); 367 void verifyDominatesUse(Instruction &I, unsigned i); 368 void visitInstruction(Instruction &I); 369 void visitTerminatorInst(TerminatorInst &I); 370 void visitBranchInst(BranchInst &BI); 371 void visitReturnInst(ReturnInst &RI); 372 void visitSwitchInst(SwitchInst &SI); 373 void visitIndirectBrInst(IndirectBrInst &BI); 374 void visitSelectInst(SelectInst &SI); 375 void visitUserOp1(Instruction &I); 376 void visitUserOp2(Instruction &I) { visitUserOp1(I); } 377 void visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI); 378 template <class DbgIntrinsicTy> 379 void visitDbgIntrinsic(StringRef Kind, DbgIntrinsicTy &DII); 380 void visitAtomicCmpXchgInst(AtomicCmpXchgInst &CXI); 381 void visitAtomicRMWInst(AtomicRMWInst &RMWI); 382 void visitFenceInst(FenceInst &FI); 383 void visitAllocaInst(AllocaInst &AI); 384 void visitExtractValueInst(ExtractValueInst &EVI); 385 void visitInsertValueInst(InsertValueInst &IVI); 386 void visitLandingPadInst(LandingPadInst &LPI); 387 388 void VerifyCallSite(CallSite CS); 389 void verifyMustTailCall(CallInst &CI); 390 bool PerformTypeCheck(Intrinsic::ID ID, Function *F, Type *Ty, int VT, 391 unsigned ArgNo, std::string &Suffix); 392 bool VerifyIntrinsicType(Type *Ty, ArrayRef<Intrinsic::IITDescriptor> &Infos, 393 SmallVectorImpl<Type *> &ArgTys); 394 bool VerifyIntrinsicIsVarArg(bool isVarArg, 395 ArrayRef<Intrinsic::IITDescriptor> &Infos); 396 bool VerifyAttributeCount(AttributeSet Attrs, unsigned Params); 397 void VerifyAttributeTypes(AttributeSet Attrs, unsigned Idx, bool isFunction, 398 const Value *V); 399 void VerifyParameterAttrs(AttributeSet Attrs, unsigned Idx, Type *Ty, 400 bool isReturnValue, const Value *V); 401 void VerifyFunctionAttrs(FunctionType *FT, AttributeSet Attrs, 402 const Value *V); 403 void VerifyFunctionMetadata( 404 const SmallVector<std::pair<unsigned, MDNode *>, 4> MDs); 405 406 void VerifyConstantExprBitcastType(const ConstantExpr *CE); 407 void VerifyStatepoint(ImmutableCallSite CS); 408 void verifyFrameRecoverIndices(); 409 410 // Module-level debug info verification... 411 void verifyTypeRefs(); 412 template <class MapTy> 413 void verifyBitPieceExpression(const DbgInfoIntrinsic &I, 414 const MapTy &TypeRefs); 415 void visitUnresolvedTypeRef(const MDString *S, const MDNode *N); 416 }; 417 } // End anonymous namespace 418 419 // Assert - We know that cond should be true, if not print an error message. 420 #define Assert(C, ...) \ 421 do { if (!(C)) { CheckFailed(__VA_ARGS__); return; } } while (0) 422 423 void Verifier::visit(Instruction &I) { 424 for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i) 425 Assert(I.getOperand(i) != nullptr, "Operand is null", &I); 426 InstVisitor<Verifier>::visit(I); 427 } 428 429 430 void Verifier::visitGlobalValue(const GlobalValue &GV) { 431 Assert(!GV.isDeclaration() || GV.hasExternalLinkage() || 432 GV.hasExternalWeakLinkage(), 433 "Global is external, but doesn't have external or weak linkage!", &GV); 434 435 Assert(GV.getAlignment() <= Value::MaximumAlignment, 436 "huge alignment values are unsupported", &GV); 437 Assert(!GV.hasAppendingLinkage() || isa<GlobalVariable>(GV), 438 "Only global variables can have appending linkage!", &GV); 439 440 if (GV.hasAppendingLinkage()) { 441 const GlobalVariable *GVar = dyn_cast<GlobalVariable>(&GV); 442 Assert(GVar && GVar->getValueType()->isArrayTy(), 443 "Only global arrays can have appending linkage!", GVar); 444 } 445 } 446 447 void Verifier::visitGlobalVariable(const GlobalVariable &GV) { 448 if (GV.hasInitializer()) { 449 Assert(GV.getInitializer()->getType() == GV.getType()->getElementType(), 450 "Global variable initializer type does not match global " 451 "variable type!", 452 &GV); 453 454 // If the global has common linkage, it must have a zero initializer and 455 // cannot be constant. 456 if (GV.hasCommonLinkage()) { 457 Assert(GV.getInitializer()->isNullValue(), 458 "'common' global must have a zero initializer!", &GV); 459 Assert(!GV.isConstant(), "'common' global may not be marked constant!", 460 &GV); 461 Assert(!GV.hasComdat(), "'common' global may not be in a Comdat!", &GV); 462 } 463 } else { 464 Assert(GV.hasExternalLinkage() || GV.hasExternalWeakLinkage(), 465 "invalid linkage type for global declaration", &GV); 466 } 467 468 if (GV.hasName() && (GV.getName() == "llvm.global_ctors" || 469 GV.getName() == "llvm.global_dtors")) { 470 Assert(!GV.hasInitializer() || GV.hasAppendingLinkage(), 471 "invalid linkage for intrinsic global variable", &GV); 472 // Don't worry about emitting an error for it not being an array, 473 // visitGlobalValue will complain on appending non-array. 474 if (ArrayType *ATy = dyn_cast<ArrayType>(GV.getValueType())) { 475 StructType *STy = dyn_cast<StructType>(ATy->getElementType()); 476 PointerType *FuncPtrTy = 477 FunctionType::get(Type::getVoidTy(*Context), false)->getPointerTo(); 478 // FIXME: Reject the 2-field form in LLVM 4.0. 479 Assert(STy && 480 (STy->getNumElements() == 2 || STy->getNumElements() == 3) && 481 STy->getTypeAtIndex(0u)->isIntegerTy(32) && 482 STy->getTypeAtIndex(1) == FuncPtrTy, 483 "wrong type for intrinsic global variable", &GV); 484 if (STy->getNumElements() == 3) { 485 Type *ETy = STy->getTypeAtIndex(2); 486 Assert(ETy->isPointerTy() && 487 cast<PointerType>(ETy)->getElementType()->isIntegerTy(8), 488 "wrong type for intrinsic global variable", &GV); 489 } 490 } 491 } 492 493 if (GV.hasName() && (GV.getName() == "llvm.used" || 494 GV.getName() == "llvm.compiler.used")) { 495 Assert(!GV.hasInitializer() || GV.hasAppendingLinkage(), 496 "invalid linkage for intrinsic global variable", &GV); 497 Type *GVType = GV.getType()->getElementType(); 498 if (ArrayType *ATy = dyn_cast<ArrayType>(GVType)) { 499 PointerType *PTy = dyn_cast<PointerType>(ATy->getElementType()); 500 Assert(PTy, "wrong type for intrinsic global variable", &GV); 501 if (GV.hasInitializer()) { 502 const Constant *Init = GV.getInitializer(); 503 const ConstantArray *InitArray = dyn_cast<ConstantArray>(Init); 504 Assert(InitArray, "wrong initalizer for intrinsic global variable", 505 Init); 506 for (unsigned i = 0, e = InitArray->getNumOperands(); i != e; ++i) { 507 Value *V = Init->getOperand(i)->stripPointerCastsNoFollowAliases(); 508 Assert(isa<GlobalVariable>(V) || isa<Function>(V) || 509 isa<GlobalAlias>(V), 510 "invalid llvm.used member", V); 511 Assert(V->hasName(), "members of llvm.used must be named", V); 512 } 513 } 514 } 515 } 516 517 Assert(!GV.hasDLLImportStorageClass() || 518 (GV.isDeclaration() && GV.hasExternalLinkage()) || 519 GV.hasAvailableExternallyLinkage(), 520 "Global is marked as dllimport, but not external", &GV); 521 522 if (!GV.hasInitializer()) { 523 visitGlobalValue(GV); 524 return; 525 } 526 527 // Walk any aggregate initializers looking for bitcasts between address spaces 528 SmallPtrSet<const Value *, 4> Visited; 529 SmallVector<const Value *, 4> WorkStack; 530 WorkStack.push_back(cast<Value>(GV.getInitializer())); 531 532 while (!WorkStack.empty()) { 533 const Value *V = WorkStack.pop_back_val(); 534 if (!Visited.insert(V).second) 535 continue; 536 537 if (const User *U = dyn_cast<User>(V)) { 538 WorkStack.append(U->op_begin(), U->op_end()); 539 } 540 541 if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(V)) { 542 VerifyConstantExprBitcastType(CE); 543 if (Broken) 544 return; 545 } 546 } 547 548 visitGlobalValue(GV); 549 } 550 551 void Verifier::visitAliaseeSubExpr(const GlobalAlias &GA, const Constant &C) { 552 SmallPtrSet<const GlobalAlias*, 4> Visited; 553 Visited.insert(&GA); 554 visitAliaseeSubExpr(Visited, GA, C); 555 } 556 557 void Verifier::visitAliaseeSubExpr(SmallPtrSetImpl<const GlobalAlias*> &Visited, 558 const GlobalAlias &GA, const Constant &C) { 559 if (const auto *GV = dyn_cast<GlobalValue>(&C)) { 560 Assert(!GV->isDeclaration(), "Alias must point to a definition", &GA); 561 562 if (const auto *GA2 = dyn_cast<GlobalAlias>(GV)) { 563 Assert(Visited.insert(GA2).second, "Aliases cannot form a cycle", &GA); 564 565 Assert(!GA2->mayBeOverridden(), "Alias cannot point to a weak alias", 566 &GA); 567 } else { 568 // Only continue verifying subexpressions of GlobalAliases. 569 // Do not recurse into global initializers. 570 return; 571 } 572 } 573 574 if (const auto *CE = dyn_cast<ConstantExpr>(&C)) 575 VerifyConstantExprBitcastType(CE); 576 577 for (const Use &U : C.operands()) { 578 Value *V = &*U; 579 if (const auto *GA2 = dyn_cast<GlobalAlias>(V)) 580 visitAliaseeSubExpr(Visited, GA, *GA2->getAliasee()); 581 else if (const auto *C2 = dyn_cast<Constant>(V)) 582 visitAliaseeSubExpr(Visited, GA, *C2); 583 } 584 } 585 586 void Verifier::visitGlobalAlias(const GlobalAlias &GA) { 587 Assert(!GA.getName().empty(), "Alias name cannot be empty!", &GA); 588 Assert(GlobalAlias::isValidLinkage(GA.getLinkage()), 589 "Alias should have private, internal, linkonce, weak, linkonce_odr, " 590 "weak_odr, or external linkage!", 591 &GA); 592 const Constant *Aliasee = GA.getAliasee(); 593 Assert(Aliasee, "Aliasee cannot be NULL!", &GA); 594 Assert(GA.getType() == Aliasee->getType(), 595 "Alias and aliasee types should match!", &GA); 596 597 Assert(isa<GlobalValue>(Aliasee) || isa<ConstantExpr>(Aliasee), 598 "Aliasee should be either GlobalValue or ConstantExpr", &GA); 599 600 visitAliaseeSubExpr(GA, *Aliasee); 601 602 visitGlobalValue(GA); 603 } 604 605 void Verifier::visitNamedMDNode(const NamedMDNode &NMD) { 606 for (unsigned i = 0, e = NMD.getNumOperands(); i != e; ++i) { 607 MDNode *MD = NMD.getOperand(i); 608 609 if (NMD.getName() == "llvm.dbg.cu") { 610 Assert(MD && isa<DICompileUnit>(MD), "invalid compile unit", &NMD, MD); 611 } 612 613 if (!MD) 614 continue; 615 616 visitMDNode(*MD); 617 } 618 } 619 620 void Verifier::visitMDNode(const MDNode &MD) { 621 // Only visit each node once. Metadata can be mutually recursive, so this 622 // avoids infinite recursion here, as well as being an optimization. 623 if (!MDNodes.insert(&MD).second) 624 return; 625 626 switch (MD.getMetadataID()) { 627 default: 628 llvm_unreachable("Invalid MDNode subclass"); 629 case Metadata::MDTupleKind: 630 break; 631 #define HANDLE_SPECIALIZED_MDNODE_LEAF(CLASS) \ 632 case Metadata::CLASS##Kind: \ 633 visit##CLASS(cast<CLASS>(MD)); \ 634 break; 635 #include "llvm/IR/Metadata.def" 636 } 637 638 for (unsigned i = 0, e = MD.getNumOperands(); i != e; ++i) { 639 Metadata *Op = MD.getOperand(i); 640 if (!Op) 641 continue; 642 Assert(!isa<LocalAsMetadata>(Op), "Invalid operand for global metadata!", 643 &MD, Op); 644 if (auto *N = dyn_cast<MDNode>(Op)) { 645 visitMDNode(*N); 646 continue; 647 } 648 if (auto *V = dyn_cast<ValueAsMetadata>(Op)) { 649 visitValueAsMetadata(*V, nullptr); 650 continue; 651 } 652 } 653 654 // Check these last, so we diagnose problems in operands first. 655 Assert(!MD.isTemporary(), "Expected no forward declarations!", &MD); 656 Assert(MD.isResolved(), "All nodes should be resolved!", &MD); 657 } 658 659 void Verifier::visitValueAsMetadata(const ValueAsMetadata &MD, Function *F) { 660 Assert(MD.getValue(), "Expected valid value", &MD); 661 Assert(!MD.getValue()->getType()->isMetadataTy(), 662 "Unexpected metadata round-trip through values", &MD, MD.getValue()); 663 664 auto *L = dyn_cast<LocalAsMetadata>(&MD); 665 if (!L) 666 return; 667 668 Assert(F, "function-local metadata used outside a function", L); 669 670 // If this was an instruction, bb, or argument, verify that it is in the 671 // function that we expect. 672 Function *ActualF = nullptr; 673 if (Instruction *I = dyn_cast<Instruction>(L->getValue())) { 674 Assert(I->getParent(), "function-local metadata not in basic block", L, I); 675 ActualF = I->getParent()->getParent(); 676 } else if (BasicBlock *BB = dyn_cast<BasicBlock>(L->getValue())) 677 ActualF = BB->getParent(); 678 else if (Argument *A = dyn_cast<Argument>(L->getValue())) 679 ActualF = A->getParent(); 680 assert(ActualF && "Unimplemented function local metadata case!"); 681 682 Assert(ActualF == F, "function-local metadata used in wrong function", L); 683 } 684 685 void Verifier::visitMetadataAsValue(const MetadataAsValue &MDV, Function *F) { 686 Metadata *MD = MDV.getMetadata(); 687 if (auto *N = dyn_cast<MDNode>(MD)) { 688 visitMDNode(*N); 689 return; 690 } 691 692 // Only visit each node once. Metadata can be mutually recursive, so this 693 // avoids infinite recursion here, as well as being an optimization. 694 if (!MDNodes.insert(MD).second) 695 return; 696 697 if (auto *V = dyn_cast<ValueAsMetadata>(MD)) 698 visitValueAsMetadata(*V, F); 699 } 700 701 bool Verifier::isValidUUID(const MDNode &N, const Metadata *MD) { 702 auto *S = dyn_cast<MDString>(MD); 703 if (!S) 704 return false; 705 if (S->getString().empty()) 706 return false; 707 708 // Keep track of names of types referenced via UUID so we can check that they 709 // actually exist. 710 UnresolvedTypeRefs.insert(std::make_pair(S, &N)); 711 return true; 712 } 713 714 /// \brief Check if a value can be a reference to a type. 715 bool Verifier::isTypeRef(const MDNode &N, const Metadata *MD) { 716 return !MD || isValidUUID(N, MD) || isa<DIType>(MD); 717 } 718 719 /// \brief Check if a value can be a ScopeRef. 720 bool Verifier::isScopeRef(const MDNode &N, const Metadata *MD) { 721 return !MD || isValidUUID(N, MD) || isa<DIScope>(MD); 722 } 723 724 /// \brief Check if a value can be a debug info ref. 725 bool Verifier::isDIRef(const MDNode &N, const Metadata *MD) { 726 return !MD || isValidUUID(N, MD) || isa<DINode>(MD); 727 } 728 729 template <class Ty> 730 bool isValidMetadataArrayImpl(const MDTuple &N, bool AllowNull) { 731 for (Metadata *MD : N.operands()) { 732 if (MD) { 733 if (!isa<Ty>(MD)) 734 return false; 735 } else { 736 if (!AllowNull) 737 return false; 738 } 739 } 740 return true; 741 } 742 743 template <class Ty> 744 bool isValidMetadataArray(const MDTuple &N) { 745 return isValidMetadataArrayImpl<Ty>(N, /* AllowNull */ false); 746 } 747 748 template <class Ty> 749 bool isValidMetadataNullArray(const MDTuple &N) { 750 return isValidMetadataArrayImpl<Ty>(N, /* AllowNull */ true); 751 } 752 753 void Verifier::visitDILocation(const DILocation &N) { 754 Assert(N.getRawScope() && isa<DILocalScope>(N.getRawScope()), 755 "location requires a valid scope", &N, N.getRawScope()); 756 if (auto *IA = N.getRawInlinedAt()) 757 Assert(isa<DILocation>(IA), "inlined-at should be a location", &N, IA); 758 } 759 760 void Verifier::visitGenericDINode(const GenericDINode &N) { 761 Assert(N.getTag(), "invalid tag", &N); 762 } 763 764 void Verifier::visitDIScope(const DIScope &N) { 765 if (auto *F = N.getRawFile()) 766 Assert(isa<DIFile>(F), "invalid file", &N, F); 767 } 768 769 void Verifier::visitDISubrange(const DISubrange &N) { 770 Assert(N.getTag() == dwarf::DW_TAG_subrange_type, "invalid tag", &N); 771 Assert(N.getCount() >= -1, "invalid subrange count", &N); 772 } 773 774 void Verifier::visitDIEnumerator(const DIEnumerator &N) { 775 Assert(N.getTag() == dwarf::DW_TAG_enumerator, "invalid tag", &N); 776 } 777 778 void Verifier::visitDIBasicType(const DIBasicType &N) { 779 Assert(N.getTag() == dwarf::DW_TAG_base_type || 780 N.getTag() == dwarf::DW_TAG_unspecified_type, 781 "invalid tag", &N); 782 } 783 784 void Verifier::visitDIDerivedTypeBase(const DIDerivedTypeBase &N) { 785 // Common scope checks. 786 visitDIScope(N); 787 788 Assert(isScopeRef(N, N.getScope()), "invalid scope", &N, N.getScope()); 789 Assert(isTypeRef(N, N.getBaseType()), "invalid base type", &N, 790 N.getBaseType()); 791 792 // FIXME: Sink this into the subclass verifies. 793 if (!N.getFile() || N.getFile()->getFilename().empty()) { 794 // Check whether the filename is allowed to be empty. 795 uint16_t Tag = N.getTag(); 796 Assert( 797 Tag == dwarf::DW_TAG_const_type || Tag == dwarf::DW_TAG_volatile_type || 798 Tag == dwarf::DW_TAG_pointer_type || 799 Tag == dwarf::DW_TAG_ptr_to_member_type || 800 Tag == dwarf::DW_TAG_reference_type || 801 Tag == dwarf::DW_TAG_rvalue_reference_type || 802 Tag == dwarf::DW_TAG_restrict_type || 803 Tag == dwarf::DW_TAG_array_type || 804 Tag == dwarf::DW_TAG_enumeration_type || 805 Tag == dwarf::DW_TAG_subroutine_type || 806 Tag == dwarf::DW_TAG_inheritance || Tag == dwarf::DW_TAG_friend || 807 Tag == dwarf::DW_TAG_structure_type || 808 Tag == dwarf::DW_TAG_member || Tag == dwarf::DW_TAG_typedef, 809 "derived/composite type requires a filename", &N, N.getFile()); 810 } 811 } 812 813 void Verifier::visitDIDerivedType(const DIDerivedType &N) { 814 // Common derived type checks. 815 visitDIDerivedTypeBase(N); 816 817 Assert(N.getTag() == dwarf::DW_TAG_typedef || 818 N.getTag() == dwarf::DW_TAG_pointer_type || 819 N.getTag() == dwarf::DW_TAG_ptr_to_member_type || 820 N.getTag() == dwarf::DW_TAG_reference_type || 821 N.getTag() == dwarf::DW_TAG_rvalue_reference_type || 822 N.getTag() == dwarf::DW_TAG_const_type || 823 N.getTag() == dwarf::DW_TAG_volatile_type || 824 N.getTag() == dwarf::DW_TAG_restrict_type || 825 N.getTag() == dwarf::DW_TAG_member || 826 N.getTag() == dwarf::DW_TAG_inheritance || 827 N.getTag() == dwarf::DW_TAG_friend, 828 "invalid tag", &N); 829 if (N.getTag() == dwarf::DW_TAG_ptr_to_member_type) { 830 Assert(isTypeRef(N, N.getExtraData()), "invalid pointer to member type", &N, 831 N.getExtraData()); 832 } 833 } 834 835 static bool hasConflictingReferenceFlags(unsigned Flags) { 836 return (Flags & DINode::FlagLValueReference) && 837 (Flags & DINode::FlagRValueReference); 838 } 839 840 void Verifier::visitTemplateParams(const MDNode &N, const Metadata &RawParams) { 841 auto *Params = dyn_cast<MDTuple>(&RawParams); 842 Assert(Params, "invalid template params", &N, &RawParams); 843 for (Metadata *Op : Params->operands()) { 844 Assert(Op && isa<DITemplateParameter>(Op), "invalid template parameter", &N, 845 Params, Op); 846 } 847 } 848 849 void Verifier::visitDICompositeType(const DICompositeType &N) { 850 // Common derived type checks. 851 visitDIDerivedTypeBase(N); 852 853 Assert(N.getTag() == dwarf::DW_TAG_array_type || 854 N.getTag() == dwarf::DW_TAG_structure_type || 855 N.getTag() == dwarf::DW_TAG_union_type || 856 N.getTag() == dwarf::DW_TAG_enumeration_type || 857 N.getTag() == dwarf::DW_TAG_subroutine_type || 858 N.getTag() == dwarf::DW_TAG_class_type, 859 "invalid tag", &N); 860 861 Assert(!N.getRawElements() || isa<MDTuple>(N.getRawElements()), 862 "invalid composite elements", &N, N.getRawElements()); 863 Assert(isTypeRef(N, N.getRawVTableHolder()), "invalid vtable holder", &N, 864 N.getRawVTableHolder()); 865 Assert(!N.getRawElements() || isa<MDTuple>(N.getRawElements()), 866 "invalid composite elements", &N, N.getRawElements()); 867 Assert(!hasConflictingReferenceFlags(N.getFlags()), "invalid reference flags", 868 &N); 869 if (auto *Params = N.getRawTemplateParams()) 870 visitTemplateParams(N, *Params); 871 } 872 873 void Verifier::visitDISubroutineType(const DISubroutineType &N) { 874 Assert(N.getTag() == dwarf::DW_TAG_subroutine_type, "invalid tag", &N); 875 if (auto *Types = N.getRawTypeArray()) { 876 Assert(isa<MDTuple>(Types), "invalid composite elements", &N, Types); 877 for (Metadata *Ty : N.getTypeArray()->operands()) { 878 Assert(isTypeRef(N, Ty), "invalid subroutine type ref", &N, Types, Ty); 879 } 880 } 881 Assert(!hasConflictingReferenceFlags(N.getFlags()), "invalid reference flags", 882 &N); 883 } 884 885 void Verifier::visitDIFile(const DIFile &N) { 886 Assert(N.getTag() == dwarf::DW_TAG_file_type, "invalid tag", &N); 887 } 888 889 void Verifier::visitDICompileUnit(const DICompileUnit &N) { 890 Assert(N.getTag() == dwarf::DW_TAG_compile_unit, "invalid tag", &N); 891 892 // Don't bother verifying the compilation directory or producer string 893 // as those could be empty. 894 Assert(N.getRawFile() && isa<DIFile>(N.getRawFile()), "invalid file", &N, 895 N.getRawFile()); 896 Assert(!N.getFile()->getFilename().empty(), "invalid filename", &N, 897 N.getFile()); 898 899 if (auto *Array = N.getRawEnumTypes()) { 900 Assert(isa<MDTuple>(Array), "invalid enum list", &N, Array); 901 for (Metadata *Op : N.getEnumTypes()->operands()) { 902 auto *Enum = dyn_cast_or_null<DICompositeType>(Op); 903 Assert(Enum && Enum->getTag() == dwarf::DW_TAG_enumeration_type, 904 "invalid enum type", &N, N.getEnumTypes(), Op); 905 } 906 } 907 if (auto *Array = N.getRawRetainedTypes()) { 908 Assert(isa<MDTuple>(Array), "invalid retained type list", &N, Array); 909 for (Metadata *Op : N.getRetainedTypes()->operands()) { 910 Assert(Op && isa<DIType>(Op), "invalid retained type", &N, Op); 911 } 912 } 913 if (auto *Array = N.getRawSubprograms()) { 914 Assert(isa<MDTuple>(Array), "invalid subprogram list", &N, Array); 915 for (Metadata *Op : N.getSubprograms()->operands()) { 916 Assert(Op && isa<DISubprogram>(Op), "invalid subprogram ref", &N, Op); 917 } 918 } 919 if (auto *Array = N.getRawGlobalVariables()) { 920 Assert(isa<MDTuple>(Array), "invalid global variable list", &N, Array); 921 for (Metadata *Op : N.getGlobalVariables()->operands()) { 922 Assert(Op && isa<DIGlobalVariable>(Op), "invalid global variable ref", &N, 923 Op); 924 } 925 } 926 if (auto *Array = N.getRawImportedEntities()) { 927 Assert(isa<MDTuple>(Array), "invalid imported entity list", &N, Array); 928 for (Metadata *Op : N.getImportedEntities()->operands()) { 929 Assert(Op && isa<DIImportedEntity>(Op), "invalid imported entity ref", &N, 930 Op); 931 } 932 } 933 } 934 935 void Verifier::visitDISubprogram(const DISubprogram &N) { 936 Assert(N.getTag() == dwarf::DW_TAG_subprogram, "invalid tag", &N); 937 Assert(isScopeRef(N, N.getRawScope()), "invalid scope", &N, N.getRawScope()); 938 if (auto *T = N.getRawType()) 939 Assert(isa<DISubroutineType>(T), "invalid subroutine type", &N, T); 940 Assert(isTypeRef(N, N.getRawContainingType()), "invalid containing type", &N, 941 N.getRawContainingType()); 942 if (auto *RawF = N.getRawFunction()) { 943 auto *FMD = dyn_cast<ConstantAsMetadata>(RawF); 944 auto *F = FMD ? FMD->getValue() : nullptr; 945 auto *FT = F ? dyn_cast<PointerType>(F->getType()) : nullptr; 946 Assert(F && FT && isa<FunctionType>(FT->getElementType()), 947 "invalid function", &N, F, FT); 948 } 949 if (auto *Params = N.getRawTemplateParams()) 950 visitTemplateParams(N, *Params); 951 if (auto *S = N.getRawDeclaration()) { 952 Assert(isa<DISubprogram>(S) && !cast<DISubprogram>(S)->isDefinition(), 953 "invalid subprogram declaration", &N, S); 954 } 955 if (auto *RawVars = N.getRawVariables()) { 956 auto *Vars = dyn_cast<MDTuple>(RawVars); 957 Assert(Vars, "invalid variable list", &N, RawVars); 958 for (Metadata *Op : Vars->operands()) { 959 Assert(Op && isa<DILocalVariable>(Op), "invalid local variable", &N, Vars, 960 Op); 961 } 962 } 963 Assert(!hasConflictingReferenceFlags(N.getFlags()), "invalid reference flags", 964 &N); 965 966 auto *F = N.getFunction(); 967 if (!F) 968 return; 969 970 // Check that all !dbg attachments lead to back to N (or, at least, another 971 // subprogram that describes the same function). 972 // 973 // FIXME: Check this incrementally while visiting !dbg attachments. 974 // FIXME: Only check when N is the canonical subprogram for F. 975 SmallPtrSet<const MDNode *, 32> Seen; 976 for (auto &BB : *F) 977 for (auto &I : BB) { 978 // Be careful about using DILocation here since we might be dealing with 979 // broken code (this is the Verifier after all). 980 DILocation *DL = 981 dyn_cast_or_null<DILocation>(I.getDebugLoc().getAsMDNode()); 982 if (!DL) 983 continue; 984 if (!Seen.insert(DL).second) 985 continue; 986 987 DILocalScope *Scope = DL->getInlinedAtScope(); 988 if (Scope && !Seen.insert(Scope).second) 989 continue; 990 991 DISubprogram *SP = Scope ? Scope->getSubprogram() : nullptr; 992 if (SP && !Seen.insert(SP).second) 993 continue; 994 995 // FIXME: Once N is canonical, check "SP == &N". 996 Assert(SP->describes(F), 997 "!dbg attachment points at wrong subprogram for function", &N, F, 998 &I, DL, Scope, SP); 999 } 1000 } 1001 1002 void Verifier::visitDILexicalBlockBase(const DILexicalBlockBase &N) { 1003 Assert(N.getTag() == dwarf::DW_TAG_lexical_block, "invalid tag", &N); 1004 Assert(N.getRawScope() && isa<DILocalScope>(N.getRawScope()), 1005 "invalid local scope", &N, N.getRawScope()); 1006 } 1007 1008 void Verifier::visitDILexicalBlock(const DILexicalBlock &N) { 1009 visitDILexicalBlockBase(N); 1010 1011 Assert(N.getLine() || !N.getColumn(), 1012 "cannot have column info without line info", &N); 1013 } 1014 1015 void Verifier::visitDILexicalBlockFile(const DILexicalBlockFile &N) { 1016 visitDILexicalBlockBase(N); 1017 } 1018 1019 void Verifier::visitDINamespace(const DINamespace &N) { 1020 Assert(N.getTag() == dwarf::DW_TAG_namespace, "invalid tag", &N); 1021 if (auto *S = N.getRawScope()) 1022 Assert(isa<DIScope>(S), "invalid scope ref", &N, S); 1023 } 1024 1025 void Verifier::visitDITemplateParameter(const DITemplateParameter &N) { 1026 Assert(isTypeRef(N, N.getType()), "invalid type ref", &N, N.getType()); 1027 } 1028 1029 void Verifier::visitDITemplateTypeParameter(const DITemplateTypeParameter &N) { 1030 visitDITemplateParameter(N); 1031 1032 Assert(N.getTag() == dwarf::DW_TAG_template_type_parameter, "invalid tag", 1033 &N); 1034 } 1035 1036 void Verifier::visitDITemplateValueParameter( 1037 const DITemplateValueParameter &N) { 1038 visitDITemplateParameter(N); 1039 1040 Assert(N.getTag() == dwarf::DW_TAG_template_value_parameter || 1041 N.getTag() == dwarf::DW_TAG_GNU_template_template_param || 1042 N.getTag() == dwarf::DW_TAG_GNU_template_parameter_pack, 1043 "invalid tag", &N); 1044 } 1045 1046 void Verifier::visitDIVariable(const DIVariable &N) { 1047 if (auto *S = N.getRawScope()) 1048 Assert(isa<DIScope>(S), "invalid scope", &N, S); 1049 Assert(isTypeRef(N, N.getRawType()), "invalid type ref", &N, N.getRawType()); 1050 if (auto *F = N.getRawFile()) 1051 Assert(isa<DIFile>(F), "invalid file", &N, F); 1052 } 1053 1054 void Verifier::visitDIGlobalVariable(const DIGlobalVariable &N) { 1055 // Checks common to all variables. 1056 visitDIVariable(N); 1057 1058 Assert(N.getTag() == dwarf::DW_TAG_variable, "invalid tag", &N); 1059 Assert(!N.getName().empty(), "missing global variable name", &N); 1060 if (auto *V = N.getRawVariable()) { 1061 Assert(isa<ConstantAsMetadata>(V) && 1062 !isa<Function>(cast<ConstantAsMetadata>(V)->getValue()), 1063 "invalid global varaible ref", &N, V); 1064 } 1065 if (auto *Member = N.getRawStaticDataMemberDeclaration()) { 1066 Assert(isa<DIDerivedType>(Member), "invalid static data member declaration", 1067 &N, Member); 1068 } 1069 } 1070 1071 void Verifier::visitDILocalVariable(const DILocalVariable &N) { 1072 // Checks common to all variables. 1073 visitDIVariable(N); 1074 1075 Assert(N.getTag() == dwarf::DW_TAG_auto_variable || 1076 N.getTag() == dwarf::DW_TAG_arg_variable, 1077 "invalid tag", &N); 1078 Assert(N.getRawScope() && isa<DILocalScope>(N.getRawScope()), 1079 "local variable requires a valid scope", &N, N.getRawScope()); 1080 } 1081 1082 void Verifier::visitDIExpression(const DIExpression &N) { 1083 Assert(N.isValid(), "invalid expression", &N); 1084 } 1085 1086 void Verifier::visitDIObjCProperty(const DIObjCProperty &N) { 1087 Assert(N.getTag() == dwarf::DW_TAG_APPLE_property, "invalid tag", &N); 1088 if (auto *T = N.getRawType()) 1089 Assert(isa<DIType>(T), "invalid type ref", &N, T); 1090 if (auto *F = N.getRawFile()) 1091 Assert(isa<DIFile>(F), "invalid file", &N, F); 1092 } 1093 1094 void Verifier::visitDIImportedEntity(const DIImportedEntity &N) { 1095 Assert(N.getTag() == dwarf::DW_TAG_imported_module || 1096 N.getTag() == dwarf::DW_TAG_imported_declaration, 1097 "invalid tag", &N); 1098 if (auto *S = N.getRawScope()) 1099 Assert(isa<DIScope>(S), "invalid scope for imported entity", &N, S); 1100 Assert(isDIRef(N, N.getEntity()), "invalid imported entity", &N, 1101 N.getEntity()); 1102 } 1103 1104 void Verifier::visitComdat(const Comdat &C) { 1105 // The Module is invalid if the GlobalValue has private linkage. Entities 1106 // with private linkage don't have entries in the symbol table. 1107 if (const GlobalValue *GV = M->getNamedValue(C.getName())) 1108 Assert(!GV->hasPrivateLinkage(), "comdat global value has private linkage", 1109 GV); 1110 } 1111 1112 void Verifier::visitModuleIdents(const Module &M) { 1113 const NamedMDNode *Idents = M.getNamedMetadata("llvm.ident"); 1114 if (!Idents) 1115 return; 1116 1117 // llvm.ident takes a list of metadata entry. Each entry has only one string. 1118 // Scan each llvm.ident entry and make sure that this requirement is met. 1119 for (unsigned i = 0, e = Idents->getNumOperands(); i != e; ++i) { 1120 const MDNode *N = Idents->getOperand(i); 1121 Assert(N->getNumOperands() == 1, 1122 "incorrect number of operands in llvm.ident metadata", N); 1123 Assert(dyn_cast_or_null<MDString>(N->getOperand(0)), 1124 ("invalid value for llvm.ident metadata entry operand" 1125 "(the operand should be a string)"), 1126 N->getOperand(0)); 1127 } 1128 } 1129 1130 void Verifier::visitModuleFlags(const Module &M) { 1131 const NamedMDNode *Flags = M.getModuleFlagsMetadata(); 1132 if (!Flags) return; 1133 1134 // Scan each flag, and track the flags and requirements. 1135 DenseMap<const MDString*, const MDNode*> SeenIDs; 1136 SmallVector<const MDNode*, 16> Requirements; 1137 for (unsigned I = 0, E = Flags->getNumOperands(); I != E; ++I) { 1138 visitModuleFlag(Flags->getOperand(I), SeenIDs, Requirements); 1139 } 1140 1141 // Validate that the requirements in the module are valid. 1142 for (unsigned I = 0, E = Requirements.size(); I != E; ++I) { 1143 const MDNode *Requirement = Requirements[I]; 1144 const MDString *Flag = cast<MDString>(Requirement->getOperand(0)); 1145 const Metadata *ReqValue = Requirement->getOperand(1); 1146 1147 const MDNode *Op = SeenIDs.lookup(Flag); 1148 if (!Op) { 1149 CheckFailed("invalid requirement on flag, flag is not present in module", 1150 Flag); 1151 continue; 1152 } 1153 1154 if (Op->getOperand(2) != ReqValue) { 1155 CheckFailed(("invalid requirement on flag, " 1156 "flag does not have the required value"), 1157 Flag); 1158 continue; 1159 } 1160 } 1161 } 1162 1163 void 1164 Verifier::visitModuleFlag(const MDNode *Op, 1165 DenseMap<const MDString *, const MDNode *> &SeenIDs, 1166 SmallVectorImpl<const MDNode *> &Requirements) { 1167 // Each module flag should have three arguments, the merge behavior (a 1168 // constant int), the flag ID (an MDString), and the value. 1169 Assert(Op->getNumOperands() == 3, 1170 "incorrect number of operands in module flag", Op); 1171 Module::ModFlagBehavior MFB; 1172 if (!Module::isValidModFlagBehavior(Op->getOperand(0), MFB)) { 1173 Assert( 1174 mdconst::dyn_extract_or_null<ConstantInt>(Op->getOperand(0)), 1175 "invalid behavior operand in module flag (expected constant integer)", 1176 Op->getOperand(0)); 1177 Assert(false, 1178 "invalid behavior operand in module flag (unexpected constant)", 1179 Op->getOperand(0)); 1180 } 1181 MDString *ID = dyn_cast_or_null<MDString>(Op->getOperand(1)); 1182 Assert(ID, "invalid ID operand in module flag (expected metadata string)", 1183 Op->getOperand(1)); 1184 1185 // Sanity check the values for behaviors with additional requirements. 1186 switch (MFB) { 1187 case Module::Error: 1188 case Module::Warning: 1189 case Module::Override: 1190 // These behavior types accept any value. 1191 break; 1192 1193 case Module::Require: { 1194 // The value should itself be an MDNode with two operands, a flag ID (an 1195 // MDString), and a value. 1196 MDNode *Value = dyn_cast<MDNode>(Op->getOperand(2)); 1197 Assert(Value && Value->getNumOperands() == 2, 1198 "invalid value for 'require' module flag (expected metadata pair)", 1199 Op->getOperand(2)); 1200 Assert(isa<MDString>(Value->getOperand(0)), 1201 ("invalid value for 'require' module flag " 1202 "(first value operand should be a string)"), 1203 Value->getOperand(0)); 1204 1205 // Append it to the list of requirements, to check once all module flags are 1206 // scanned. 1207 Requirements.push_back(Value); 1208 break; 1209 } 1210 1211 case Module::Append: 1212 case Module::AppendUnique: { 1213 // These behavior types require the operand be an MDNode. 1214 Assert(isa<MDNode>(Op->getOperand(2)), 1215 "invalid value for 'append'-type module flag " 1216 "(expected a metadata node)", 1217 Op->getOperand(2)); 1218 break; 1219 } 1220 } 1221 1222 // Unless this is a "requires" flag, check the ID is unique. 1223 if (MFB != Module::Require) { 1224 bool Inserted = SeenIDs.insert(std::make_pair(ID, Op)).second; 1225 Assert(Inserted, 1226 "module flag identifiers must be unique (or of 'require' type)", ID); 1227 } 1228 } 1229 1230 void Verifier::VerifyAttributeTypes(AttributeSet Attrs, unsigned Idx, 1231 bool isFunction, const Value *V) { 1232 unsigned Slot = ~0U; 1233 for (unsigned I = 0, E = Attrs.getNumSlots(); I != E; ++I) 1234 if (Attrs.getSlotIndex(I) == Idx) { 1235 Slot = I; 1236 break; 1237 } 1238 1239 assert(Slot != ~0U && "Attribute set inconsistency!"); 1240 1241 for (AttributeSet::iterator I = Attrs.begin(Slot), E = Attrs.end(Slot); 1242 I != E; ++I) { 1243 if (I->isStringAttribute()) 1244 continue; 1245 1246 if (I->getKindAsEnum() == Attribute::NoReturn || 1247 I->getKindAsEnum() == Attribute::NoUnwind || 1248 I->getKindAsEnum() == Attribute::NoInline || 1249 I->getKindAsEnum() == Attribute::AlwaysInline || 1250 I->getKindAsEnum() == Attribute::OptimizeForSize || 1251 I->getKindAsEnum() == Attribute::StackProtect || 1252 I->getKindAsEnum() == Attribute::StackProtectReq || 1253 I->getKindAsEnum() == Attribute::StackProtectStrong || 1254 I->getKindAsEnum() == Attribute::NoRedZone || 1255 I->getKindAsEnum() == Attribute::NoImplicitFloat || 1256 I->getKindAsEnum() == Attribute::Naked || 1257 I->getKindAsEnum() == Attribute::InlineHint || 1258 I->getKindAsEnum() == Attribute::StackAlignment || 1259 I->getKindAsEnum() == Attribute::UWTable || 1260 I->getKindAsEnum() == Attribute::NonLazyBind || 1261 I->getKindAsEnum() == Attribute::ReturnsTwice || 1262 I->getKindAsEnum() == Attribute::SanitizeAddress || 1263 I->getKindAsEnum() == Attribute::SanitizeThread || 1264 I->getKindAsEnum() == Attribute::SanitizeMemory || 1265 I->getKindAsEnum() == Attribute::MinSize || 1266 I->getKindAsEnum() == Attribute::NoDuplicate || 1267 I->getKindAsEnum() == Attribute::Builtin || 1268 I->getKindAsEnum() == Attribute::NoBuiltin || 1269 I->getKindAsEnum() == Attribute::Cold || 1270 I->getKindAsEnum() == Attribute::OptimizeNone || 1271 I->getKindAsEnum() == Attribute::JumpTable) { 1272 if (!isFunction) { 1273 CheckFailed("Attribute '" + I->getAsString() + 1274 "' only applies to functions!", V); 1275 return; 1276 } 1277 } else if (I->getKindAsEnum() == Attribute::ReadOnly || 1278 I->getKindAsEnum() == Attribute::ReadNone) { 1279 if (Idx == 0) { 1280 CheckFailed("Attribute '" + I->getAsString() + 1281 "' does not apply to function returns"); 1282 return; 1283 } 1284 } else if (isFunction) { 1285 CheckFailed("Attribute '" + I->getAsString() + 1286 "' does not apply to functions!", V); 1287 return; 1288 } 1289 } 1290 } 1291 1292 // VerifyParameterAttrs - Check the given attributes for an argument or return 1293 // value of the specified type. The value V is printed in error messages. 1294 void Verifier::VerifyParameterAttrs(AttributeSet Attrs, unsigned Idx, Type *Ty, 1295 bool isReturnValue, const Value *V) { 1296 if (!Attrs.hasAttributes(Idx)) 1297 return; 1298 1299 VerifyAttributeTypes(Attrs, Idx, false, V); 1300 1301 if (isReturnValue) 1302 Assert(!Attrs.hasAttribute(Idx, Attribute::ByVal) && 1303 !Attrs.hasAttribute(Idx, Attribute::Nest) && 1304 !Attrs.hasAttribute(Idx, Attribute::StructRet) && 1305 !Attrs.hasAttribute(Idx, Attribute::NoCapture) && 1306 !Attrs.hasAttribute(Idx, Attribute::Returned) && 1307 !Attrs.hasAttribute(Idx, Attribute::InAlloca), 1308 "Attributes 'byval', 'inalloca', 'nest', 'sret', 'nocapture', and " 1309 "'returned' do not apply to return values!", 1310 V); 1311 1312 // Check for mutually incompatible attributes. Only inreg is compatible with 1313 // sret. 1314 unsigned AttrCount = 0; 1315 AttrCount += Attrs.hasAttribute(Idx, Attribute::ByVal); 1316 AttrCount += Attrs.hasAttribute(Idx, Attribute::InAlloca); 1317 AttrCount += Attrs.hasAttribute(Idx, Attribute::StructRet) || 1318 Attrs.hasAttribute(Idx, Attribute::InReg); 1319 AttrCount += Attrs.hasAttribute(Idx, Attribute::Nest); 1320 Assert(AttrCount <= 1, "Attributes 'byval', 'inalloca', 'inreg', 'nest', " 1321 "and 'sret' are incompatible!", 1322 V); 1323 1324 Assert(!(Attrs.hasAttribute(Idx, Attribute::InAlloca) && 1325 Attrs.hasAttribute(Idx, Attribute::ReadOnly)), 1326 "Attributes " 1327 "'inalloca and readonly' are incompatible!", 1328 V); 1329 1330 Assert(!(Attrs.hasAttribute(Idx, Attribute::StructRet) && 1331 Attrs.hasAttribute(Idx, Attribute::Returned)), 1332 "Attributes " 1333 "'sret and returned' are incompatible!", 1334 V); 1335 1336 Assert(!(Attrs.hasAttribute(Idx, Attribute::ZExt) && 1337 Attrs.hasAttribute(Idx, Attribute::SExt)), 1338 "Attributes " 1339 "'zeroext and signext' are incompatible!", 1340 V); 1341 1342 Assert(!(Attrs.hasAttribute(Idx, Attribute::ReadNone) && 1343 Attrs.hasAttribute(Idx, Attribute::ReadOnly)), 1344 "Attributes " 1345 "'readnone and readonly' are incompatible!", 1346 V); 1347 1348 Assert(!(Attrs.hasAttribute(Idx, Attribute::NoInline) && 1349 Attrs.hasAttribute(Idx, Attribute::AlwaysInline)), 1350 "Attributes " 1351 "'noinline and alwaysinline' are incompatible!", 1352 V); 1353 1354 Assert(!AttrBuilder(Attrs, Idx) 1355 .overlaps(AttributeFuncs::typeIncompatible(Ty)), 1356 "Wrong types for attribute: " + 1357 AttributeSet::get(*Context, Idx, 1358 AttributeFuncs::typeIncompatible(Ty)).getAsString(Idx), 1359 V); 1360 1361 if (PointerType *PTy = dyn_cast<PointerType>(Ty)) { 1362 SmallPtrSet<const Type*, 4> Visited; 1363 if (!PTy->getElementType()->isSized(&Visited)) { 1364 Assert(!Attrs.hasAttribute(Idx, Attribute::ByVal) && 1365 !Attrs.hasAttribute(Idx, Attribute::InAlloca), 1366 "Attributes 'byval' and 'inalloca' do not support unsized types!", 1367 V); 1368 } 1369 } else { 1370 Assert(!Attrs.hasAttribute(Idx, Attribute::ByVal), 1371 "Attribute 'byval' only applies to parameters with pointer type!", 1372 V); 1373 } 1374 } 1375 1376 // VerifyFunctionAttrs - Check parameter attributes against a function type. 1377 // The value V is printed in error messages. 1378 void Verifier::VerifyFunctionAttrs(FunctionType *FT, AttributeSet Attrs, 1379 const Value *V) { 1380 if (Attrs.isEmpty()) 1381 return; 1382 1383 bool SawNest = false; 1384 bool SawReturned = false; 1385 bool SawSRet = false; 1386 1387 for (unsigned i = 0, e = Attrs.getNumSlots(); i != e; ++i) { 1388 unsigned Idx = Attrs.getSlotIndex(i); 1389 1390 Type *Ty; 1391 if (Idx == 0) 1392 Ty = FT->getReturnType(); 1393 else if (Idx-1 < FT->getNumParams()) 1394 Ty = FT->getParamType(Idx-1); 1395 else 1396 break; // VarArgs attributes, verified elsewhere. 1397 1398 VerifyParameterAttrs(Attrs, Idx, Ty, Idx == 0, V); 1399 1400 if (Idx == 0) 1401 continue; 1402 1403 if (Attrs.hasAttribute(Idx, Attribute::Nest)) { 1404 Assert(!SawNest, "More than one parameter has attribute nest!", V); 1405 SawNest = true; 1406 } 1407 1408 if (Attrs.hasAttribute(Idx, Attribute::Returned)) { 1409 Assert(!SawReturned, "More than one parameter has attribute returned!", 1410 V); 1411 Assert(Ty->canLosslesslyBitCastTo(FT->getReturnType()), 1412 "Incompatible " 1413 "argument and return types for 'returned' attribute", 1414 V); 1415 SawReturned = true; 1416 } 1417 1418 if (Attrs.hasAttribute(Idx, Attribute::StructRet)) { 1419 Assert(!SawSRet, "Cannot have multiple 'sret' parameters!", V); 1420 Assert(Idx == 1 || Idx == 2, 1421 "Attribute 'sret' is not on first or second parameter!", V); 1422 SawSRet = true; 1423 } 1424 1425 if (Attrs.hasAttribute(Idx, Attribute::InAlloca)) { 1426 Assert(Idx == FT->getNumParams(), "inalloca isn't on the last parameter!", 1427 V); 1428 } 1429 } 1430 1431 if (!Attrs.hasAttributes(AttributeSet::FunctionIndex)) 1432 return; 1433 1434 VerifyAttributeTypes(Attrs, AttributeSet::FunctionIndex, true, V); 1435 1436 Assert( 1437 !(Attrs.hasAttribute(AttributeSet::FunctionIndex, Attribute::ReadNone) && 1438 Attrs.hasAttribute(AttributeSet::FunctionIndex, Attribute::ReadOnly)), 1439 "Attributes 'readnone and readonly' are incompatible!", V); 1440 1441 Assert( 1442 !(Attrs.hasAttribute(AttributeSet::FunctionIndex, Attribute::NoInline) && 1443 Attrs.hasAttribute(AttributeSet::FunctionIndex, 1444 Attribute::AlwaysInline)), 1445 "Attributes 'noinline and alwaysinline' are incompatible!", V); 1446 1447 if (Attrs.hasAttribute(AttributeSet::FunctionIndex, 1448 Attribute::OptimizeNone)) { 1449 Assert(Attrs.hasAttribute(AttributeSet::FunctionIndex, Attribute::NoInline), 1450 "Attribute 'optnone' requires 'noinline'!", V); 1451 1452 Assert(!Attrs.hasAttribute(AttributeSet::FunctionIndex, 1453 Attribute::OptimizeForSize), 1454 "Attributes 'optsize and optnone' are incompatible!", V); 1455 1456 Assert(!Attrs.hasAttribute(AttributeSet::FunctionIndex, Attribute::MinSize), 1457 "Attributes 'minsize and optnone' are incompatible!", V); 1458 } 1459 1460 if (Attrs.hasAttribute(AttributeSet::FunctionIndex, 1461 Attribute::JumpTable)) { 1462 const GlobalValue *GV = cast<GlobalValue>(V); 1463 Assert(GV->hasUnnamedAddr(), 1464 "Attribute 'jumptable' requires 'unnamed_addr'", V); 1465 } 1466 } 1467 1468 void Verifier::VerifyFunctionMetadata( 1469 const SmallVector<std::pair<unsigned, MDNode *>, 4> MDs) { 1470 if (MDs.empty()) 1471 return; 1472 1473 for (unsigned i = 0; i < MDs.size(); i++) { 1474 if (MDs[i].first == LLVMContext::MD_prof) { 1475 MDNode *MD = MDs[i].second; 1476 Assert(MD->getNumOperands() == 2, 1477 "!prof annotations should have exactly 2 operands", MD); 1478 1479 // Check first operand. 1480 Assert(MD->getOperand(0) != nullptr, "first operand should not be null", 1481 MD); 1482 Assert(isa<MDString>(MD->getOperand(0)), 1483 "expected string with name of the !prof annotation", MD); 1484 MDString *MDS = cast<MDString>(MD->getOperand(0)); 1485 StringRef ProfName = MDS->getString(); 1486 Assert(ProfName.equals("function_entry_count"), 1487 "first operand should be 'function_entry_count'", MD); 1488 1489 // Check second operand. 1490 Assert(MD->getOperand(1) != nullptr, "second operand should not be null", 1491 MD); 1492 Assert(isa<ConstantAsMetadata>(MD->getOperand(1)), 1493 "expected integer argument to function_entry_count", MD); 1494 } 1495 } 1496 } 1497 1498 void Verifier::VerifyConstantExprBitcastType(const ConstantExpr *CE) { 1499 if (CE->getOpcode() != Instruction::BitCast) 1500 return; 1501 1502 Assert(CastInst::castIsValid(Instruction::BitCast, CE->getOperand(0), 1503 CE->getType()), 1504 "Invalid bitcast", CE); 1505 } 1506 1507 bool Verifier::VerifyAttributeCount(AttributeSet Attrs, unsigned Params) { 1508 if (Attrs.getNumSlots() == 0) 1509 return true; 1510 1511 unsigned LastSlot = Attrs.getNumSlots() - 1; 1512 unsigned LastIndex = Attrs.getSlotIndex(LastSlot); 1513 if (LastIndex <= Params 1514 || (LastIndex == AttributeSet::FunctionIndex 1515 && (LastSlot == 0 || Attrs.getSlotIndex(LastSlot - 1) <= Params))) 1516 return true; 1517 1518 return false; 1519 } 1520 1521 /// \brief Verify that statepoint intrinsic is well formed. 1522 void Verifier::VerifyStatepoint(ImmutableCallSite CS) { 1523 assert(CS.getCalledFunction() && 1524 CS.getCalledFunction()->getIntrinsicID() == 1525 Intrinsic::experimental_gc_statepoint); 1526 1527 const Instruction &CI = *CS.getInstruction(); 1528 1529 Assert(!CS.doesNotAccessMemory() && !CS.onlyReadsMemory(), 1530 "gc.statepoint must read and write memory to preserve " 1531 "reordering restrictions required by safepoint semantics", 1532 &CI); 1533 1534 const Value *IDV = CS.getArgument(0); 1535 Assert(isa<ConstantInt>(IDV), "gc.statepoint ID must be a constant integer", 1536 &CI); 1537 1538 const Value *NumPatchBytesV = CS.getArgument(1); 1539 Assert(isa<ConstantInt>(NumPatchBytesV), 1540 "gc.statepoint number of patchable bytes must be a constant integer", 1541 &CI); 1542 const int64_t NumPatchBytes = 1543 cast<ConstantInt>(NumPatchBytesV)->getSExtValue(); 1544 assert(isInt<32>(NumPatchBytes) && "NumPatchBytesV is an i32!"); 1545 Assert(NumPatchBytes >= 0, "gc.statepoint number of patchable bytes must be " 1546 "positive", 1547 &CI); 1548 1549 const Value *Target = CS.getArgument(2); 1550 const PointerType *PT = dyn_cast<PointerType>(Target->getType()); 1551 Assert(PT && PT->getElementType()->isFunctionTy(), 1552 "gc.statepoint callee must be of function pointer type", &CI, Target); 1553 FunctionType *TargetFuncType = cast<FunctionType>(PT->getElementType()); 1554 1555 if (NumPatchBytes) 1556 Assert(isa<ConstantPointerNull>(Target->stripPointerCasts()), 1557 "gc.statepoint must have null as call target if number of patchable " 1558 "bytes is non zero", 1559 &CI); 1560 1561 const Value *NumCallArgsV = CS.getArgument(3); 1562 Assert(isa<ConstantInt>(NumCallArgsV), 1563 "gc.statepoint number of arguments to underlying call " 1564 "must be constant integer", 1565 &CI); 1566 const int NumCallArgs = cast<ConstantInt>(NumCallArgsV)->getZExtValue(); 1567 Assert(NumCallArgs >= 0, 1568 "gc.statepoint number of arguments to underlying call " 1569 "must be positive", 1570 &CI); 1571 const int NumParams = (int)TargetFuncType->getNumParams(); 1572 if (TargetFuncType->isVarArg()) { 1573 Assert(NumCallArgs >= NumParams, 1574 "gc.statepoint mismatch in number of vararg call args", &CI); 1575 1576 // TODO: Remove this limitation 1577 Assert(TargetFuncType->getReturnType()->isVoidTy(), 1578 "gc.statepoint doesn't support wrapping non-void " 1579 "vararg functions yet", 1580 &CI); 1581 } else 1582 Assert(NumCallArgs == NumParams, 1583 "gc.statepoint mismatch in number of call args", &CI); 1584 1585 const Value *FlagsV = CS.getArgument(4); 1586 Assert(isa<ConstantInt>(FlagsV), 1587 "gc.statepoint flags must be constant integer", &CI); 1588 const uint64_t Flags = cast<ConstantInt>(FlagsV)->getZExtValue(); 1589 Assert((Flags & ~(uint64_t)StatepointFlags::MaskAll) == 0, 1590 "unknown flag used in gc.statepoint flags argument", &CI); 1591 1592 // Verify that the types of the call parameter arguments match 1593 // the type of the wrapped callee. 1594 for (int i = 0; i < NumParams; i++) { 1595 Type *ParamType = TargetFuncType->getParamType(i); 1596 Type *ArgType = CS.getArgument(5 + i)->getType(); 1597 Assert(ArgType == ParamType, 1598 "gc.statepoint call argument does not match wrapped " 1599 "function type", 1600 &CI); 1601 } 1602 1603 const int EndCallArgsInx = 4 + NumCallArgs; 1604 1605 const Value *NumTransitionArgsV = CS.getArgument(EndCallArgsInx+1); 1606 Assert(isa<ConstantInt>(NumTransitionArgsV), 1607 "gc.statepoint number of transition arguments " 1608 "must be constant integer", 1609 &CI); 1610 const int NumTransitionArgs = 1611 cast<ConstantInt>(NumTransitionArgsV)->getZExtValue(); 1612 Assert(NumTransitionArgs >= 0, 1613 "gc.statepoint number of transition arguments must be positive", &CI); 1614 const int EndTransitionArgsInx = EndCallArgsInx + 1 + NumTransitionArgs; 1615 1616 const Value *NumDeoptArgsV = CS.getArgument(EndTransitionArgsInx+1); 1617 Assert(isa<ConstantInt>(NumDeoptArgsV), 1618 "gc.statepoint number of deoptimization arguments " 1619 "must be constant integer", 1620 &CI); 1621 const int NumDeoptArgs = cast<ConstantInt>(NumDeoptArgsV)->getZExtValue(); 1622 Assert(NumDeoptArgs >= 0, "gc.statepoint number of deoptimization arguments " 1623 "must be positive", 1624 &CI); 1625 1626 const int ExpectedNumArgs = 1627 7 + NumCallArgs + NumTransitionArgs + NumDeoptArgs; 1628 Assert(ExpectedNumArgs <= (int)CS.arg_size(), 1629 "gc.statepoint too few arguments according to length fields", &CI); 1630 1631 // Check that the only uses of this gc.statepoint are gc.result or 1632 // gc.relocate calls which are tied to this statepoint and thus part 1633 // of the same statepoint sequence 1634 for (const User *U : CI.users()) { 1635 const CallInst *Call = dyn_cast<const CallInst>(U); 1636 Assert(Call, "illegal use of statepoint token", &CI, U); 1637 if (!Call) continue; 1638 Assert(isGCRelocate(Call) || isGCResult(Call), 1639 "gc.result or gc.relocate are the only value uses" 1640 "of a gc.statepoint", 1641 &CI, U); 1642 if (isGCResult(Call)) { 1643 Assert(Call->getArgOperand(0) == &CI, 1644 "gc.result connected to wrong gc.statepoint", &CI, Call); 1645 } else if (isGCRelocate(Call)) { 1646 Assert(Call->getArgOperand(0) == &CI, 1647 "gc.relocate connected to wrong gc.statepoint", &CI, Call); 1648 } 1649 } 1650 1651 // Note: It is legal for a single derived pointer to be listed multiple 1652 // times. It's non-optimal, but it is legal. It can also happen after 1653 // insertion if we strip a bitcast away. 1654 // Note: It is really tempting to check that each base is relocated and 1655 // that a derived pointer is never reused as a base pointer. This turns 1656 // out to be problematic since optimizations run after safepoint insertion 1657 // can recognize equality properties that the insertion logic doesn't know 1658 // about. See example statepoint.ll in the verifier subdirectory 1659 } 1660 1661 void Verifier::verifyFrameRecoverIndices() { 1662 for (auto &Counts : FrameEscapeInfo) { 1663 Function *F = Counts.first; 1664 unsigned EscapedObjectCount = Counts.second.first; 1665 unsigned MaxRecoveredIndex = Counts.second.second; 1666 Assert(MaxRecoveredIndex <= EscapedObjectCount, 1667 "all indices passed to llvm.framerecover must be less than the " 1668 "number of arguments passed ot llvm.frameescape in the parent " 1669 "function", 1670 F); 1671 } 1672 } 1673 1674 // visitFunction - Verify that a function is ok. 1675 // 1676 void Verifier::visitFunction(const Function &F) { 1677 // Check function arguments. 1678 FunctionType *FT = F.getFunctionType(); 1679 unsigned NumArgs = F.arg_size(); 1680 1681 Assert(Context == &F.getContext(), 1682 "Function context does not match Module context!", &F); 1683 1684 Assert(!F.hasCommonLinkage(), "Functions may not have common linkage", &F); 1685 Assert(FT->getNumParams() == NumArgs, 1686 "# formal arguments must match # of arguments for function type!", &F, 1687 FT); 1688 Assert(F.getReturnType()->isFirstClassType() || 1689 F.getReturnType()->isVoidTy() || F.getReturnType()->isStructTy(), 1690 "Functions cannot return aggregate values!", &F); 1691 1692 Assert(!F.hasStructRetAttr() || F.getReturnType()->isVoidTy(), 1693 "Invalid struct return type!", &F); 1694 1695 AttributeSet Attrs = F.getAttributes(); 1696 1697 Assert(VerifyAttributeCount(Attrs, FT->getNumParams()), 1698 "Attribute after last parameter!", &F); 1699 1700 // Check function attributes. 1701 VerifyFunctionAttrs(FT, Attrs, &F); 1702 1703 // On function declarations/definitions, we do not support the builtin 1704 // attribute. We do not check this in VerifyFunctionAttrs since that is 1705 // checking for Attributes that can/can not ever be on functions. 1706 Assert(!Attrs.hasAttribute(AttributeSet::FunctionIndex, Attribute::Builtin), 1707 "Attribute 'builtin' can only be applied to a callsite.", &F); 1708 1709 // Check that this function meets the restrictions on this calling convention. 1710 // Sometimes varargs is used for perfectly forwarding thunks, so some of these 1711 // restrictions can be lifted. 1712 switch (F.getCallingConv()) { 1713 default: 1714 case CallingConv::C: 1715 break; 1716 case CallingConv::Fast: 1717 case CallingConv::Cold: 1718 case CallingConv::Intel_OCL_BI: 1719 case CallingConv::PTX_Kernel: 1720 case CallingConv::PTX_Device: 1721 Assert(!F.isVarArg(), "Calling convention does not support varargs or " 1722 "perfect forwarding!", 1723 &F); 1724 break; 1725 } 1726 1727 bool isLLVMdotName = F.getName().size() >= 5 && 1728 F.getName().substr(0, 5) == "llvm."; 1729 1730 // Check that the argument values match the function type for this function... 1731 unsigned i = 0; 1732 for (Function::const_arg_iterator I = F.arg_begin(), E = F.arg_end(); I != E; 1733 ++I, ++i) { 1734 Assert(I->getType() == FT->getParamType(i), 1735 "Argument value does not match function argument type!", I, 1736 FT->getParamType(i)); 1737 Assert(I->getType()->isFirstClassType(), 1738 "Function arguments must have first-class types!", I); 1739 if (!isLLVMdotName) 1740 Assert(!I->getType()->isMetadataTy(), 1741 "Function takes metadata but isn't an intrinsic", I, &F); 1742 } 1743 1744 // Get the function metadata attachments. 1745 SmallVector<std::pair<unsigned, MDNode *>, 4> MDs; 1746 F.getAllMetadata(MDs); 1747 assert(F.hasMetadata() != MDs.empty() && "Bit out-of-sync"); 1748 VerifyFunctionMetadata(MDs); 1749 1750 if (F.isMaterializable()) { 1751 // Function has a body somewhere we can't see. 1752 Assert(MDs.empty(), "unmaterialized function cannot have metadata", &F, 1753 MDs.empty() ? nullptr : MDs.front().second); 1754 } else if (F.isDeclaration()) { 1755 Assert(F.hasExternalLinkage() || F.hasExternalWeakLinkage(), 1756 "invalid linkage type for function declaration", &F); 1757 Assert(MDs.empty(), "function without a body cannot have metadata", &F, 1758 MDs.empty() ? nullptr : MDs.front().second); 1759 } else { 1760 // Verify that this function (which has a body) is not named "llvm.*". It 1761 // is not legal to define intrinsics. 1762 Assert(!isLLVMdotName, "llvm intrinsics cannot be defined!", &F); 1763 1764 // Check the entry node 1765 const BasicBlock *Entry = &F.getEntryBlock(); 1766 Assert(pred_empty(Entry), 1767 "Entry block to function must not have predecessors!", Entry); 1768 1769 // The address of the entry block cannot be taken, unless it is dead. 1770 if (Entry->hasAddressTaken()) { 1771 Assert(!BlockAddress::lookup(Entry)->isConstantUsed(), 1772 "blockaddress may not be used with the entry block!", Entry); 1773 } 1774 1775 // Visit metadata attachments. 1776 for (const auto &I : MDs) 1777 visitMDNode(*I.second); 1778 } 1779 1780 // If this function is actually an intrinsic, verify that it is only used in 1781 // direct call/invokes, never having its "address taken". 1782 if (F.getIntrinsicID()) { 1783 const User *U; 1784 if (F.hasAddressTaken(&U)) 1785 Assert(0, "Invalid user of intrinsic instruction!", U); 1786 } 1787 1788 Assert(!F.hasDLLImportStorageClass() || 1789 (F.isDeclaration() && F.hasExternalLinkage()) || 1790 F.hasAvailableExternallyLinkage(), 1791 "Function is marked as dllimport, but not external.", &F); 1792 } 1793 1794 // verifyBasicBlock - Verify that a basic block is well formed... 1795 // 1796 void Verifier::visitBasicBlock(BasicBlock &BB) { 1797 InstsInThisBlock.clear(); 1798 1799 // Ensure that basic blocks have terminators! 1800 Assert(BB.getTerminator(), "Basic Block does not have terminator!", &BB); 1801 1802 // Check constraints that this basic block imposes on all of the PHI nodes in 1803 // it. 1804 if (isa<PHINode>(BB.front())) { 1805 SmallVector<BasicBlock*, 8> Preds(pred_begin(&BB), pred_end(&BB)); 1806 SmallVector<std::pair<BasicBlock*, Value*>, 8> Values; 1807 std::sort(Preds.begin(), Preds.end()); 1808 PHINode *PN; 1809 for (BasicBlock::iterator I = BB.begin(); (PN = dyn_cast<PHINode>(I));++I) { 1810 // Ensure that PHI nodes have at least one entry! 1811 Assert(PN->getNumIncomingValues() != 0, 1812 "PHI nodes must have at least one entry. If the block is dead, " 1813 "the PHI should be removed!", 1814 PN); 1815 Assert(PN->getNumIncomingValues() == Preds.size(), 1816 "PHINode should have one entry for each predecessor of its " 1817 "parent basic block!", 1818 PN); 1819 1820 // Get and sort all incoming values in the PHI node... 1821 Values.clear(); 1822 Values.reserve(PN->getNumIncomingValues()); 1823 for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) 1824 Values.push_back(std::make_pair(PN->getIncomingBlock(i), 1825 PN->getIncomingValue(i))); 1826 std::sort(Values.begin(), Values.end()); 1827 1828 for (unsigned i = 0, e = Values.size(); i != e; ++i) { 1829 // Check to make sure that if there is more than one entry for a 1830 // particular basic block in this PHI node, that the incoming values are 1831 // all identical. 1832 // 1833 Assert(i == 0 || Values[i].first != Values[i - 1].first || 1834 Values[i].second == Values[i - 1].second, 1835 "PHI node has multiple entries for the same basic block with " 1836 "different incoming values!", 1837 PN, Values[i].first, Values[i].second, Values[i - 1].second); 1838 1839 // Check to make sure that the predecessors and PHI node entries are 1840 // matched up. 1841 Assert(Values[i].first == Preds[i], 1842 "PHI node entries do not match predecessors!", PN, 1843 Values[i].first, Preds[i]); 1844 } 1845 } 1846 } 1847 1848 // Check that all instructions have their parent pointers set up correctly. 1849 for (auto &I : BB) 1850 { 1851 Assert(I.getParent() == &BB, "Instruction has bogus parent pointer!"); 1852 } 1853 } 1854 1855 void Verifier::visitTerminatorInst(TerminatorInst &I) { 1856 // Ensure that terminators only exist at the end of the basic block. 1857 Assert(&I == I.getParent()->getTerminator(), 1858 "Terminator found in the middle of a basic block!", I.getParent()); 1859 visitInstruction(I); 1860 } 1861 1862 void Verifier::visitBranchInst(BranchInst &BI) { 1863 if (BI.isConditional()) { 1864 Assert(BI.getCondition()->getType()->isIntegerTy(1), 1865 "Branch condition is not 'i1' type!", &BI, BI.getCondition()); 1866 } 1867 visitTerminatorInst(BI); 1868 } 1869 1870 void Verifier::visitReturnInst(ReturnInst &RI) { 1871 Function *F = RI.getParent()->getParent(); 1872 unsigned N = RI.getNumOperands(); 1873 if (F->getReturnType()->isVoidTy()) 1874 Assert(N == 0, 1875 "Found return instr that returns non-void in Function of void " 1876 "return type!", 1877 &RI, F->getReturnType()); 1878 else 1879 Assert(N == 1 && F->getReturnType() == RI.getOperand(0)->getType(), 1880 "Function return type does not match operand " 1881 "type of return inst!", 1882 &RI, F->getReturnType()); 1883 1884 // Check to make sure that the return value has necessary properties for 1885 // terminators... 1886 visitTerminatorInst(RI); 1887 } 1888 1889 void Verifier::visitSwitchInst(SwitchInst &SI) { 1890 // Check to make sure that all of the constants in the switch instruction 1891 // have the same type as the switched-on value. 1892 Type *SwitchTy = SI.getCondition()->getType(); 1893 SmallPtrSet<ConstantInt*, 32> Constants; 1894 for (SwitchInst::CaseIt i = SI.case_begin(), e = SI.case_end(); i != e; ++i) { 1895 Assert(i.getCaseValue()->getType() == SwitchTy, 1896 "Switch constants must all be same type as switch value!", &SI); 1897 Assert(Constants.insert(i.getCaseValue()).second, 1898 "Duplicate integer as switch case", &SI, i.getCaseValue()); 1899 } 1900 1901 visitTerminatorInst(SI); 1902 } 1903 1904 void Verifier::visitIndirectBrInst(IndirectBrInst &BI) { 1905 Assert(BI.getAddress()->getType()->isPointerTy(), 1906 "Indirectbr operand must have pointer type!", &BI); 1907 for (unsigned i = 0, e = BI.getNumDestinations(); i != e; ++i) 1908 Assert(BI.getDestination(i)->getType()->isLabelTy(), 1909 "Indirectbr destinations must all have pointer type!", &BI); 1910 1911 visitTerminatorInst(BI); 1912 } 1913 1914 void Verifier::visitSelectInst(SelectInst &SI) { 1915 Assert(!SelectInst::areInvalidOperands(SI.getOperand(0), SI.getOperand(1), 1916 SI.getOperand(2)), 1917 "Invalid operands for select instruction!", &SI); 1918 1919 Assert(SI.getTrueValue()->getType() == SI.getType(), 1920 "Select values must have same type as select instruction!", &SI); 1921 visitInstruction(SI); 1922 } 1923 1924 /// visitUserOp1 - User defined operators shouldn't live beyond the lifetime of 1925 /// a pass, if any exist, it's an error. 1926 /// 1927 void Verifier::visitUserOp1(Instruction &I) { 1928 Assert(0, "User-defined operators should not live outside of a pass!", &I); 1929 } 1930 1931 void Verifier::visitTruncInst(TruncInst &I) { 1932 // Get the source and destination types 1933 Type *SrcTy = I.getOperand(0)->getType(); 1934 Type *DestTy = I.getType(); 1935 1936 // Get the size of the types in bits, we'll need this later 1937 unsigned SrcBitSize = SrcTy->getScalarSizeInBits(); 1938 unsigned DestBitSize = DestTy->getScalarSizeInBits(); 1939 1940 Assert(SrcTy->isIntOrIntVectorTy(), "Trunc only operates on integer", &I); 1941 Assert(DestTy->isIntOrIntVectorTy(), "Trunc only produces integer", &I); 1942 Assert(SrcTy->isVectorTy() == DestTy->isVectorTy(), 1943 "trunc source and destination must both be a vector or neither", &I); 1944 Assert(SrcBitSize > DestBitSize, "DestTy too big for Trunc", &I); 1945 1946 visitInstruction(I); 1947 } 1948 1949 void Verifier::visitZExtInst(ZExtInst &I) { 1950 // Get the source and destination types 1951 Type *SrcTy = I.getOperand(0)->getType(); 1952 Type *DestTy = I.getType(); 1953 1954 // Get the size of the types in bits, we'll need this later 1955 Assert(SrcTy->isIntOrIntVectorTy(), "ZExt only operates on integer", &I); 1956 Assert(DestTy->isIntOrIntVectorTy(), "ZExt only produces an integer", &I); 1957 Assert(SrcTy->isVectorTy() == DestTy->isVectorTy(), 1958 "zext source and destination must both be a vector or neither", &I); 1959 unsigned SrcBitSize = SrcTy->getScalarSizeInBits(); 1960 unsigned DestBitSize = DestTy->getScalarSizeInBits(); 1961 1962 Assert(SrcBitSize < DestBitSize, "Type too small for ZExt", &I); 1963 1964 visitInstruction(I); 1965 } 1966 1967 void Verifier::visitSExtInst(SExtInst &I) { 1968 // Get the source and destination types 1969 Type *SrcTy = I.getOperand(0)->getType(); 1970 Type *DestTy = I.getType(); 1971 1972 // Get the size of the types in bits, we'll need this later 1973 unsigned SrcBitSize = SrcTy->getScalarSizeInBits(); 1974 unsigned DestBitSize = DestTy->getScalarSizeInBits(); 1975 1976 Assert(SrcTy->isIntOrIntVectorTy(), "SExt only operates on integer", &I); 1977 Assert(DestTy->isIntOrIntVectorTy(), "SExt only produces an integer", &I); 1978 Assert(SrcTy->isVectorTy() == DestTy->isVectorTy(), 1979 "sext source and destination must both be a vector or neither", &I); 1980 Assert(SrcBitSize < DestBitSize, "Type too small for SExt", &I); 1981 1982 visitInstruction(I); 1983 } 1984 1985 void Verifier::visitFPTruncInst(FPTruncInst &I) { 1986 // Get the source and destination types 1987 Type *SrcTy = I.getOperand(0)->getType(); 1988 Type *DestTy = I.getType(); 1989 // Get the size of the types in bits, we'll need this later 1990 unsigned SrcBitSize = SrcTy->getScalarSizeInBits(); 1991 unsigned DestBitSize = DestTy->getScalarSizeInBits(); 1992 1993 Assert(SrcTy->isFPOrFPVectorTy(), "FPTrunc only operates on FP", &I); 1994 Assert(DestTy->isFPOrFPVectorTy(), "FPTrunc only produces an FP", &I); 1995 Assert(SrcTy->isVectorTy() == DestTy->isVectorTy(), 1996 "fptrunc source and destination must both be a vector or neither", &I); 1997 Assert(SrcBitSize > DestBitSize, "DestTy too big for FPTrunc", &I); 1998 1999 visitInstruction(I); 2000 } 2001 2002 void Verifier::visitFPExtInst(FPExtInst &I) { 2003 // Get the source and destination types 2004 Type *SrcTy = I.getOperand(0)->getType(); 2005 Type *DestTy = I.getType(); 2006 2007 // Get the size of the types in bits, we'll need this later 2008 unsigned SrcBitSize = SrcTy->getScalarSizeInBits(); 2009 unsigned DestBitSize = DestTy->getScalarSizeInBits(); 2010 2011 Assert(SrcTy->isFPOrFPVectorTy(), "FPExt only operates on FP", &I); 2012 Assert(DestTy->isFPOrFPVectorTy(), "FPExt only produces an FP", &I); 2013 Assert(SrcTy->isVectorTy() == DestTy->isVectorTy(), 2014 "fpext source and destination must both be a vector or neither", &I); 2015 Assert(SrcBitSize < DestBitSize, "DestTy too small for FPExt", &I); 2016 2017 visitInstruction(I); 2018 } 2019 2020 void Verifier::visitUIToFPInst(UIToFPInst &I) { 2021 // Get the source and destination types 2022 Type *SrcTy = I.getOperand(0)->getType(); 2023 Type *DestTy = I.getType(); 2024 2025 bool SrcVec = SrcTy->isVectorTy(); 2026 bool DstVec = DestTy->isVectorTy(); 2027 2028 Assert(SrcVec == DstVec, 2029 "UIToFP source and dest must both be vector or scalar", &I); 2030 Assert(SrcTy->isIntOrIntVectorTy(), 2031 "UIToFP source must be integer or integer vector", &I); 2032 Assert(DestTy->isFPOrFPVectorTy(), "UIToFP result must be FP or FP vector", 2033 &I); 2034 2035 if (SrcVec && DstVec) 2036 Assert(cast<VectorType>(SrcTy)->getNumElements() == 2037 cast<VectorType>(DestTy)->getNumElements(), 2038 "UIToFP source and dest vector length mismatch", &I); 2039 2040 visitInstruction(I); 2041 } 2042 2043 void Verifier::visitSIToFPInst(SIToFPInst &I) { 2044 // Get the source and destination types 2045 Type *SrcTy = I.getOperand(0)->getType(); 2046 Type *DestTy = I.getType(); 2047 2048 bool SrcVec = SrcTy->isVectorTy(); 2049 bool DstVec = DestTy->isVectorTy(); 2050 2051 Assert(SrcVec == DstVec, 2052 "SIToFP source and dest must both be vector or scalar", &I); 2053 Assert(SrcTy->isIntOrIntVectorTy(), 2054 "SIToFP source must be integer or integer vector", &I); 2055 Assert(DestTy->isFPOrFPVectorTy(), "SIToFP result must be FP or FP vector", 2056 &I); 2057 2058 if (SrcVec && DstVec) 2059 Assert(cast<VectorType>(SrcTy)->getNumElements() == 2060 cast<VectorType>(DestTy)->getNumElements(), 2061 "SIToFP source and dest vector length mismatch", &I); 2062 2063 visitInstruction(I); 2064 } 2065 2066 void Verifier::visitFPToUIInst(FPToUIInst &I) { 2067 // Get the source and destination types 2068 Type *SrcTy = I.getOperand(0)->getType(); 2069 Type *DestTy = I.getType(); 2070 2071 bool SrcVec = SrcTy->isVectorTy(); 2072 bool DstVec = DestTy->isVectorTy(); 2073 2074 Assert(SrcVec == DstVec, 2075 "FPToUI source and dest must both be vector or scalar", &I); 2076 Assert(SrcTy->isFPOrFPVectorTy(), "FPToUI source must be FP or FP vector", 2077 &I); 2078 Assert(DestTy->isIntOrIntVectorTy(), 2079 "FPToUI result must be integer or integer vector", &I); 2080 2081 if (SrcVec && DstVec) 2082 Assert(cast<VectorType>(SrcTy)->getNumElements() == 2083 cast<VectorType>(DestTy)->getNumElements(), 2084 "FPToUI source and dest vector length mismatch", &I); 2085 2086 visitInstruction(I); 2087 } 2088 2089 void Verifier::visitFPToSIInst(FPToSIInst &I) { 2090 // Get the source and destination types 2091 Type *SrcTy = I.getOperand(0)->getType(); 2092 Type *DestTy = I.getType(); 2093 2094 bool SrcVec = SrcTy->isVectorTy(); 2095 bool DstVec = DestTy->isVectorTy(); 2096 2097 Assert(SrcVec == DstVec, 2098 "FPToSI source and dest must both be vector or scalar", &I); 2099 Assert(SrcTy->isFPOrFPVectorTy(), "FPToSI source must be FP or FP vector", 2100 &I); 2101 Assert(DestTy->isIntOrIntVectorTy(), 2102 "FPToSI result must be integer or integer vector", &I); 2103 2104 if (SrcVec && DstVec) 2105 Assert(cast<VectorType>(SrcTy)->getNumElements() == 2106 cast<VectorType>(DestTy)->getNumElements(), 2107 "FPToSI source and dest vector length mismatch", &I); 2108 2109 visitInstruction(I); 2110 } 2111 2112 void Verifier::visitPtrToIntInst(PtrToIntInst &I) { 2113 // Get the source and destination types 2114 Type *SrcTy = I.getOperand(0)->getType(); 2115 Type *DestTy = I.getType(); 2116 2117 Assert(SrcTy->getScalarType()->isPointerTy(), 2118 "PtrToInt source must be pointer", &I); 2119 Assert(DestTy->getScalarType()->isIntegerTy(), 2120 "PtrToInt result must be integral", &I); 2121 Assert(SrcTy->isVectorTy() == DestTy->isVectorTy(), "PtrToInt type mismatch", 2122 &I); 2123 2124 if (SrcTy->isVectorTy()) { 2125 VectorType *VSrc = dyn_cast<VectorType>(SrcTy); 2126 VectorType *VDest = dyn_cast<VectorType>(DestTy); 2127 Assert(VSrc->getNumElements() == VDest->getNumElements(), 2128 "PtrToInt Vector width mismatch", &I); 2129 } 2130 2131 visitInstruction(I); 2132 } 2133 2134 void Verifier::visitIntToPtrInst(IntToPtrInst &I) { 2135 // Get the source and destination types 2136 Type *SrcTy = I.getOperand(0)->getType(); 2137 Type *DestTy = I.getType(); 2138 2139 Assert(SrcTy->getScalarType()->isIntegerTy(), 2140 "IntToPtr source must be an integral", &I); 2141 Assert(DestTy->getScalarType()->isPointerTy(), 2142 "IntToPtr result must be a pointer", &I); 2143 Assert(SrcTy->isVectorTy() == DestTy->isVectorTy(), "IntToPtr type mismatch", 2144 &I); 2145 if (SrcTy->isVectorTy()) { 2146 VectorType *VSrc = dyn_cast<VectorType>(SrcTy); 2147 VectorType *VDest = dyn_cast<VectorType>(DestTy); 2148 Assert(VSrc->getNumElements() == VDest->getNumElements(), 2149 "IntToPtr Vector width mismatch", &I); 2150 } 2151 visitInstruction(I); 2152 } 2153 2154 void Verifier::visitBitCastInst(BitCastInst &I) { 2155 Assert( 2156 CastInst::castIsValid(Instruction::BitCast, I.getOperand(0), I.getType()), 2157 "Invalid bitcast", &I); 2158 visitInstruction(I); 2159 } 2160 2161 void Verifier::visitAddrSpaceCastInst(AddrSpaceCastInst &I) { 2162 Type *SrcTy = I.getOperand(0)->getType(); 2163 Type *DestTy = I.getType(); 2164 2165 Assert(SrcTy->isPtrOrPtrVectorTy(), "AddrSpaceCast source must be a pointer", 2166 &I); 2167 Assert(DestTy->isPtrOrPtrVectorTy(), "AddrSpaceCast result must be a pointer", 2168 &I); 2169 Assert(SrcTy->getPointerAddressSpace() != DestTy->getPointerAddressSpace(), 2170 "AddrSpaceCast must be between different address spaces", &I); 2171 if (SrcTy->isVectorTy()) 2172 Assert(SrcTy->getVectorNumElements() == DestTy->getVectorNumElements(), 2173 "AddrSpaceCast vector pointer number of elements mismatch", &I); 2174 visitInstruction(I); 2175 } 2176 2177 /// visitPHINode - Ensure that a PHI node is well formed. 2178 /// 2179 void Verifier::visitPHINode(PHINode &PN) { 2180 // Ensure that the PHI nodes are all grouped together at the top of the block. 2181 // This can be tested by checking whether the instruction before this is 2182 // either nonexistent (because this is begin()) or is a PHI node. If not, 2183 // then there is some other instruction before a PHI. 2184 Assert(&PN == &PN.getParent()->front() || 2185 isa<PHINode>(--BasicBlock::iterator(&PN)), 2186 "PHI nodes not grouped at top of basic block!", &PN, PN.getParent()); 2187 2188 // Check that all of the values of the PHI node have the same type as the 2189 // result, and that the incoming blocks are really basic blocks. 2190 for (Value *IncValue : PN.incoming_values()) { 2191 Assert(PN.getType() == IncValue->getType(), 2192 "PHI node operands are not the same type as the result!", &PN); 2193 } 2194 2195 // All other PHI node constraints are checked in the visitBasicBlock method. 2196 2197 visitInstruction(PN); 2198 } 2199 2200 void Verifier::VerifyCallSite(CallSite CS) { 2201 Instruction *I = CS.getInstruction(); 2202 2203 Assert(CS.getCalledValue()->getType()->isPointerTy(), 2204 "Called function must be a pointer!", I); 2205 PointerType *FPTy = cast<PointerType>(CS.getCalledValue()->getType()); 2206 2207 Assert(FPTy->getElementType()->isFunctionTy(), 2208 "Called function is not pointer to function type!", I); 2209 2210 Assert(FPTy->getElementType() == CS.getFunctionType(), 2211 "Called function is not the same type as the call!", I); 2212 2213 FunctionType *FTy = CS.getFunctionType(); 2214 2215 // Verify that the correct number of arguments are being passed 2216 if (FTy->isVarArg()) 2217 Assert(CS.arg_size() >= FTy->getNumParams(), 2218 "Called function requires more parameters than were provided!", I); 2219 else 2220 Assert(CS.arg_size() == FTy->getNumParams(), 2221 "Incorrect number of arguments passed to called function!", I); 2222 2223 // Verify that all arguments to the call match the function type. 2224 for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i) 2225 Assert(CS.getArgument(i)->getType() == FTy->getParamType(i), 2226 "Call parameter type does not match function signature!", 2227 CS.getArgument(i), FTy->getParamType(i), I); 2228 2229 AttributeSet Attrs = CS.getAttributes(); 2230 2231 Assert(VerifyAttributeCount(Attrs, CS.arg_size()), 2232 "Attribute after last parameter!", I); 2233 2234 // Verify call attributes. 2235 VerifyFunctionAttrs(FTy, Attrs, I); 2236 2237 // Conservatively check the inalloca argument. 2238 // We have a bug if we can find that there is an underlying alloca without 2239 // inalloca. 2240 if (CS.hasInAllocaArgument()) { 2241 Value *InAllocaArg = CS.getArgument(FTy->getNumParams() - 1); 2242 if (auto AI = dyn_cast<AllocaInst>(InAllocaArg->stripInBoundsOffsets())) 2243 Assert(AI->isUsedWithInAlloca(), 2244 "inalloca argument for call has mismatched alloca", AI, I); 2245 } 2246 2247 if (FTy->isVarArg()) { 2248 // FIXME? is 'nest' even legal here? 2249 bool SawNest = false; 2250 bool SawReturned = false; 2251 2252 for (unsigned Idx = 1; Idx < 1 + FTy->getNumParams(); ++Idx) { 2253 if (Attrs.hasAttribute(Idx, Attribute::Nest)) 2254 SawNest = true; 2255 if (Attrs.hasAttribute(Idx, Attribute::Returned)) 2256 SawReturned = true; 2257 } 2258 2259 // Check attributes on the varargs part. 2260 for (unsigned Idx = 1 + FTy->getNumParams(); Idx <= CS.arg_size(); ++Idx) { 2261 Type *Ty = CS.getArgument(Idx-1)->getType(); 2262 VerifyParameterAttrs(Attrs, Idx, Ty, false, I); 2263 2264 if (Attrs.hasAttribute(Idx, Attribute::Nest)) { 2265 Assert(!SawNest, "More than one parameter has attribute nest!", I); 2266 SawNest = true; 2267 } 2268 2269 if (Attrs.hasAttribute(Idx, Attribute::Returned)) { 2270 Assert(!SawReturned, "More than one parameter has attribute returned!", 2271 I); 2272 Assert(Ty->canLosslesslyBitCastTo(FTy->getReturnType()), 2273 "Incompatible argument and return types for 'returned' " 2274 "attribute", 2275 I); 2276 SawReturned = true; 2277 } 2278 2279 Assert(!Attrs.hasAttribute(Idx, Attribute::StructRet), 2280 "Attribute 'sret' cannot be used for vararg call arguments!", I); 2281 2282 if (Attrs.hasAttribute(Idx, Attribute::InAlloca)) 2283 Assert(Idx == CS.arg_size(), "inalloca isn't on the last argument!", I); 2284 } 2285 } 2286 2287 // Verify that there's no metadata unless it's a direct call to an intrinsic. 2288 if (CS.getCalledFunction() == nullptr || 2289 !CS.getCalledFunction()->getName().startswith("llvm.")) { 2290 for (FunctionType::param_iterator PI = FTy->param_begin(), 2291 PE = FTy->param_end(); PI != PE; ++PI) 2292 Assert(!(*PI)->isMetadataTy(), 2293 "Function has metadata parameter but isn't an intrinsic", I); 2294 } 2295 2296 visitInstruction(*I); 2297 } 2298 2299 /// Two types are "congruent" if they are identical, or if they are both pointer 2300 /// types with different pointee types and the same address space. 2301 static bool isTypeCongruent(Type *L, Type *R) { 2302 if (L == R) 2303 return true; 2304 PointerType *PL = dyn_cast<PointerType>(L); 2305 PointerType *PR = dyn_cast<PointerType>(R); 2306 if (!PL || !PR) 2307 return false; 2308 return PL->getAddressSpace() == PR->getAddressSpace(); 2309 } 2310 2311 static AttrBuilder getParameterABIAttributes(int I, AttributeSet Attrs) { 2312 static const Attribute::AttrKind ABIAttrs[] = { 2313 Attribute::StructRet, Attribute::ByVal, Attribute::InAlloca, 2314 Attribute::InReg, Attribute::Returned}; 2315 AttrBuilder Copy; 2316 for (auto AK : ABIAttrs) { 2317 if (Attrs.hasAttribute(I + 1, AK)) 2318 Copy.addAttribute(AK); 2319 } 2320 if (Attrs.hasAttribute(I + 1, Attribute::Alignment)) 2321 Copy.addAlignmentAttr(Attrs.getParamAlignment(I + 1)); 2322 return Copy; 2323 } 2324 2325 void Verifier::verifyMustTailCall(CallInst &CI) { 2326 Assert(!CI.isInlineAsm(), "cannot use musttail call with inline asm", &CI); 2327 2328 // - The caller and callee prototypes must match. Pointer types of 2329 // parameters or return types may differ in pointee type, but not 2330 // address space. 2331 Function *F = CI.getParent()->getParent(); 2332 FunctionType *CallerTy = F->getFunctionType(); 2333 FunctionType *CalleeTy = CI.getFunctionType(); 2334 Assert(CallerTy->getNumParams() == CalleeTy->getNumParams(), 2335 "cannot guarantee tail call due to mismatched parameter counts", &CI); 2336 Assert(CallerTy->isVarArg() == CalleeTy->isVarArg(), 2337 "cannot guarantee tail call due to mismatched varargs", &CI); 2338 Assert(isTypeCongruent(CallerTy->getReturnType(), CalleeTy->getReturnType()), 2339 "cannot guarantee tail call due to mismatched return types", &CI); 2340 for (int I = 0, E = CallerTy->getNumParams(); I != E; ++I) { 2341 Assert( 2342 isTypeCongruent(CallerTy->getParamType(I), CalleeTy->getParamType(I)), 2343 "cannot guarantee tail call due to mismatched parameter types", &CI); 2344 } 2345 2346 // - The calling conventions of the caller and callee must match. 2347 Assert(F->getCallingConv() == CI.getCallingConv(), 2348 "cannot guarantee tail call due to mismatched calling conv", &CI); 2349 2350 // - All ABI-impacting function attributes, such as sret, byval, inreg, 2351 // returned, and inalloca, must match. 2352 AttributeSet CallerAttrs = F->getAttributes(); 2353 AttributeSet CalleeAttrs = CI.getAttributes(); 2354 for (int I = 0, E = CallerTy->getNumParams(); I != E; ++I) { 2355 AttrBuilder CallerABIAttrs = getParameterABIAttributes(I, CallerAttrs); 2356 AttrBuilder CalleeABIAttrs = getParameterABIAttributes(I, CalleeAttrs); 2357 Assert(CallerABIAttrs == CalleeABIAttrs, 2358 "cannot guarantee tail call due to mismatched ABI impacting " 2359 "function attributes", 2360 &CI, CI.getOperand(I)); 2361 } 2362 2363 // - The call must immediately precede a :ref:`ret <i_ret>` instruction, 2364 // or a pointer bitcast followed by a ret instruction. 2365 // - The ret instruction must return the (possibly bitcasted) value 2366 // produced by the call or void. 2367 Value *RetVal = &CI; 2368 Instruction *Next = CI.getNextNode(); 2369 2370 // Handle the optional bitcast. 2371 if (BitCastInst *BI = dyn_cast_or_null<BitCastInst>(Next)) { 2372 Assert(BI->getOperand(0) == RetVal, 2373 "bitcast following musttail call must use the call", BI); 2374 RetVal = BI; 2375 Next = BI->getNextNode(); 2376 } 2377 2378 // Check the return. 2379 ReturnInst *Ret = dyn_cast_or_null<ReturnInst>(Next); 2380 Assert(Ret, "musttail call must be precede a ret with an optional bitcast", 2381 &CI); 2382 Assert(!Ret->getReturnValue() || Ret->getReturnValue() == RetVal, 2383 "musttail call result must be returned", Ret); 2384 } 2385 2386 void Verifier::visitCallInst(CallInst &CI) { 2387 VerifyCallSite(&CI); 2388 2389 if (CI.isMustTailCall()) 2390 verifyMustTailCall(CI); 2391 2392 if (Function *F = CI.getCalledFunction()) 2393 if (Intrinsic::ID ID = (Intrinsic::ID)F->getIntrinsicID()) 2394 visitIntrinsicFunctionCall(ID, CI); 2395 } 2396 2397 void Verifier::visitInvokeInst(InvokeInst &II) { 2398 VerifyCallSite(&II); 2399 2400 // Verify that there is a landingpad instruction as the first non-PHI 2401 // instruction of the 'unwind' destination. 2402 Assert(II.getUnwindDest()->isLandingPad(), 2403 "The unwind destination does not have a landingpad instruction!", &II); 2404 2405 if (Function *F = II.getCalledFunction()) 2406 // TODO: Ideally we should use visitIntrinsicFunction here. But it uses 2407 // CallInst as an input parameter. It not woth updating this whole 2408 // function only to support statepoint verification. 2409 if (F->getIntrinsicID() == Intrinsic::experimental_gc_statepoint) 2410 VerifyStatepoint(ImmutableCallSite(&II)); 2411 2412 visitTerminatorInst(II); 2413 } 2414 2415 /// visitBinaryOperator - Check that both arguments to the binary operator are 2416 /// of the same type! 2417 /// 2418 void Verifier::visitBinaryOperator(BinaryOperator &B) { 2419 Assert(B.getOperand(0)->getType() == B.getOperand(1)->getType(), 2420 "Both operands to a binary operator are not of the same type!", &B); 2421 2422 switch (B.getOpcode()) { 2423 // Check that integer arithmetic operators are only used with 2424 // integral operands. 2425 case Instruction::Add: 2426 case Instruction::Sub: 2427 case Instruction::Mul: 2428 case Instruction::SDiv: 2429 case Instruction::UDiv: 2430 case Instruction::SRem: 2431 case Instruction::URem: 2432 Assert(B.getType()->isIntOrIntVectorTy(), 2433 "Integer arithmetic operators only work with integral types!", &B); 2434 Assert(B.getType() == B.getOperand(0)->getType(), 2435 "Integer arithmetic operators must have same type " 2436 "for operands and result!", 2437 &B); 2438 break; 2439 // Check that floating-point arithmetic operators are only used with 2440 // floating-point operands. 2441 case Instruction::FAdd: 2442 case Instruction::FSub: 2443 case Instruction::FMul: 2444 case Instruction::FDiv: 2445 case Instruction::FRem: 2446 Assert(B.getType()->isFPOrFPVectorTy(), 2447 "Floating-point arithmetic operators only work with " 2448 "floating-point types!", 2449 &B); 2450 Assert(B.getType() == B.getOperand(0)->getType(), 2451 "Floating-point arithmetic operators must have same type " 2452 "for operands and result!", 2453 &B); 2454 break; 2455 // Check that logical operators are only used with integral operands. 2456 case Instruction::And: 2457 case Instruction::Or: 2458 case Instruction::Xor: 2459 Assert(B.getType()->isIntOrIntVectorTy(), 2460 "Logical operators only work with integral types!", &B); 2461 Assert(B.getType() == B.getOperand(0)->getType(), 2462 "Logical operators must have same type for operands and result!", 2463 &B); 2464 break; 2465 case Instruction::Shl: 2466 case Instruction::LShr: 2467 case Instruction::AShr: 2468 Assert(B.getType()->isIntOrIntVectorTy(), 2469 "Shifts only work with integral types!", &B); 2470 Assert(B.getType() == B.getOperand(0)->getType(), 2471 "Shift return type must be same as operands!", &B); 2472 break; 2473 default: 2474 llvm_unreachable("Unknown BinaryOperator opcode!"); 2475 } 2476 2477 visitInstruction(B); 2478 } 2479 2480 void Verifier::visitICmpInst(ICmpInst &IC) { 2481 // Check that the operands are the same type 2482 Type *Op0Ty = IC.getOperand(0)->getType(); 2483 Type *Op1Ty = IC.getOperand(1)->getType(); 2484 Assert(Op0Ty == Op1Ty, 2485 "Both operands to ICmp instruction are not of the same type!", &IC); 2486 // Check that the operands are the right type 2487 Assert(Op0Ty->isIntOrIntVectorTy() || Op0Ty->getScalarType()->isPointerTy(), 2488 "Invalid operand types for ICmp instruction", &IC); 2489 // Check that the predicate is valid. 2490 Assert(IC.getPredicate() >= CmpInst::FIRST_ICMP_PREDICATE && 2491 IC.getPredicate() <= CmpInst::LAST_ICMP_PREDICATE, 2492 "Invalid predicate in ICmp instruction!", &IC); 2493 2494 visitInstruction(IC); 2495 } 2496 2497 void Verifier::visitFCmpInst(FCmpInst &FC) { 2498 // Check that the operands are the same type 2499 Type *Op0Ty = FC.getOperand(0)->getType(); 2500 Type *Op1Ty = FC.getOperand(1)->getType(); 2501 Assert(Op0Ty == Op1Ty, 2502 "Both operands to FCmp instruction are not of the same type!", &FC); 2503 // Check that the operands are the right type 2504 Assert(Op0Ty->isFPOrFPVectorTy(), 2505 "Invalid operand types for FCmp instruction", &FC); 2506 // Check that the predicate is valid. 2507 Assert(FC.getPredicate() >= CmpInst::FIRST_FCMP_PREDICATE && 2508 FC.getPredicate() <= CmpInst::LAST_FCMP_PREDICATE, 2509 "Invalid predicate in FCmp instruction!", &FC); 2510 2511 visitInstruction(FC); 2512 } 2513 2514 void Verifier::visitExtractElementInst(ExtractElementInst &EI) { 2515 Assert( 2516 ExtractElementInst::isValidOperands(EI.getOperand(0), EI.getOperand(1)), 2517 "Invalid extractelement operands!", &EI); 2518 visitInstruction(EI); 2519 } 2520 2521 void Verifier::visitInsertElementInst(InsertElementInst &IE) { 2522 Assert(InsertElementInst::isValidOperands(IE.getOperand(0), IE.getOperand(1), 2523 IE.getOperand(2)), 2524 "Invalid insertelement operands!", &IE); 2525 visitInstruction(IE); 2526 } 2527 2528 void Verifier::visitShuffleVectorInst(ShuffleVectorInst &SV) { 2529 Assert(ShuffleVectorInst::isValidOperands(SV.getOperand(0), SV.getOperand(1), 2530 SV.getOperand(2)), 2531 "Invalid shufflevector operands!", &SV); 2532 visitInstruction(SV); 2533 } 2534 2535 void Verifier::visitGetElementPtrInst(GetElementPtrInst &GEP) { 2536 Type *TargetTy = GEP.getPointerOperandType()->getScalarType(); 2537 2538 Assert(isa<PointerType>(TargetTy), 2539 "GEP base pointer is not a vector or a vector of pointers", &GEP); 2540 Assert(GEP.getSourceElementType()->isSized(), "GEP into unsized type!", &GEP); 2541 Assert(GEP.getPointerOperandType()->isVectorTy() == 2542 GEP.getType()->isVectorTy(), 2543 "Vector GEP must return a vector value", &GEP); 2544 2545 SmallVector<Value*, 16> Idxs(GEP.idx_begin(), GEP.idx_end()); 2546 Type *ElTy = 2547 GetElementPtrInst::getIndexedType(GEP.getSourceElementType(), Idxs); 2548 Assert(ElTy, "Invalid indices for GEP pointer type!", &GEP); 2549 2550 Assert(GEP.getType()->getScalarType()->isPointerTy() && 2551 GEP.getResultElementType() == ElTy, 2552 "GEP is not of right type for indices!", &GEP, ElTy); 2553 2554 if (GEP.getPointerOperandType()->isVectorTy()) { 2555 // Additional checks for vector GEPs. 2556 unsigned GepWidth = GEP.getPointerOperandType()->getVectorNumElements(); 2557 Assert(GepWidth == GEP.getType()->getVectorNumElements(), 2558 "Vector GEP result width doesn't match operand's", &GEP); 2559 for (unsigned i = 0, e = Idxs.size(); i != e; ++i) { 2560 Type *IndexTy = Idxs[i]->getType(); 2561 Assert(IndexTy->isVectorTy(), "Vector GEP must have vector indices!", 2562 &GEP); 2563 unsigned IndexWidth = IndexTy->getVectorNumElements(); 2564 Assert(IndexWidth == GepWidth, "Invalid GEP index vector width", &GEP); 2565 } 2566 } 2567 visitInstruction(GEP); 2568 } 2569 2570 static bool isContiguous(const ConstantRange &A, const ConstantRange &B) { 2571 return A.getUpper() == B.getLower() || A.getLower() == B.getUpper(); 2572 } 2573 2574 void Verifier::visitRangeMetadata(Instruction& I, 2575 MDNode* Range, Type* Ty) { 2576 assert(Range && 2577 Range == I.getMetadata(LLVMContext::MD_range) && 2578 "precondition violation"); 2579 2580 unsigned NumOperands = Range->getNumOperands(); 2581 Assert(NumOperands % 2 == 0, "Unfinished range!", Range); 2582 unsigned NumRanges = NumOperands / 2; 2583 Assert(NumRanges >= 1, "It should have at least one range!", Range); 2584 2585 ConstantRange LastRange(1); // Dummy initial value 2586 for (unsigned i = 0; i < NumRanges; ++i) { 2587 ConstantInt *Low = 2588 mdconst::dyn_extract<ConstantInt>(Range->getOperand(2 * i)); 2589 Assert(Low, "The lower limit must be an integer!", Low); 2590 ConstantInt *High = 2591 mdconst::dyn_extract<ConstantInt>(Range->getOperand(2 * i + 1)); 2592 Assert(High, "The upper limit must be an integer!", High); 2593 Assert(High->getType() == Low->getType() && High->getType() == Ty, 2594 "Range types must match instruction type!", &I); 2595 2596 APInt HighV = High->getValue(); 2597 APInt LowV = Low->getValue(); 2598 ConstantRange CurRange(LowV, HighV); 2599 Assert(!CurRange.isEmptySet() && !CurRange.isFullSet(), 2600 "Range must not be empty!", Range); 2601 if (i != 0) { 2602 Assert(CurRange.intersectWith(LastRange).isEmptySet(), 2603 "Intervals are overlapping", Range); 2604 Assert(LowV.sgt(LastRange.getLower()), "Intervals are not in order", 2605 Range); 2606 Assert(!isContiguous(CurRange, LastRange), "Intervals are contiguous", 2607 Range); 2608 } 2609 LastRange = ConstantRange(LowV, HighV); 2610 } 2611 if (NumRanges > 2) { 2612 APInt FirstLow = 2613 mdconst::dyn_extract<ConstantInt>(Range->getOperand(0))->getValue(); 2614 APInt FirstHigh = 2615 mdconst::dyn_extract<ConstantInt>(Range->getOperand(1))->getValue(); 2616 ConstantRange FirstRange(FirstLow, FirstHigh); 2617 Assert(FirstRange.intersectWith(LastRange).isEmptySet(), 2618 "Intervals are overlapping", Range); 2619 Assert(!isContiguous(FirstRange, LastRange), "Intervals are contiguous", 2620 Range); 2621 } 2622 } 2623 2624 void Verifier::visitLoadInst(LoadInst &LI) { 2625 PointerType *PTy = dyn_cast<PointerType>(LI.getOperand(0)->getType()); 2626 Assert(PTy, "Load operand must be a pointer.", &LI); 2627 Type *ElTy = LI.getType(); 2628 Assert(LI.getAlignment() <= Value::MaximumAlignment, 2629 "huge alignment values are unsupported", &LI); 2630 if (LI.isAtomic()) { 2631 Assert(LI.getOrdering() != Release && LI.getOrdering() != AcquireRelease, 2632 "Load cannot have Release ordering", &LI); 2633 Assert(LI.getAlignment() != 0, 2634 "Atomic load must specify explicit alignment", &LI); 2635 if (!ElTy->isPointerTy()) { 2636 Assert(ElTy->isIntegerTy(), "atomic load operand must have integer type!", 2637 &LI, ElTy); 2638 unsigned Size = ElTy->getPrimitiveSizeInBits(); 2639 Assert(Size >= 8 && !(Size & (Size - 1)), 2640 "atomic load operand must be power-of-two byte-sized integer", &LI, 2641 ElTy); 2642 } 2643 } else { 2644 Assert(LI.getSynchScope() == CrossThread, 2645 "Non-atomic load cannot have SynchronizationScope specified", &LI); 2646 } 2647 2648 visitInstruction(LI); 2649 } 2650 2651 void Verifier::visitStoreInst(StoreInst &SI) { 2652 PointerType *PTy = dyn_cast<PointerType>(SI.getOperand(1)->getType()); 2653 Assert(PTy, "Store operand must be a pointer.", &SI); 2654 Type *ElTy = PTy->getElementType(); 2655 Assert(ElTy == SI.getOperand(0)->getType(), 2656 "Stored value type does not match pointer operand type!", &SI, ElTy); 2657 Assert(SI.getAlignment() <= Value::MaximumAlignment, 2658 "huge alignment values are unsupported", &SI); 2659 if (SI.isAtomic()) { 2660 Assert(SI.getOrdering() != Acquire && SI.getOrdering() != AcquireRelease, 2661 "Store cannot have Acquire ordering", &SI); 2662 Assert(SI.getAlignment() != 0, 2663 "Atomic store must specify explicit alignment", &SI); 2664 if (!ElTy->isPointerTy()) { 2665 Assert(ElTy->isIntegerTy(), 2666 "atomic store operand must have integer type!", &SI, ElTy); 2667 unsigned Size = ElTy->getPrimitiveSizeInBits(); 2668 Assert(Size >= 8 && !(Size & (Size - 1)), 2669 "atomic store operand must be power-of-two byte-sized integer", 2670 &SI, ElTy); 2671 } 2672 } else { 2673 Assert(SI.getSynchScope() == CrossThread, 2674 "Non-atomic store cannot have SynchronizationScope specified", &SI); 2675 } 2676 visitInstruction(SI); 2677 } 2678 2679 void Verifier::visitAllocaInst(AllocaInst &AI) { 2680 SmallPtrSet<const Type*, 4> Visited; 2681 PointerType *PTy = AI.getType(); 2682 Assert(PTy->getAddressSpace() == 0, 2683 "Allocation instruction pointer not in the generic address space!", 2684 &AI); 2685 Assert(AI.getAllocatedType()->isSized(&Visited), 2686 "Cannot allocate unsized type", &AI); 2687 Assert(AI.getArraySize()->getType()->isIntegerTy(), 2688 "Alloca array size must have integer type", &AI); 2689 Assert(AI.getAlignment() <= Value::MaximumAlignment, 2690 "huge alignment values are unsupported", &AI); 2691 2692 visitInstruction(AI); 2693 } 2694 2695 void Verifier::visitAtomicCmpXchgInst(AtomicCmpXchgInst &CXI) { 2696 2697 // FIXME: more conditions??? 2698 Assert(CXI.getSuccessOrdering() != NotAtomic, 2699 "cmpxchg instructions must be atomic.", &CXI); 2700 Assert(CXI.getFailureOrdering() != NotAtomic, 2701 "cmpxchg instructions must be atomic.", &CXI); 2702 Assert(CXI.getSuccessOrdering() != Unordered, 2703 "cmpxchg instructions cannot be unordered.", &CXI); 2704 Assert(CXI.getFailureOrdering() != Unordered, 2705 "cmpxchg instructions cannot be unordered.", &CXI); 2706 Assert(CXI.getSuccessOrdering() >= CXI.getFailureOrdering(), 2707 "cmpxchg instructions be at least as constrained on success as fail", 2708 &CXI); 2709 Assert(CXI.getFailureOrdering() != Release && 2710 CXI.getFailureOrdering() != AcquireRelease, 2711 "cmpxchg failure ordering cannot include release semantics", &CXI); 2712 2713 PointerType *PTy = dyn_cast<PointerType>(CXI.getOperand(0)->getType()); 2714 Assert(PTy, "First cmpxchg operand must be a pointer.", &CXI); 2715 Type *ElTy = PTy->getElementType(); 2716 Assert(ElTy->isIntegerTy(), "cmpxchg operand must have integer type!", &CXI, 2717 ElTy); 2718 unsigned Size = ElTy->getPrimitiveSizeInBits(); 2719 Assert(Size >= 8 && !(Size & (Size - 1)), 2720 "cmpxchg operand must be power-of-two byte-sized integer", &CXI, ElTy); 2721 Assert(ElTy == CXI.getOperand(1)->getType(), 2722 "Expected value type does not match pointer operand type!", &CXI, 2723 ElTy); 2724 Assert(ElTy == CXI.getOperand(2)->getType(), 2725 "Stored value type does not match pointer operand type!", &CXI, ElTy); 2726 visitInstruction(CXI); 2727 } 2728 2729 void Verifier::visitAtomicRMWInst(AtomicRMWInst &RMWI) { 2730 Assert(RMWI.getOrdering() != NotAtomic, 2731 "atomicrmw instructions must be atomic.", &RMWI); 2732 Assert(RMWI.getOrdering() != Unordered, 2733 "atomicrmw instructions cannot be unordered.", &RMWI); 2734 PointerType *PTy = dyn_cast<PointerType>(RMWI.getOperand(0)->getType()); 2735 Assert(PTy, "First atomicrmw operand must be a pointer.", &RMWI); 2736 Type *ElTy = PTy->getElementType(); 2737 Assert(ElTy->isIntegerTy(), "atomicrmw operand must have integer type!", 2738 &RMWI, ElTy); 2739 unsigned Size = ElTy->getPrimitiveSizeInBits(); 2740 Assert(Size >= 8 && !(Size & (Size - 1)), 2741 "atomicrmw operand must be power-of-two byte-sized integer", &RMWI, 2742 ElTy); 2743 Assert(ElTy == RMWI.getOperand(1)->getType(), 2744 "Argument value type does not match pointer operand type!", &RMWI, 2745 ElTy); 2746 Assert(AtomicRMWInst::FIRST_BINOP <= RMWI.getOperation() && 2747 RMWI.getOperation() <= AtomicRMWInst::LAST_BINOP, 2748 "Invalid binary operation!", &RMWI); 2749 visitInstruction(RMWI); 2750 } 2751 2752 void Verifier::visitFenceInst(FenceInst &FI) { 2753 const AtomicOrdering Ordering = FI.getOrdering(); 2754 Assert(Ordering == Acquire || Ordering == Release || 2755 Ordering == AcquireRelease || Ordering == SequentiallyConsistent, 2756 "fence instructions may only have " 2757 "acquire, release, acq_rel, or seq_cst ordering.", 2758 &FI); 2759 visitInstruction(FI); 2760 } 2761 2762 void Verifier::visitExtractValueInst(ExtractValueInst &EVI) { 2763 Assert(ExtractValueInst::getIndexedType(EVI.getAggregateOperand()->getType(), 2764 EVI.getIndices()) == EVI.getType(), 2765 "Invalid ExtractValueInst operands!", &EVI); 2766 2767 visitInstruction(EVI); 2768 } 2769 2770 void Verifier::visitInsertValueInst(InsertValueInst &IVI) { 2771 Assert(ExtractValueInst::getIndexedType(IVI.getAggregateOperand()->getType(), 2772 IVI.getIndices()) == 2773 IVI.getOperand(1)->getType(), 2774 "Invalid InsertValueInst operands!", &IVI); 2775 2776 visitInstruction(IVI); 2777 } 2778 2779 void Verifier::visitLandingPadInst(LandingPadInst &LPI) { 2780 BasicBlock *BB = LPI.getParent(); 2781 2782 // The landingpad instruction is ill-formed if it doesn't have any clauses and 2783 // isn't a cleanup. 2784 Assert(LPI.getNumClauses() > 0 || LPI.isCleanup(), 2785 "LandingPadInst needs at least one clause or to be a cleanup.", &LPI); 2786 2787 // The landingpad instruction defines its parent as a landing pad block. The 2788 // landing pad block may be branched to only by the unwind edge of an invoke. 2789 for (pred_iterator I = pred_begin(BB), E = pred_end(BB); I != E; ++I) { 2790 const InvokeInst *II = dyn_cast<InvokeInst>((*I)->getTerminator()); 2791 Assert(II && II->getUnwindDest() == BB && II->getNormalDest() != BB, 2792 "Block containing LandingPadInst must be jumped to " 2793 "only by the unwind edge of an invoke.", 2794 &LPI); 2795 } 2796 2797 // The landingpad instruction must be the first non-PHI instruction in the 2798 // block. 2799 Assert(LPI.getParent()->getLandingPadInst() == &LPI, 2800 "LandingPadInst not the first non-PHI instruction in the block.", 2801 &LPI); 2802 2803 // The personality functions for all landingpad instructions within the same 2804 // function should match. 2805 if (PersonalityFn) 2806 Assert(LPI.getPersonalityFn() == PersonalityFn, 2807 "Personality function doesn't match others in function", &LPI); 2808 PersonalityFn = LPI.getPersonalityFn(); 2809 2810 // All operands must be constants. 2811 Assert(isa<Constant>(PersonalityFn), "Personality function is not constant!", 2812 &LPI); 2813 for (unsigned i = 0, e = LPI.getNumClauses(); i < e; ++i) { 2814 Constant *Clause = LPI.getClause(i); 2815 if (LPI.isCatch(i)) { 2816 Assert(isa<PointerType>(Clause->getType()), 2817 "Catch operand does not have pointer type!", &LPI); 2818 } else { 2819 Assert(LPI.isFilter(i), "Clause is neither catch nor filter!", &LPI); 2820 Assert(isa<ConstantArray>(Clause) || isa<ConstantAggregateZero>(Clause), 2821 "Filter operand is not an array of constants!", &LPI); 2822 } 2823 } 2824 2825 visitInstruction(LPI); 2826 } 2827 2828 void Verifier::verifyDominatesUse(Instruction &I, unsigned i) { 2829 Instruction *Op = cast<Instruction>(I.getOperand(i)); 2830 // If the we have an invalid invoke, don't try to compute the dominance. 2831 // We already reject it in the invoke specific checks and the dominance 2832 // computation doesn't handle multiple edges. 2833 if (InvokeInst *II = dyn_cast<InvokeInst>(Op)) { 2834 if (II->getNormalDest() == II->getUnwindDest()) 2835 return; 2836 } 2837 2838 const Use &U = I.getOperandUse(i); 2839 Assert(InstsInThisBlock.count(Op) || DT.dominates(Op, U), 2840 "Instruction does not dominate all uses!", Op, &I); 2841 } 2842 2843 /// verifyInstruction - Verify that an instruction is well formed. 2844 /// 2845 void Verifier::visitInstruction(Instruction &I) { 2846 BasicBlock *BB = I.getParent(); 2847 Assert(BB, "Instruction not embedded in basic block!", &I); 2848 2849 if (!isa<PHINode>(I)) { // Check that non-phi nodes are not self referential 2850 for (User *U : I.users()) { 2851 Assert(U != (User *)&I || !DT.isReachableFromEntry(BB), 2852 "Only PHI nodes may reference their own value!", &I); 2853 } 2854 } 2855 2856 // Check that void typed values don't have names 2857 Assert(!I.getType()->isVoidTy() || !I.hasName(), 2858 "Instruction has a name, but provides a void value!", &I); 2859 2860 // Check that the return value of the instruction is either void or a legal 2861 // value type. 2862 Assert(I.getType()->isVoidTy() || I.getType()->isFirstClassType(), 2863 "Instruction returns a non-scalar type!", &I); 2864 2865 // Check that the instruction doesn't produce metadata. Calls are already 2866 // checked against the callee type. 2867 Assert(!I.getType()->isMetadataTy() || isa<CallInst>(I) || isa<InvokeInst>(I), 2868 "Invalid use of metadata!", &I); 2869 2870 // Check that all uses of the instruction, if they are instructions 2871 // themselves, actually have parent basic blocks. If the use is not an 2872 // instruction, it is an error! 2873 for (Use &U : I.uses()) { 2874 if (Instruction *Used = dyn_cast<Instruction>(U.getUser())) 2875 Assert(Used->getParent() != nullptr, 2876 "Instruction referencing" 2877 " instruction not embedded in a basic block!", 2878 &I, Used); 2879 else { 2880 CheckFailed("Use of instruction is not an instruction!", U); 2881 return; 2882 } 2883 } 2884 2885 for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i) { 2886 Assert(I.getOperand(i) != nullptr, "Instruction has null operand!", &I); 2887 2888 // Check to make sure that only first-class-values are operands to 2889 // instructions. 2890 if (!I.getOperand(i)->getType()->isFirstClassType()) { 2891 Assert(0, "Instruction operands must be first-class values!", &I); 2892 } 2893 2894 if (Function *F = dyn_cast<Function>(I.getOperand(i))) { 2895 // Check to make sure that the "address of" an intrinsic function is never 2896 // taken. 2897 Assert( 2898 !F->isIntrinsic() || 2899 i == (isa<CallInst>(I) ? e - 1 : isa<InvokeInst>(I) ? e - 3 : 0), 2900 "Cannot take the address of an intrinsic!", &I); 2901 Assert( 2902 !F->isIntrinsic() || isa<CallInst>(I) || 2903 F->getIntrinsicID() == Intrinsic::donothing || 2904 F->getIntrinsicID() == Intrinsic::experimental_patchpoint_void || 2905 F->getIntrinsicID() == Intrinsic::experimental_patchpoint_i64 || 2906 F->getIntrinsicID() == Intrinsic::experimental_gc_statepoint, 2907 "Cannot invoke an intrinsinc other than" 2908 " donothing or patchpoint", 2909 &I); 2910 Assert(F->getParent() == M, "Referencing function in another module!", 2911 &I); 2912 } else if (BasicBlock *OpBB = dyn_cast<BasicBlock>(I.getOperand(i))) { 2913 Assert(OpBB->getParent() == BB->getParent(), 2914 "Referring to a basic block in another function!", &I); 2915 } else if (Argument *OpArg = dyn_cast<Argument>(I.getOperand(i))) { 2916 Assert(OpArg->getParent() == BB->getParent(), 2917 "Referring to an argument in another function!", &I); 2918 } else if (GlobalValue *GV = dyn_cast<GlobalValue>(I.getOperand(i))) { 2919 Assert(GV->getParent() == M, "Referencing global in another module!", &I); 2920 } else if (isa<Instruction>(I.getOperand(i))) { 2921 verifyDominatesUse(I, i); 2922 } else if (isa<InlineAsm>(I.getOperand(i))) { 2923 Assert((i + 1 == e && isa<CallInst>(I)) || 2924 (i + 3 == e && isa<InvokeInst>(I)), 2925 "Cannot take the address of an inline asm!", &I); 2926 } else if (ConstantExpr *CE = dyn_cast<ConstantExpr>(I.getOperand(i))) { 2927 if (CE->getType()->isPtrOrPtrVectorTy()) { 2928 // If we have a ConstantExpr pointer, we need to see if it came from an 2929 // illegal bitcast (inttoptr <constant int> ) 2930 SmallVector<const ConstantExpr *, 4> Stack; 2931 SmallPtrSet<const ConstantExpr *, 4> Visited; 2932 Stack.push_back(CE); 2933 2934 while (!Stack.empty()) { 2935 const ConstantExpr *V = Stack.pop_back_val(); 2936 if (!Visited.insert(V).second) 2937 continue; 2938 2939 VerifyConstantExprBitcastType(V); 2940 2941 for (unsigned I = 0, N = V->getNumOperands(); I != N; ++I) { 2942 if (ConstantExpr *Op = dyn_cast<ConstantExpr>(V->getOperand(I))) 2943 Stack.push_back(Op); 2944 } 2945 } 2946 } 2947 } 2948 } 2949 2950 if (MDNode *MD = I.getMetadata(LLVMContext::MD_fpmath)) { 2951 Assert(I.getType()->isFPOrFPVectorTy(), 2952 "fpmath requires a floating point result!", &I); 2953 Assert(MD->getNumOperands() == 1, "fpmath takes one operand!", &I); 2954 if (ConstantFP *CFP0 = 2955 mdconst::dyn_extract_or_null<ConstantFP>(MD->getOperand(0))) { 2956 APFloat Accuracy = CFP0->getValueAPF(); 2957 Assert(Accuracy.isFiniteNonZero() && !Accuracy.isNegative(), 2958 "fpmath accuracy not a positive number!", &I); 2959 } else { 2960 Assert(false, "invalid fpmath accuracy!", &I); 2961 } 2962 } 2963 2964 if (MDNode *Range = I.getMetadata(LLVMContext::MD_range)) { 2965 Assert(isa<LoadInst>(I) || isa<CallInst>(I) || isa<InvokeInst>(I), 2966 "Ranges are only for loads, calls and invokes!", &I); 2967 visitRangeMetadata(I, Range, I.getType()); 2968 } 2969 2970 if (I.getMetadata(LLVMContext::MD_nonnull)) { 2971 Assert(I.getType()->isPointerTy(), "nonnull applies only to pointer types", 2972 &I); 2973 Assert(isa<LoadInst>(I), 2974 "nonnull applies only to load instructions, use attributes" 2975 " for calls or invokes", 2976 &I); 2977 } 2978 2979 if (MDNode *N = I.getDebugLoc().getAsMDNode()) { 2980 Assert(isa<DILocation>(N), "invalid !dbg metadata attachment", &I, N); 2981 visitMDNode(*N); 2982 } 2983 2984 InstsInThisBlock.insert(&I); 2985 } 2986 2987 /// VerifyIntrinsicType - Verify that the specified type (which comes from an 2988 /// intrinsic argument or return value) matches the type constraints specified 2989 /// by the .td file (e.g. an "any integer" argument really is an integer). 2990 /// 2991 /// This return true on error but does not print a message. 2992 bool Verifier::VerifyIntrinsicType(Type *Ty, 2993 ArrayRef<Intrinsic::IITDescriptor> &Infos, 2994 SmallVectorImpl<Type*> &ArgTys) { 2995 using namespace Intrinsic; 2996 2997 // If we ran out of descriptors, there are too many arguments. 2998 if (Infos.empty()) return true; 2999 IITDescriptor D = Infos.front(); 3000 Infos = Infos.slice(1); 3001 3002 switch (D.Kind) { 3003 case IITDescriptor::Void: return !Ty->isVoidTy(); 3004 case IITDescriptor::VarArg: return true; 3005 case IITDescriptor::MMX: return !Ty->isX86_MMXTy(); 3006 case IITDescriptor::Metadata: return !Ty->isMetadataTy(); 3007 case IITDescriptor::Half: return !Ty->isHalfTy(); 3008 case IITDescriptor::Float: return !Ty->isFloatTy(); 3009 case IITDescriptor::Double: return !Ty->isDoubleTy(); 3010 case IITDescriptor::Integer: return !Ty->isIntegerTy(D.Integer_Width); 3011 case IITDescriptor::Vector: { 3012 VectorType *VT = dyn_cast<VectorType>(Ty); 3013 return !VT || VT->getNumElements() != D.Vector_Width || 3014 VerifyIntrinsicType(VT->getElementType(), Infos, ArgTys); 3015 } 3016 case IITDescriptor::Pointer: { 3017 PointerType *PT = dyn_cast<PointerType>(Ty); 3018 return !PT || PT->getAddressSpace() != D.Pointer_AddressSpace || 3019 VerifyIntrinsicType(PT->getElementType(), Infos, ArgTys); 3020 } 3021 3022 case IITDescriptor::Struct: { 3023 StructType *ST = dyn_cast<StructType>(Ty); 3024 if (!ST || ST->getNumElements() != D.Struct_NumElements) 3025 return true; 3026 3027 for (unsigned i = 0, e = D.Struct_NumElements; i != e; ++i) 3028 if (VerifyIntrinsicType(ST->getElementType(i), Infos, ArgTys)) 3029 return true; 3030 return false; 3031 } 3032 3033 case IITDescriptor::Argument: 3034 // Two cases here - If this is the second occurrence of an argument, verify 3035 // that the later instance matches the previous instance. 3036 if (D.getArgumentNumber() < ArgTys.size()) 3037 return Ty != ArgTys[D.getArgumentNumber()]; 3038 3039 // Otherwise, if this is the first instance of an argument, record it and 3040 // verify the "Any" kind. 3041 assert(D.getArgumentNumber() == ArgTys.size() && "Table consistency error"); 3042 ArgTys.push_back(Ty); 3043 3044 switch (D.getArgumentKind()) { 3045 case IITDescriptor::AK_Any: return false; // Success 3046 case IITDescriptor::AK_AnyInteger: return !Ty->isIntOrIntVectorTy(); 3047 case IITDescriptor::AK_AnyFloat: return !Ty->isFPOrFPVectorTy(); 3048 case IITDescriptor::AK_AnyVector: return !isa<VectorType>(Ty); 3049 case IITDescriptor::AK_AnyPointer: return !isa<PointerType>(Ty); 3050 } 3051 llvm_unreachable("all argument kinds not covered"); 3052 3053 case IITDescriptor::ExtendArgument: { 3054 // This may only be used when referring to a previous vector argument. 3055 if (D.getArgumentNumber() >= ArgTys.size()) 3056 return true; 3057 3058 Type *NewTy = ArgTys[D.getArgumentNumber()]; 3059 if (VectorType *VTy = dyn_cast<VectorType>(NewTy)) 3060 NewTy = VectorType::getExtendedElementVectorType(VTy); 3061 else if (IntegerType *ITy = dyn_cast<IntegerType>(NewTy)) 3062 NewTy = IntegerType::get(ITy->getContext(), 2 * ITy->getBitWidth()); 3063 else 3064 return true; 3065 3066 return Ty != NewTy; 3067 } 3068 case IITDescriptor::TruncArgument: { 3069 // This may only be used when referring to a previous vector argument. 3070 if (D.getArgumentNumber() >= ArgTys.size()) 3071 return true; 3072 3073 Type *NewTy = ArgTys[D.getArgumentNumber()]; 3074 if (VectorType *VTy = dyn_cast<VectorType>(NewTy)) 3075 NewTy = VectorType::getTruncatedElementVectorType(VTy); 3076 else if (IntegerType *ITy = dyn_cast<IntegerType>(NewTy)) 3077 NewTy = IntegerType::get(ITy->getContext(), ITy->getBitWidth() / 2); 3078 else 3079 return true; 3080 3081 return Ty != NewTy; 3082 } 3083 case IITDescriptor::HalfVecArgument: 3084 // This may only be used when referring to a previous vector argument. 3085 return D.getArgumentNumber() >= ArgTys.size() || 3086 !isa<VectorType>(ArgTys[D.getArgumentNumber()]) || 3087 VectorType::getHalfElementsVectorType( 3088 cast<VectorType>(ArgTys[D.getArgumentNumber()])) != Ty; 3089 case IITDescriptor::SameVecWidthArgument: { 3090 if (D.getArgumentNumber() >= ArgTys.size()) 3091 return true; 3092 VectorType * ReferenceType = 3093 dyn_cast<VectorType>(ArgTys[D.getArgumentNumber()]); 3094 VectorType *ThisArgType = dyn_cast<VectorType>(Ty); 3095 if (!ThisArgType || !ReferenceType || 3096 (ReferenceType->getVectorNumElements() != 3097 ThisArgType->getVectorNumElements())) 3098 return true; 3099 return VerifyIntrinsicType(ThisArgType->getVectorElementType(), 3100 Infos, ArgTys); 3101 } 3102 case IITDescriptor::PtrToArgument: { 3103 if (D.getArgumentNumber() >= ArgTys.size()) 3104 return true; 3105 Type * ReferenceType = ArgTys[D.getArgumentNumber()]; 3106 PointerType *ThisArgType = dyn_cast<PointerType>(Ty); 3107 return (!ThisArgType || ThisArgType->getElementType() != ReferenceType); 3108 } 3109 case IITDescriptor::VecOfPtrsToElt: { 3110 if (D.getArgumentNumber() >= ArgTys.size()) 3111 return true; 3112 VectorType * ReferenceType = 3113 dyn_cast<VectorType> (ArgTys[D.getArgumentNumber()]); 3114 VectorType *ThisArgVecTy = dyn_cast<VectorType>(Ty); 3115 if (!ThisArgVecTy || !ReferenceType || 3116 (ReferenceType->getVectorNumElements() != 3117 ThisArgVecTy->getVectorNumElements())) 3118 return true; 3119 PointerType *ThisArgEltTy = 3120 dyn_cast<PointerType>(ThisArgVecTy->getVectorElementType()); 3121 if (!ThisArgEltTy) 3122 return true; 3123 return ThisArgEltTy->getElementType() != 3124 ReferenceType->getVectorElementType(); 3125 } 3126 } 3127 llvm_unreachable("unhandled"); 3128 } 3129 3130 /// \brief Verify if the intrinsic has variable arguments. 3131 /// This method is intended to be called after all the fixed arguments have been 3132 /// verified first. 3133 /// 3134 /// This method returns true on error and does not print an error message. 3135 bool 3136 Verifier::VerifyIntrinsicIsVarArg(bool isVarArg, 3137 ArrayRef<Intrinsic::IITDescriptor> &Infos) { 3138 using namespace Intrinsic; 3139 3140 // If there are no descriptors left, then it can't be a vararg. 3141 if (Infos.empty()) 3142 return isVarArg; 3143 3144 // There should be only one descriptor remaining at this point. 3145 if (Infos.size() != 1) 3146 return true; 3147 3148 // Check and verify the descriptor. 3149 IITDescriptor D = Infos.front(); 3150 Infos = Infos.slice(1); 3151 if (D.Kind == IITDescriptor::VarArg) 3152 return !isVarArg; 3153 3154 return true; 3155 } 3156 3157 /// visitIntrinsicFunction - Allow intrinsics to be verified in different ways. 3158 /// 3159 void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) { 3160 Function *IF = CI.getCalledFunction(); 3161 Assert(IF->isDeclaration(), "Intrinsic functions should never be defined!", 3162 IF); 3163 3164 // Verify that the intrinsic prototype lines up with what the .td files 3165 // describe. 3166 FunctionType *IFTy = IF->getFunctionType(); 3167 bool IsVarArg = IFTy->isVarArg(); 3168 3169 SmallVector<Intrinsic::IITDescriptor, 8> Table; 3170 getIntrinsicInfoTableEntries(ID, Table); 3171 ArrayRef<Intrinsic::IITDescriptor> TableRef = Table; 3172 3173 SmallVector<Type *, 4> ArgTys; 3174 Assert(!VerifyIntrinsicType(IFTy->getReturnType(), TableRef, ArgTys), 3175 "Intrinsic has incorrect return type!", IF); 3176 for (unsigned i = 0, e = IFTy->getNumParams(); i != e; ++i) 3177 Assert(!VerifyIntrinsicType(IFTy->getParamType(i), TableRef, ArgTys), 3178 "Intrinsic has incorrect argument type!", IF); 3179 3180 // Verify if the intrinsic call matches the vararg property. 3181 if (IsVarArg) 3182 Assert(!VerifyIntrinsicIsVarArg(IsVarArg, TableRef), 3183 "Intrinsic was not defined with variable arguments!", IF); 3184 else 3185 Assert(!VerifyIntrinsicIsVarArg(IsVarArg, TableRef), 3186 "Callsite was not defined with variable arguments!", IF); 3187 3188 // All descriptors should be absorbed by now. 3189 Assert(TableRef.empty(), "Intrinsic has too few arguments!", IF); 3190 3191 // Now that we have the intrinsic ID and the actual argument types (and we 3192 // know they are legal for the intrinsic!) get the intrinsic name through the 3193 // usual means. This allows us to verify the mangling of argument types into 3194 // the name. 3195 const std::string ExpectedName = Intrinsic::getName(ID, ArgTys); 3196 Assert(ExpectedName == IF->getName(), 3197 "Intrinsic name not mangled correctly for type arguments! " 3198 "Should be: " + 3199 ExpectedName, 3200 IF); 3201 3202 // If the intrinsic takes MDNode arguments, verify that they are either global 3203 // or are local to *this* function. 3204 for (unsigned i = 0, e = CI.getNumArgOperands(); i != e; ++i) 3205 if (auto *MD = dyn_cast<MetadataAsValue>(CI.getArgOperand(i))) 3206 visitMetadataAsValue(*MD, CI.getParent()->getParent()); 3207 3208 switch (ID) { 3209 default: 3210 break; 3211 case Intrinsic::ctlz: // llvm.ctlz 3212 case Intrinsic::cttz: // llvm.cttz 3213 Assert(isa<ConstantInt>(CI.getArgOperand(1)), 3214 "is_zero_undef argument of bit counting intrinsics must be a " 3215 "constant int", 3216 &CI); 3217 break; 3218 case Intrinsic::dbg_declare: // llvm.dbg.declare 3219 Assert(isa<MetadataAsValue>(CI.getArgOperand(0)), 3220 "invalid llvm.dbg.declare intrinsic call 1", &CI); 3221 visitDbgIntrinsic("declare", cast<DbgDeclareInst>(CI)); 3222 break; 3223 case Intrinsic::dbg_value: // llvm.dbg.value 3224 visitDbgIntrinsic("value", cast<DbgValueInst>(CI)); 3225 break; 3226 case Intrinsic::memcpy: 3227 case Intrinsic::memmove: 3228 case Intrinsic::memset: { 3229 ConstantInt *AlignCI = dyn_cast<ConstantInt>(CI.getArgOperand(3)); 3230 Assert(AlignCI, 3231 "alignment argument of memory intrinsics must be a constant int", 3232 &CI); 3233 const APInt &AlignVal = AlignCI->getValue(); 3234 Assert(AlignCI->isZero() || AlignVal.isPowerOf2(), 3235 "alignment argument of memory intrinsics must be a power of 2", &CI); 3236 Assert(isa<ConstantInt>(CI.getArgOperand(4)), 3237 "isvolatile argument of memory intrinsics must be a constant int", 3238 &CI); 3239 break; 3240 } 3241 case Intrinsic::gcroot: 3242 case Intrinsic::gcwrite: 3243 case Intrinsic::gcread: 3244 if (ID == Intrinsic::gcroot) { 3245 AllocaInst *AI = 3246 dyn_cast<AllocaInst>(CI.getArgOperand(0)->stripPointerCasts()); 3247 Assert(AI, "llvm.gcroot parameter #1 must be an alloca.", &CI); 3248 Assert(isa<Constant>(CI.getArgOperand(1)), 3249 "llvm.gcroot parameter #2 must be a constant.", &CI); 3250 if (!AI->getAllocatedType()->isPointerTy()) { 3251 Assert(!isa<ConstantPointerNull>(CI.getArgOperand(1)), 3252 "llvm.gcroot parameter #1 must either be a pointer alloca, " 3253 "or argument #2 must be a non-null constant.", 3254 &CI); 3255 } 3256 } 3257 3258 Assert(CI.getParent()->getParent()->hasGC(), 3259 "Enclosing function does not use GC.", &CI); 3260 break; 3261 case Intrinsic::init_trampoline: 3262 Assert(isa<Function>(CI.getArgOperand(1)->stripPointerCasts()), 3263 "llvm.init_trampoline parameter #2 must resolve to a function.", 3264 &CI); 3265 break; 3266 case Intrinsic::prefetch: 3267 Assert(isa<ConstantInt>(CI.getArgOperand(1)) && 3268 isa<ConstantInt>(CI.getArgOperand(2)) && 3269 cast<ConstantInt>(CI.getArgOperand(1))->getZExtValue() < 2 && 3270 cast<ConstantInt>(CI.getArgOperand(2))->getZExtValue() < 4, 3271 "invalid arguments to llvm.prefetch", &CI); 3272 break; 3273 case Intrinsic::stackprotector: 3274 Assert(isa<AllocaInst>(CI.getArgOperand(1)->stripPointerCasts()), 3275 "llvm.stackprotector parameter #2 must resolve to an alloca.", &CI); 3276 break; 3277 case Intrinsic::lifetime_start: 3278 case Intrinsic::lifetime_end: 3279 case Intrinsic::invariant_start: 3280 Assert(isa<ConstantInt>(CI.getArgOperand(0)), 3281 "size argument of memory use markers must be a constant integer", 3282 &CI); 3283 break; 3284 case Intrinsic::invariant_end: 3285 Assert(isa<ConstantInt>(CI.getArgOperand(1)), 3286 "llvm.invariant.end parameter #2 must be a constant integer", &CI); 3287 break; 3288 3289 case Intrinsic::frameescape: { 3290 BasicBlock *BB = CI.getParent(); 3291 Assert(BB == &BB->getParent()->front(), 3292 "llvm.frameescape used outside of entry block", &CI); 3293 Assert(!SawFrameEscape, 3294 "multiple calls to llvm.frameescape in one function", &CI); 3295 for (Value *Arg : CI.arg_operands()) { 3296 if (isa<ConstantPointerNull>(Arg)) 3297 continue; // Null values are allowed as placeholders. 3298 auto *AI = dyn_cast<AllocaInst>(Arg->stripPointerCasts()); 3299 Assert(AI && AI->isStaticAlloca(), 3300 "llvm.frameescape only accepts static allocas", &CI); 3301 } 3302 FrameEscapeInfo[BB->getParent()].first = CI.getNumArgOperands(); 3303 SawFrameEscape = true; 3304 break; 3305 } 3306 case Intrinsic::framerecover: { 3307 Value *FnArg = CI.getArgOperand(0)->stripPointerCasts(); 3308 Function *Fn = dyn_cast<Function>(FnArg); 3309 Assert(Fn && !Fn->isDeclaration(), 3310 "llvm.framerecover first " 3311 "argument must be function defined in this module", 3312 &CI); 3313 auto *IdxArg = dyn_cast<ConstantInt>(CI.getArgOperand(2)); 3314 Assert(IdxArg, "idx argument of llvm.framerecover must be a constant int", 3315 &CI); 3316 auto &Entry = FrameEscapeInfo[Fn]; 3317 Entry.second = unsigned( 3318 std::max(uint64_t(Entry.second), IdxArg->getLimitedValue(~0U) + 1)); 3319 break; 3320 } 3321 3322 case Intrinsic::experimental_gc_statepoint: 3323 Assert(!CI.isInlineAsm(), 3324 "gc.statepoint support for inline assembly unimplemented", &CI); 3325 Assert(CI.getParent()->getParent()->hasGC(), 3326 "Enclosing function does not use GC.", &CI); 3327 3328 VerifyStatepoint(ImmutableCallSite(&CI)); 3329 break; 3330 case Intrinsic::experimental_gc_result_int: 3331 case Intrinsic::experimental_gc_result_float: 3332 case Intrinsic::experimental_gc_result_ptr: 3333 case Intrinsic::experimental_gc_result: { 3334 Assert(CI.getParent()->getParent()->hasGC(), 3335 "Enclosing function does not use GC.", &CI); 3336 // Are we tied to a statepoint properly? 3337 CallSite StatepointCS(CI.getArgOperand(0)); 3338 const Function *StatepointFn = 3339 StatepointCS.getInstruction() ? StatepointCS.getCalledFunction() : nullptr; 3340 Assert(StatepointFn && StatepointFn->isDeclaration() && 3341 StatepointFn->getIntrinsicID() == 3342 Intrinsic::experimental_gc_statepoint, 3343 "gc.result operand #1 must be from a statepoint", &CI, 3344 CI.getArgOperand(0)); 3345 3346 // Assert that result type matches wrapped callee. 3347 const Value *Target = StatepointCS.getArgument(2); 3348 const PointerType *PT = cast<PointerType>(Target->getType()); 3349 const FunctionType *TargetFuncType = 3350 cast<FunctionType>(PT->getElementType()); 3351 Assert(CI.getType() == TargetFuncType->getReturnType(), 3352 "gc.result result type does not match wrapped callee", &CI); 3353 break; 3354 } 3355 case Intrinsic::experimental_gc_relocate: { 3356 Assert(CI.getNumArgOperands() == 3, "wrong number of arguments", &CI); 3357 3358 // Check that this relocate is correctly tied to the statepoint 3359 3360 // This is case for relocate on the unwinding path of an invoke statepoint 3361 if (ExtractValueInst *ExtractValue = 3362 dyn_cast<ExtractValueInst>(CI.getArgOperand(0))) { 3363 Assert(isa<LandingPadInst>(ExtractValue->getAggregateOperand()), 3364 "gc relocate on unwind path incorrectly linked to the statepoint", 3365 &CI); 3366 3367 const BasicBlock *InvokeBB = 3368 ExtractValue->getParent()->getUniquePredecessor(); 3369 3370 // Landingpad relocates should have only one predecessor with invoke 3371 // statepoint terminator 3372 Assert(InvokeBB, "safepoints should have unique landingpads", 3373 ExtractValue->getParent()); 3374 Assert(InvokeBB->getTerminator(), "safepoint block should be well formed", 3375 InvokeBB); 3376 Assert(isStatepoint(InvokeBB->getTerminator()), 3377 "gc relocate should be linked to a statepoint", InvokeBB); 3378 } 3379 else { 3380 // In all other cases relocate should be tied to the statepoint directly. 3381 // This covers relocates on a normal return path of invoke statepoint and 3382 // relocates of a call statepoint 3383 auto Token = CI.getArgOperand(0); 3384 Assert(isa<Instruction>(Token) && isStatepoint(cast<Instruction>(Token)), 3385 "gc relocate is incorrectly tied to the statepoint", &CI, Token); 3386 } 3387 3388 // Verify rest of the relocate arguments 3389 3390 GCRelocateOperands Ops(&CI); 3391 ImmutableCallSite StatepointCS(Ops.getStatepoint()); 3392 3393 // Both the base and derived must be piped through the safepoint 3394 Value* Base = CI.getArgOperand(1); 3395 Assert(isa<ConstantInt>(Base), 3396 "gc.relocate operand #2 must be integer offset", &CI); 3397 3398 Value* Derived = CI.getArgOperand(2); 3399 Assert(isa<ConstantInt>(Derived), 3400 "gc.relocate operand #3 must be integer offset", &CI); 3401 3402 const int BaseIndex = cast<ConstantInt>(Base)->getZExtValue(); 3403 const int DerivedIndex = cast<ConstantInt>(Derived)->getZExtValue(); 3404 // Check the bounds 3405 Assert(0 <= BaseIndex && BaseIndex < (int)StatepointCS.arg_size(), 3406 "gc.relocate: statepoint base index out of bounds", &CI); 3407 Assert(0 <= DerivedIndex && DerivedIndex < (int)StatepointCS.arg_size(), 3408 "gc.relocate: statepoint derived index out of bounds", &CI); 3409 3410 // Check that BaseIndex and DerivedIndex fall within the 'gc parameters' 3411 // section of the statepoint's argument 3412 Assert(StatepointCS.arg_size() > 0, 3413 "gc.statepoint: insufficient arguments"); 3414 Assert(isa<ConstantInt>(StatepointCS.getArgument(3)), 3415 "gc.statement: number of call arguments must be constant integer"); 3416 const unsigned NumCallArgs = 3417 cast<ConstantInt>(StatepointCS.getArgument(3))->getZExtValue(); 3418 Assert(StatepointCS.arg_size() > NumCallArgs + 5, 3419 "gc.statepoint: mismatch in number of call arguments"); 3420 Assert(isa<ConstantInt>(StatepointCS.getArgument(NumCallArgs + 5)), 3421 "gc.statepoint: number of transition arguments must be " 3422 "a constant integer"); 3423 const int NumTransitionArgs = 3424 cast<ConstantInt>(StatepointCS.getArgument(NumCallArgs + 5)) 3425 ->getZExtValue(); 3426 const int DeoptArgsStart = 4 + NumCallArgs + 1 + NumTransitionArgs + 1; 3427 Assert(isa<ConstantInt>(StatepointCS.getArgument(DeoptArgsStart)), 3428 "gc.statepoint: number of deoptimization arguments must be " 3429 "a constant integer"); 3430 const int NumDeoptArgs = 3431 cast<ConstantInt>(StatepointCS.getArgument(DeoptArgsStart))->getZExtValue(); 3432 const int GCParamArgsStart = DeoptArgsStart + 1 + NumDeoptArgs; 3433 const int GCParamArgsEnd = StatepointCS.arg_size(); 3434 Assert(GCParamArgsStart <= BaseIndex && BaseIndex < GCParamArgsEnd, 3435 "gc.relocate: statepoint base index doesn't fall within the " 3436 "'gc parameters' section of the statepoint call", 3437 &CI); 3438 Assert(GCParamArgsStart <= DerivedIndex && DerivedIndex < GCParamArgsEnd, 3439 "gc.relocate: statepoint derived index doesn't fall within the " 3440 "'gc parameters' section of the statepoint call", 3441 &CI); 3442 3443 // Relocated value must be a pointer type, but gc_relocate does not need to return the 3444 // same pointer type as the relocated pointer. It can be casted to the correct type later 3445 // if it's desired. However, they must have the same address space. 3446 GCRelocateOperands Operands(&CI); 3447 Assert(Operands.getDerivedPtr()->getType()->isPointerTy(), 3448 "gc.relocate: relocated value must be a gc pointer", &CI); 3449 3450 // gc_relocate return type must be a pointer type, and is verified earlier in 3451 // VerifyIntrinsicType(). 3452 Assert(cast<PointerType>(CI.getType())->getAddressSpace() == 3453 cast<PointerType>(Operands.getDerivedPtr()->getType())->getAddressSpace(), 3454 "gc.relocate: relocating a pointer shouldn't change its address space", &CI); 3455 break; 3456 } 3457 }; 3458 } 3459 3460 /// \brief Carefully grab the subprogram from a local scope. 3461 /// 3462 /// This carefully grabs the subprogram from a local scope, avoiding the 3463 /// built-in assertions that would typically fire. 3464 static DISubprogram *getSubprogram(Metadata *LocalScope) { 3465 if (!LocalScope) 3466 return nullptr; 3467 3468 if (auto *SP = dyn_cast<DISubprogram>(LocalScope)) 3469 return SP; 3470 3471 if (auto *LB = dyn_cast<DILexicalBlockBase>(LocalScope)) 3472 return getSubprogram(LB->getRawScope()); 3473 3474 // Just return null; broken scope chains are checked elsewhere. 3475 assert(!isa<DILocalScope>(LocalScope) && "Unknown type of local scope"); 3476 return nullptr; 3477 } 3478 3479 template <class DbgIntrinsicTy> 3480 void Verifier::visitDbgIntrinsic(StringRef Kind, DbgIntrinsicTy &DII) { 3481 auto *MD = cast<MetadataAsValue>(DII.getArgOperand(0))->getMetadata(); 3482 Assert(isa<ValueAsMetadata>(MD) || 3483 (isa<MDNode>(MD) && !cast<MDNode>(MD)->getNumOperands()), 3484 "invalid llvm.dbg." + Kind + " intrinsic address/value", &DII, MD); 3485 Assert(isa<DILocalVariable>(DII.getRawVariable()), 3486 "invalid llvm.dbg." + Kind + " intrinsic variable", &DII, 3487 DII.getRawVariable()); 3488 Assert(isa<DIExpression>(DII.getRawExpression()), 3489 "invalid llvm.dbg." + Kind + " intrinsic expression", &DII, 3490 DII.getRawExpression()); 3491 3492 // Ignore broken !dbg attachments; they're checked elsewhere. 3493 if (MDNode *N = DII.getDebugLoc().getAsMDNode()) 3494 if (!isa<DILocation>(N)) 3495 return; 3496 3497 BasicBlock *BB = DII.getParent(); 3498 Function *F = BB ? BB->getParent() : nullptr; 3499 3500 // The scopes for variables and !dbg attachments must agree. 3501 DILocalVariable *Var = DII.getVariable(); 3502 DILocation *Loc = DII.getDebugLoc(); 3503 Assert(Loc, "llvm.dbg." + Kind + " intrinsic requires a !dbg attachment", 3504 &DII, BB, F); 3505 3506 DISubprogram *VarSP = getSubprogram(Var->getRawScope()); 3507 DISubprogram *LocSP = getSubprogram(Loc->getRawScope()); 3508 if (!VarSP || !LocSP) 3509 return; // Broken scope chains are checked elsewhere. 3510 3511 Assert(VarSP == LocSP, "mismatched subprogram between llvm.dbg." + Kind + 3512 " variable and !dbg attachment", 3513 &DII, BB, F, Var, Var->getScope()->getSubprogram(), Loc, 3514 Loc->getScope()->getSubprogram()); 3515 } 3516 3517 template <class MapTy> 3518 static uint64_t getVariableSize(const DILocalVariable &V, const MapTy &Map) { 3519 // Be careful of broken types (checked elsewhere). 3520 const Metadata *RawType = V.getRawType(); 3521 while (RawType) { 3522 // Try to get the size directly. 3523 if (auto *T = dyn_cast<DIType>(RawType)) 3524 if (uint64_t Size = T->getSizeInBits()) 3525 return Size; 3526 3527 if (auto *DT = dyn_cast<DIDerivedType>(RawType)) { 3528 // Look at the base type. 3529 RawType = DT->getRawBaseType(); 3530 continue; 3531 } 3532 3533 if (auto *S = dyn_cast<MDString>(RawType)) { 3534 // Don't error on missing types (checked elsewhere). 3535 RawType = Map.lookup(S); 3536 continue; 3537 } 3538 3539 // Missing type or size. 3540 break; 3541 } 3542 3543 // Fail gracefully. 3544 return 0; 3545 } 3546 3547 template <class MapTy> 3548 void Verifier::verifyBitPieceExpression(const DbgInfoIntrinsic &I, 3549 const MapTy &TypeRefs) { 3550 DILocalVariable *V; 3551 DIExpression *E; 3552 if (auto *DVI = dyn_cast<DbgValueInst>(&I)) { 3553 V = dyn_cast_or_null<DILocalVariable>(DVI->getRawVariable()); 3554 E = dyn_cast_or_null<DIExpression>(DVI->getRawExpression()); 3555 } else { 3556 auto *DDI = cast<DbgDeclareInst>(&I); 3557 V = dyn_cast_or_null<DILocalVariable>(DDI->getRawVariable()); 3558 E = dyn_cast_or_null<DIExpression>(DDI->getRawExpression()); 3559 } 3560 3561 // We don't know whether this intrinsic verified correctly. 3562 if (!V || !E || !E->isValid()) 3563 return; 3564 3565 // Nothing to do if this isn't a bit piece expression. 3566 if (!E->isBitPiece()) 3567 return; 3568 3569 // The frontend helps out GDB by emitting the members of local anonymous 3570 // unions as artificial local variables with shared storage. When SROA splits 3571 // the storage for artificial local variables that are smaller than the entire 3572 // union, the overhang piece will be outside of the allotted space for the 3573 // variable and this check fails. 3574 // FIXME: Remove this check as soon as clang stops doing this; it hides bugs. 3575 if (V->isArtificial()) 3576 return; 3577 3578 // If there's no size, the type is broken, but that should be checked 3579 // elsewhere. 3580 uint64_t VarSize = getVariableSize(*V, TypeRefs); 3581 if (!VarSize) 3582 return; 3583 3584 unsigned PieceSize = E->getBitPieceSize(); 3585 unsigned PieceOffset = E->getBitPieceOffset(); 3586 Assert(PieceSize + PieceOffset <= VarSize, 3587 "piece is larger than or outside of variable", &I, V, E); 3588 Assert(PieceSize != VarSize, "piece covers entire variable", &I, V, E); 3589 } 3590 3591 void Verifier::visitUnresolvedTypeRef(const MDString *S, const MDNode *N) { 3592 // This is in its own function so we get an error for each bad type ref (not 3593 // just the first). 3594 Assert(false, "unresolved type ref", S, N); 3595 } 3596 3597 void Verifier::verifyTypeRefs() { 3598 auto *CUs = M->getNamedMetadata("llvm.dbg.cu"); 3599 if (!CUs) 3600 return; 3601 3602 // Visit all the compile units again to map the type references. 3603 SmallDenseMap<const MDString *, const DIType *, 32> TypeRefs; 3604 for (auto *CU : CUs->operands()) 3605 if (auto Ts = cast<DICompileUnit>(CU)->getRetainedTypes()) 3606 for (DIType *Op : Ts) 3607 if (auto *T = dyn_cast<DICompositeType>(Op)) 3608 if (auto *S = T->getRawIdentifier()) { 3609 UnresolvedTypeRefs.erase(S); 3610 TypeRefs.insert(std::make_pair(S, T)); 3611 } 3612 3613 // Verify debug info intrinsic bit piece expressions. This needs a second 3614 // pass through the intructions, since we haven't built TypeRefs yet when 3615 // verifying functions, and simply queuing the DbgInfoIntrinsics to evaluate 3616 // later/now would queue up some that could be later deleted. 3617 for (const Function &F : *M) 3618 for (const BasicBlock &BB : F) 3619 for (const Instruction &I : BB) 3620 if (auto *DII = dyn_cast<DbgInfoIntrinsic>(&I)) 3621 verifyBitPieceExpression(*DII, TypeRefs); 3622 3623 // Return early if all typerefs were resolved. 3624 if (UnresolvedTypeRefs.empty()) 3625 return; 3626 3627 // Sort the unresolved references by name so the output is deterministic. 3628 typedef std::pair<const MDString *, const MDNode *> TypeRef; 3629 SmallVector<TypeRef, 32> Unresolved(UnresolvedTypeRefs.begin(), 3630 UnresolvedTypeRefs.end()); 3631 std::sort(Unresolved.begin(), Unresolved.end(), 3632 [](const TypeRef &LHS, const TypeRef &RHS) { 3633 return LHS.first->getString() < RHS.first->getString(); 3634 }); 3635 3636 // Visit the unresolved refs (printing out the errors). 3637 for (const TypeRef &TR : Unresolved) 3638 visitUnresolvedTypeRef(TR.first, TR.second); 3639 } 3640 3641 //===----------------------------------------------------------------------===// 3642 // Implement the public interfaces to this file... 3643 //===----------------------------------------------------------------------===// 3644 3645 bool llvm::verifyFunction(const Function &f, raw_ostream *OS) { 3646 Function &F = const_cast<Function &>(f); 3647 assert(!F.isDeclaration() && "Cannot verify external functions"); 3648 3649 raw_null_ostream NullStr; 3650 Verifier V(OS ? *OS : NullStr); 3651 3652 // Note that this function's return value is inverted from what you would 3653 // expect of a function called "verify". 3654 return !V.verify(F); 3655 } 3656 3657 bool llvm::verifyModule(const Module &M, raw_ostream *OS) { 3658 raw_null_ostream NullStr; 3659 Verifier V(OS ? *OS : NullStr); 3660 3661 bool Broken = false; 3662 for (Module::const_iterator I = M.begin(), E = M.end(); I != E; ++I) 3663 if (!I->isDeclaration() && !I->isMaterializable()) 3664 Broken |= !V.verify(*I); 3665 3666 // Note that this function's return value is inverted from what you would 3667 // expect of a function called "verify". 3668 return !V.verify(M) || Broken; 3669 } 3670 3671 namespace { 3672 struct VerifierLegacyPass : public FunctionPass { 3673 static char ID; 3674 3675 Verifier V; 3676 bool FatalErrors; 3677 3678 VerifierLegacyPass() : FunctionPass(ID), V(dbgs()), FatalErrors(true) { 3679 initializeVerifierLegacyPassPass(*PassRegistry::getPassRegistry()); 3680 } 3681 explicit VerifierLegacyPass(bool FatalErrors) 3682 : FunctionPass(ID), V(dbgs()), FatalErrors(FatalErrors) { 3683 initializeVerifierLegacyPassPass(*PassRegistry::getPassRegistry()); 3684 } 3685 3686 bool runOnFunction(Function &F) override { 3687 if (!V.verify(F) && FatalErrors) 3688 report_fatal_error("Broken function found, compilation aborted!"); 3689 3690 return false; 3691 } 3692 3693 bool doFinalization(Module &M) override { 3694 if (!V.verify(M) && FatalErrors) 3695 report_fatal_error("Broken module found, compilation aborted!"); 3696 3697 return false; 3698 } 3699 3700 void getAnalysisUsage(AnalysisUsage &AU) const override { 3701 AU.setPreservesAll(); 3702 } 3703 }; 3704 } 3705 3706 char VerifierLegacyPass::ID = 0; 3707 INITIALIZE_PASS(VerifierLegacyPass, "verify", "Module Verifier", false, false) 3708 3709 FunctionPass *llvm::createVerifierPass(bool FatalErrors) { 3710 return new VerifierLegacyPass(FatalErrors); 3711 } 3712 3713 PreservedAnalyses VerifierPass::run(Module &M) { 3714 if (verifyModule(M, &dbgs()) && FatalErrors) 3715 report_fatal_error("Broken module found, compilation aborted!"); 3716 3717 return PreservedAnalyses::all(); 3718 } 3719 3720 PreservedAnalyses VerifierPass::run(Function &F) { 3721 if (verifyFunction(F, &dbgs()) && FatalErrors) 3722 report_fatal_error("Broken function found, compilation aborted!"); 3723 3724 return PreservedAnalyses::all(); 3725 } 3726