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