From 536c64b4d6e67477fafadb830b6a5bf81cf5652d Mon Sep 17 00:00:00 2001 From: Anton Korobeynikov Date: Sun, 28 Oct 2007 22:50:32 +0000 Subject: [PATCH] Add 'pedantic' mode to verifier rejecting syntactically valid, but 'bad' due to other reasons code git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43424 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/VMCore/Verifier.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/lib/VMCore/Verifier.cpp b/lib/VMCore/Verifier.cpp index 000fa6bbb17..1d35d65e612 100644 --- a/lib/VMCore/Verifier.cpp +++ b/lib/VMCore/Verifier.cpp @@ -60,6 +60,7 @@ #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/STLExtras.h" +#include "llvm/Support/CommandLine.h" #include "llvm/Support/Compiler.h" #include #include @@ -67,7 +68,10 @@ using namespace llvm; namespace { // Anonymous namespace for class - + cl::opt + Pedantic("pedantic", + cl::desc("Reject code with undefined behaviour")); + struct VISIBILITY_HIDDEN Verifier : public FunctionPass, InstVisitor { static char ID; // Pass ID, replacement for typeid @@ -806,10 +810,17 @@ void Verifier::visitCallInst(CallInst &CI) { "Call parameter type does not match function signature!", CI.getOperand(i+1), FTy->getParamType(i), &CI); - if (Function *F = CI.getCalledFunction()) + if (Function *F = CI.getCalledFunction()) { + if (Pedantic) { + // Verify that calling convention of Function and CallInst match + Assert1(F->getCallingConv() == CI.getCallingConv(), + "Call uses different calling convention than function", &CI); + } + if (Intrinsic::ID ID = (Intrinsic::ID)F->getIntrinsicID()) visitIntrinsicFunctionCall(ID, CI); - + } + visitInstruction(CI); }