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