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