~louis/ubuntu/trusty/clamav/lp799623_fix_logrotate

« back to all changes in this revision

Viewing changes to libclamav/c++/llvm/lib/VMCore/Verifier.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Scott Kitterman
  • Date: 2010-03-12 11:30:04 UTC
  • mfrom: (0.41.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20100312113004-b0fop4bkycszdd0z
Tags: 0.96~rc1+dfsg-0ubuntu1
* New upstream RC - FFE (LP: #537636):
  - Add OfficialDatabaseOnly option to clamav-base.postinst.in
  - Add LocalSocketGroup option to clamav-base.postinst.in
  - Add LocalSocketMode option to clamav-base.postinst.in
  - Add CrossFilesystems option to clamav-base.postinst.in
  - Add ClamukoScannerCount option to clamav-base.postinst.in
  - Add BytecodeSecurity opiton to clamav-base.postinst.in
  - Add DetectionStatsHostID option to clamav-freshclam.postinst.in
  - Add Bytecode option to clamav-freshclam.postinst.in
  - Add MilterSocketGroup option to clamav-milter.postinst.in
  - Add MilterSocketMode option to clamav-milter.postinst.in
  - Add ReportHostname option to clamav-milter.postinst.in
  - Bump libclamav SO version to 6.1.0 in libclamav6.install
  - Drop clamdmon from clamav.examples (no longer shipped by upstream)
  - Drop libclamav.a from libclamav-dev.install (not built by upstream)
  - Update SO version for lintian override for libclamav6
  - Add new Bytecode Testing Tool, usr/bin/clambc, to clamav.install
  - Add build-depends on python and python-setuptools for new test suite
  - Update debian/copyright for the embedded copy of llvm (using the system
    llvm is not currently feasible)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//===-- Verifier.cpp - Implement the Module Verifier -------------*- C++ -*-==//
 
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
//  * All other things that are tested by asserts spread about the code...
 
39
//
 
40
//===----------------------------------------------------------------------===//
 
41
 
 
42
#include "llvm/Analysis/Verifier.h"
 
43
#include "llvm/CallingConv.h"
 
44
#include "llvm/Constants.h"
 
45
#include "llvm/DerivedTypes.h"
 
46
#include "llvm/InlineAsm.h"
 
47
#include "llvm/IntrinsicInst.h"
 
48
#include "llvm/Metadata.h"
 
49
#include "llvm/Module.h"
 
50
#include "llvm/Pass.h"
 
51
#include "llvm/PassManager.h"
 
52
#include "llvm/TypeSymbolTable.h"
 
53
#include "llvm/Analysis/Dominators.h"
 
54
#include "llvm/Assembly/Writer.h"
 
55
#include "llvm/CodeGen/ValueTypes.h"
 
56
#include "llvm/Support/CallSite.h"
 
57
#include "llvm/Support/CFG.h"
 
58
#include "llvm/Support/Debug.h"
 
59
#include "llvm/Support/InstVisitor.h"
 
60
#include "llvm/ADT/SetVector.h"
 
61
#include "llvm/ADT/SmallPtrSet.h"
 
62
#include "llvm/ADT/SmallVector.h"
 
63
#include "llvm/ADT/StringExtras.h"
 
64
#include "llvm/ADT/STLExtras.h"
 
65
#include "llvm/Support/ErrorHandling.h"
 
66
#include "llvm/Support/raw_ostream.h"
 
67
#include <algorithm>
 
68
#include <cstdarg>
 
69
using namespace llvm;
 
70
 
 
71
namespace {  // Anonymous namespace for class
 
72
  struct PreVerifier : public FunctionPass {
 
73
    static char ID; // Pass ID, replacement for typeid
 
74
 
 
75
    PreVerifier() : FunctionPass(&ID) { }
 
76
 
 
77
    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
 
78
      AU.setPreservesAll();
 
79
    }
 
80
 
 
81
    // Check that the prerequisites for successful DominatorTree construction
 
82
    // are satisfied.
 
83
    bool runOnFunction(Function &F) {
 
84
      bool Broken = false;
 
85
 
 
86
      for (Function::iterator I = F.begin(), E = F.end(); I != E; ++I) {
 
87
        if (I->empty() || !I->back().isTerminator()) {
 
88
          dbgs() << "Basic Block does not have terminator!\n";
 
89
          WriteAsOperand(dbgs(), I, true);
 
90
          dbgs() << "\n";
 
91
          Broken = true;
 
92
        }
 
93
      }
 
94
 
 
95
      if (Broken)
 
96
        llvm_report_error("Broken module, no Basic Block terminator!");
 
97
 
 
98
      return false;
 
99
    }
 
100
  };
 
101
}
 
102
 
 
103
char PreVerifier::ID = 0;
 
104
static RegisterPass<PreVerifier>
 
105
PreVer("preverify", "Preliminary module verification");
 
106
static const PassInfo *const PreVerifyID = &PreVer;
 
107
 
 
108
namespace {
 
109
  class TypeSet : public AbstractTypeUser {
 
110
  public:
 
111
    TypeSet() {}
 
112
 
 
113
    /// Insert a type into the set of types.
 
114
    bool insert(const Type *Ty) {
 
115
      if (!Types.insert(Ty))
 
116
        return false;
 
117
      if (Ty->isAbstract())
 
118
        Ty->addAbstractTypeUser(this);
 
119
      return true;
 
120
    }
 
121
 
 
122
    // Remove ourselves as abstract type listeners for any types that remain
 
123
    // abstract when the TypeSet is destroyed.
 
124
    ~TypeSet() {
 
125
      for (SmallSetVector<const Type *, 16>::iterator I = Types.begin(),
 
126
             E = Types.end(); I != E; ++I) {
 
127
        const Type *Ty = *I;
 
128
        if (Ty->isAbstract())
 
129
          Ty->removeAbstractTypeUser(this);
 
130
      }
 
131
    }
 
132
 
 
133
    // Abstract type user interface.
 
134
 
 
135
    /// Remove types from the set when refined. Do not insert the type it was
 
136
    /// refined to because that type hasn't been verified yet.
 
137
    void refineAbstractType(const DerivedType *OldTy, const Type *NewTy) {
 
138
      Types.remove(OldTy);
 
139
      OldTy->removeAbstractTypeUser(this);
 
140
    }
 
141
 
 
142
    /// Stop listening for changes to a type which is no longer abstract.
 
143
    void typeBecameConcrete(const DerivedType *AbsTy) {
 
144
      AbsTy->removeAbstractTypeUser(this);
 
145
    }
 
146
 
 
147
    void dump() const {}
 
148
 
 
149
  private:
 
150
    SmallSetVector<const Type *, 16> Types;
 
151
 
 
152
    // Disallow copying.
 
153
    TypeSet(const TypeSet &);
 
154
    TypeSet &operator=(const TypeSet &);
 
155
  };
 
156
 
 
157
  struct Verifier : public FunctionPass, public InstVisitor<Verifier> {
 
158
    static char ID; // Pass ID, replacement for typeid
 
159
    bool Broken;          // Is this module found to be broken?
 
160
    bool RealPass;        // Are we not being run by a PassManager?
 
161
    VerifierFailureAction action;
 
162
                          // What to do if verification fails.
 
163
    Module *Mod;          // Module we are verifying right now
 
164
    LLVMContext *Context; // Context within which we are verifying
 
165
    DominatorTree *DT;    // Dominator Tree, caution can be null!
 
166
 
 
167
    std::string Messages;
 
168
    raw_string_ostream MessagesStr;
 
169
 
 
170
    /// InstInThisBlock - when verifying a basic block, keep track of all of the
 
171
    /// instructions we have seen so far.  This allows us to do efficient
 
172
    /// dominance checks for the case when an instruction has an operand that is
 
173
    /// an instruction in the same block.
 
174
    SmallPtrSet<Instruction*, 16> InstsInThisBlock;
 
175
 
 
176
    /// Types - keep track of the types that have been checked already.
 
177
    TypeSet Types;
 
178
 
 
179
    Verifier()
 
180
      : FunctionPass(&ID), 
 
181
      Broken(false), RealPass(true), action(AbortProcessAction),
 
182
      Mod(0), Context(0), DT(0), MessagesStr(Messages) {}
 
183
    explicit Verifier(VerifierFailureAction ctn)
 
184
      : FunctionPass(&ID), 
 
185
      Broken(false), RealPass(true), action(ctn), Mod(0), Context(0), DT(0),
 
186
      MessagesStr(Messages) {}
 
187
    explicit Verifier(bool AB)
 
188
      : FunctionPass(&ID), 
 
189
      Broken(false), RealPass(true),
 
190
      action( AB ? AbortProcessAction : PrintMessageAction), Mod(0),
 
191
      Context(0), DT(0), MessagesStr(Messages) {}
 
192
    explicit Verifier(DominatorTree &dt)
 
193
      : FunctionPass(&ID), 
 
194
      Broken(false), RealPass(false), action(PrintMessageAction), Mod(0),
 
195
      Context(0), DT(&dt), MessagesStr(Messages) {}
 
196
 
 
197
 
 
198
    bool doInitialization(Module &M) {
 
199
      Mod = &M;
 
200
      Context = &M.getContext();
 
201
      verifyTypeSymbolTable(M.getTypeSymbolTable());
 
202
 
 
203
      // If this is a real pass, in a pass manager, we must abort before
 
204
      // returning back to the pass manager, or else the pass manager may try to
 
205
      // run other passes on the broken module.
 
206
      if (RealPass)
 
207
        return abortIfBroken();
 
208
      return false;
 
209
    }
 
210
 
 
211
    bool runOnFunction(Function &F) {
 
212
      // Get dominator information if we are being run by PassManager
 
213
      if (RealPass) DT = &getAnalysis<DominatorTree>();
 
214
 
 
215
      Mod = F.getParent();
 
216
      if (!Context) Context = &F.getContext();
 
217
 
 
218
      visit(F);
 
219
      InstsInThisBlock.clear();
 
220
 
 
221
      // If this is a real pass, in a pass manager, we must abort before
 
222
      // returning back to the pass manager, or else the pass manager may try to
 
223
      // run other passes on the broken module.
 
224
      if (RealPass)
 
225
        return abortIfBroken();
 
226
 
 
227
      return false;
 
228
    }
 
229
 
 
230
    bool doFinalization(Module &M) {
 
231
      // Scan through, checking all of the external function's linkage now...
 
232
      for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) {
 
233
        visitGlobalValue(*I);
 
234
 
 
235
        // Check to make sure function prototypes are okay.
 
236
        if (I->isDeclaration()) visitFunction(*I);
 
237
      }
 
238
 
 
239
      for (Module::global_iterator I = M.global_begin(), E = M.global_end(); 
 
240
           I != E; ++I)
 
241
        visitGlobalVariable(*I);
 
242
 
 
243
      for (Module::alias_iterator I = M.alias_begin(), E = M.alias_end(); 
 
244
           I != E; ++I)
 
245
        visitGlobalAlias(*I);
 
246
 
 
247
      // If the module is broken, abort at this time.
 
248
      return abortIfBroken();
 
249
    }
 
250
 
 
251
    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
 
252
      AU.setPreservesAll();
 
253
      AU.addRequiredID(PreVerifyID);
 
254
      if (RealPass)
 
255
        AU.addRequired<DominatorTree>();
 
256
    }
 
257
 
 
258
    /// abortIfBroken - If the module is broken and we are supposed to abort on
 
259
    /// this condition, do so.
 
260
    ///
 
261
    bool abortIfBroken() {
 
262
      if (!Broken) return false;
 
263
      MessagesStr << "Broken module found, ";
 
264
      switch (action) {
 
265
      default: llvm_unreachable("Unknown action");
 
266
      case AbortProcessAction:
 
267
        MessagesStr << "compilation aborted!\n";
 
268
        dbgs() << MessagesStr.str();
 
269
        // Client should choose different reaction if abort is not desired
 
270
        abort();
 
271
      case PrintMessageAction:
 
272
        MessagesStr << "verification continues.\n";
 
273
        dbgs() << MessagesStr.str();
 
274
        return false;
 
275
      case ReturnStatusAction:
 
276
        MessagesStr << "compilation terminated.\n";
 
277
        return true;
 
278
      }
 
279
    }
 
280
 
 
281
 
 
282
    // Verification methods...
 
283
    void verifyTypeSymbolTable(TypeSymbolTable &ST);
 
284
    void visitGlobalValue(GlobalValue &GV);
 
285
    void visitGlobalVariable(GlobalVariable &GV);
 
286
    void visitGlobalAlias(GlobalAlias &GA);
 
287
    void visitFunction(Function &F);
 
288
    void visitBasicBlock(BasicBlock &BB);
 
289
    using InstVisitor<Verifier>::visit;
 
290
 
 
291
    void visit(Instruction &I);
 
292
 
 
293
    void visitTruncInst(TruncInst &I);
 
294
    void visitZExtInst(ZExtInst &I);
 
295
    void visitSExtInst(SExtInst &I);
 
296
    void visitFPTruncInst(FPTruncInst &I);
 
297
    void visitFPExtInst(FPExtInst &I);
 
298
    void visitFPToUIInst(FPToUIInst &I);
 
299
    void visitFPToSIInst(FPToSIInst &I);
 
300
    void visitUIToFPInst(UIToFPInst &I);
 
301
    void visitSIToFPInst(SIToFPInst &I);
 
302
    void visitIntToPtrInst(IntToPtrInst &I);
 
303
    void visitPtrToIntInst(PtrToIntInst &I);
 
304
    void visitBitCastInst(BitCastInst &I);
 
305
    void visitPHINode(PHINode &PN);
 
306
    void visitBinaryOperator(BinaryOperator &B);
 
307
    void visitICmpInst(ICmpInst &IC);
 
308
    void visitFCmpInst(FCmpInst &FC);
 
309
    void visitExtractElementInst(ExtractElementInst &EI);
 
310
    void visitInsertElementInst(InsertElementInst &EI);
 
311
    void visitShuffleVectorInst(ShuffleVectorInst &EI);
 
312
    void visitVAArgInst(VAArgInst &VAA) { visitInstruction(VAA); }
 
313
    void visitCallInst(CallInst &CI);
 
314
    void visitInvokeInst(InvokeInst &II);
 
315
    void visitGetElementPtrInst(GetElementPtrInst &GEP);
 
316
    void visitLoadInst(LoadInst &LI);
 
317
    void visitStoreInst(StoreInst &SI);
 
318
    void visitInstruction(Instruction &I);
 
319
    void visitTerminatorInst(TerminatorInst &I);
 
320
    void visitBranchInst(BranchInst &BI);
 
321
    void visitReturnInst(ReturnInst &RI);
 
322
    void visitSwitchInst(SwitchInst &SI);
 
323
    void visitSelectInst(SelectInst &SI);
 
324
    void visitUserOp1(Instruction &I);
 
325
    void visitUserOp2(Instruction &I) { visitUserOp1(I); }
 
326
    void visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI);
 
327
    void visitAllocaInst(AllocaInst &AI);
 
328
    void visitExtractValueInst(ExtractValueInst &EVI);
 
329
    void visitInsertValueInst(InsertValueInst &IVI);
 
330
 
 
331
    void VerifyCallSite(CallSite CS);
 
332
    bool PerformTypeCheck(Intrinsic::ID ID, Function *F, const Type *Ty,
 
333
                          int VT, unsigned ArgNo, std::string &Suffix);
 
334
    void VerifyIntrinsicPrototype(Intrinsic::ID ID, Function *F,
 
335
                                  unsigned RetNum, unsigned ParamNum, ...);
 
336
    void VerifyFunctionLocalMetadata(MDNode *N, Function *F,
 
337
                                     SmallPtrSet<MDNode *, 32> &Visited);
 
338
    void VerifyParameterAttrs(Attributes Attrs, const Type *Ty,
 
339
                              bool isReturnValue, const Value *V);
 
340
    void VerifyFunctionAttrs(const FunctionType *FT, const AttrListPtr &Attrs,
 
341
                             const Value *V);
 
342
    void VerifyType(const Type *Ty);
 
343
 
 
344
    void WriteValue(const Value *V) {
 
345
      if (!V) return;
 
346
      if (isa<Instruction>(V)) {
 
347
        MessagesStr << *V << '\n';
 
348
      } else {
 
349
        WriteAsOperand(MessagesStr, V, true, Mod);
 
350
        MessagesStr << '\n';
 
351
      }
 
352
    }
 
353
 
 
354
    void WriteType(const Type *T) {
 
355
      if (!T) return;
 
356
      MessagesStr << ' ';
 
357
      WriteTypeSymbolic(MessagesStr, T, Mod);
 
358
    }
 
359
 
 
360
 
 
361
    // CheckFailed - A check failed, so print out the condition and the message
 
362
    // that failed.  This provides a nice place to put a breakpoint if you want
 
363
    // to see why something is not correct.
 
364
    void CheckFailed(const Twine &Message,
 
365
                     const Value *V1 = 0, const Value *V2 = 0,
 
366
                     const Value *V3 = 0, const Value *V4 = 0) {
 
367
      MessagesStr << Message.str() << "\n";
 
368
      WriteValue(V1);
 
369
      WriteValue(V2);
 
370
      WriteValue(V3);
 
371
      WriteValue(V4);
 
372
      Broken = true;
 
373
    }
 
374
 
 
375
    void CheckFailed(const Twine &Message, const Value *V1,
 
376
                     const Type *T2, const Value *V3 = 0) {
 
377
      MessagesStr << Message.str() << "\n";
 
378
      WriteValue(V1);
 
379
      WriteType(T2);
 
380
      WriteValue(V3);
 
381
      Broken = true;
 
382
    }
 
383
 
 
384
    void CheckFailed(const Twine &Message, const Type *T1,
 
385
                     const Type *T2 = 0, const Type *T3 = 0) {
 
386
      MessagesStr << Message.str() << "\n";
 
387
      WriteType(T1);
 
388
      WriteType(T2);
 
389
      WriteType(T3);
 
390
      Broken = true;
 
391
    }
 
392
  };
 
393
} // End anonymous namespace
 
394
 
 
395
char Verifier::ID = 0;
 
396
static RegisterPass<Verifier> X("verify", "Module Verifier");
 
397
 
 
398
// Assert - We know that cond should be true, if not print an error message.
 
399
#define Assert(C, M) \
 
400
  do { if (!(C)) { CheckFailed(M); return; } } while (0)
 
401
#define Assert1(C, M, V1) \
 
402
  do { if (!(C)) { CheckFailed(M, V1); return; } } while (0)
 
403
#define Assert2(C, M, V1, V2) \
 
404
  do { if (!(C)) { CheckFailed(M, V1, V2); return; } } while (0)
 
405
#define Assert3(C, M, V1, V2, V3) \
 
406
  do { if (!(C)) { CheckFailed(M, V1, V2, V3); return; } } while (0)
 
407
#define Assert4(C, M, V1, V2, V3, V4) \
 
408
  do { if (!(C)) { CheckFailed(M, V1, V2, V3, V4); return; } } while (0)
 
409
 
 
410
void Verifier::visit(Instruction &I) {
 
411
  for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
 
412
    Assert1(I.getOperand(i) != 0, "Operand is null", &I);
 
413
  InstVisitor<Verifier>::visit(I);
 
414
}
 
415
 
 
416
 
 
417
void Verifier::visitGlobalValue(GlobalValue &GV) {
 
418
  Assert1(!GV.isDeclaration() ||
 
419
          GV.isMaterializable() ||
 
420
          GV.hasExternalLinkage() ||
 
421
          GV.hasDLLImportLinkage() ||
 
422
          GV.hasExternalWeakLinkage() ||
 
423
          (isa<GlobalAlias>(GV) &&
 
424
           (GV.hasLocalLinkage() || GV.hasWeakLinkage())),
 
425
  "Global is external, but doesn't have external or dllimport or weak linkage!",
 
426
          &GV);
 
427
 
 
428
  Assert1(!GV.hasDLLImportLinkage() || GV.isDeclaration(),
 
429
          "Global is marked as dllimport, but not external", &GV);
 
430
 
 
431
  Assert1(!GV.hasAppendingLinkage() || isa<GlobalVariable>(GV),
 
432
          "Only global variables can have appending linkage!", &GV);
 
433
 
 
434
  if (GV.hasAppendingLinkage()) {
 
435
    GlobalVariable *GVar = dyn_cast<GlobalVariable>(&GV);
 
436
    Assert1(GVar && GVar->getType()->getElementType()->isArrayTy(),
 
437
            "Only global arrays can have appending linkage!", GVar);
 
438
  }
 
439
}
 
440
 
 
441
void Verifier::visitGlobalVariable(GlobalVariable &GV) {
 
442
  if (GV.hasInitializer()) {
 
443
    Assert1(GV.getInitializer()->getType() == GV.getType()->getElementType(),
 
444
            "Global variable initializer type does not match global "
 
445
            "variable type!", &GV);
 
446
 
 
447
    // If the global has common linkage, it must have a zero initializer and
 
448
    // cannot be constant.
 
449
    if (GV.hasCommonLinkage()) {
 
450
      Assert1(GV.getInitializer()->isNullValue(),
 
451
              "'common' global must have a zero initializer!", &GV);
 
452
      Assert1(!GV.isConstant(), "'common' global may not be marked constant!",
 
453
              &GV);
 
454
    }
 
455
  } else {
 
456
    Assert1(GV.hasExternalLinkage() || GV.hasDLLImportLinkage() ||
 
457
            GV.hasExternalWeakLinkage(),
 
458
            "invalid linkage type for global declaration", &GV);
 
459
  }
 
460
 
 
461
  visitGlobalValue(GV);
 
462
}
 
463
 
 
464
void Verifier::visitGlobalAlias(GlobalAlias &GA) {
 
465
  Assert1(!GA.getName().empty(),
 
466
          "Alias name cannot be empty!", &GA);
 
467
  Assert1(GA.hasExternalLinkage() || GA.hasLocalLinkage() ||
 
468
          GA.hasWeakLinkage(),
 
469
          "Alias should have external or external weak linkage!", &GA);
 
470
  Assert1(GA.getAliasee(),
 
471
          "Aliasee cannot be NULL!", &GA);
 
472
  Assert1(GA.getType() == GA.getAliasee()->getType(),
 
473
          "Alias and aliasee types should match!", &GA);
 
474
 
 
475
  if (!isa<GlobalValue>(GA.getAliasee())) {
 
476
    const ConstantExpr *CE = dyn_cast<ConstantExpr>(GA.getAliasee());
 
477
    Assert1(CE && 
 
478
            (CE->getOpcode() == Instruction::BitCast ||
 
479
             CE->getOpcode() == Instruction::GetElementPtr) &&
 
480
            isa<GlobalValue>(CE->getOperand(0)),
 
481
            "Aliasee should be either GlobalValue or bitcast of GlobalValue",
 
482
            &GA);
 
483
  }
 
484
 
 
485
  const GlobalValue* Aliasee = GA.resolveAliasedGlobal(/*stopOnWeak*/ false);
 
486
  Assert1(Aliasee,
 
487
          "Aliasing chain should end with function or global variable", &GA);
 
488
 
 
489
  visitGlobalValue(GA);
 
490
}
 
491
 
 
492
void Verifier::verifyTypeSymbolTable(TypeSymbolTable &ST) {
 
493
  for (TypeSymbolTable::iterator I = ST.begin(), E = ST.end(); I != E; ++I)
 
494
    VerifyType(I->second);
 
495
}
 
496
 
 
497
// VerifyParameterAttrs - Check the given attributes for an argument or return
 
498
// value of the specified type.  The value V is printed in error messages.
 
499
void Verifier::VerifyParameterAttrs(Attributes Attrs, const Type *Ty,
 
500
                                    bool isReturnValue, const Value *V) {
 
501
  if (Attrs == Attribute::None)
 
502
    return;
 
503
 
 
504
  Attributes FnCheckAttr = Attrs & Attribute::FunctionOnly;
 
505
  Assert1(!FnCheckAttr, "Attribute " + Attribute::getAsString(FnCheckAttr) +
 
506
          " only applies to the function!", V);
 
507
 
 
508
  if (isReturnValue) {
 
509
    Attributes RetI = Attrs & Attribute::ParameterOnly;
 
510
    Assert1(!RetI, "Attribute " + Attribute::getAsString(RetI) +
 
511
            " does not apply to return values!", V);
 
512
  }
 
513
 
 
514
  for (unsigned i = 0;
 
515
       i < array_lengthof(Attribute::MutuallyIncompatible); ++i) {
 
516
    Attributes MutI = Attrs & Attribute::MutuallyIncompatible[i];
 
517
    Assert1(!(MutI & (MutI - 1)), "Attributes " +
 
518
            Attribute::getAsString(MutI) + " are incompatible!", V);
 
519
  }
 
520
 
 
521
  Attributes TypeI = Attrs & Attribute::typeIncompatible(Ty);
 
522
  Assert1(!TypeI, "Wrong type for attribute " +
 
523
          Attribute::getAsString(TypeI), V);
 
524
 
 
525
  Attributes ByValI = Attrs & Attribute::ByVal;
 
526
  if (const PointerType *PTy = dyn_cast<PointerType>(Ty)) {
 
527
    Assert1(!ByValI || PTy->getElementType()->isSized(),
 
528
            "Attribute " + Attribute::getAsString(ByValI) +
 
529
            " does not support unsized types!", V);
 
530
  } else {
 
531
    Assert1(!ByValI,
 
532
            "Attribute " + Attribute::getAsString(ByValI) +
 
533
            " only applies to parameters with pointer type!", V);
 
534
  }
 
535
}
 
536
 
 
537
// VerifyFunctionAttrs - Check parameter attributes against a function type.
 
538
// The value V is printed in error messages.
 
539
void Verifier::VerifyFunctionAttrs(const FunctionType *FT,
 
540
                                   const AttrListPtr &Attrs,
 
541
                                   const Value *V) {
 
542
  if (Attrs.isEmpty())
 
543
    return;
 
544
 
 
545
  bool SawNest = false;
 
546
 
 
547
  for (unsigned i = 0, e = Attrs.getNumSlots(); i != e; ++i) {
 
548
    const AttributeWithIndex &Attr = Attrs.getSlot(i);
 
549
 
 
550
    const Type *Ty;
 
551
    if (Attr.Index == 0)
 
552
      Ty = FT->getReturnType();
 
553
    else if (Attr.Index-1 < FT->getNumParams())
 
554
      Ty = FT->getParamType(Attr.Index-1);
 
555
    else
 
556
      break;  // VarArgs attributes, verified elsewhere.
 
557
 
 
558
    VerifyParameterAttrs(Attr.Attrs, Ty, Attr.Index == 0, V);
 
559
 
 
560
    if (Attr.Attrs & Attribute::Nest) {
 
561
      Assert1(!SawNest, "More than one parameter has attribute nest!", V);
 
562
      SawNest = true;
 
563
    }
 
564
 
 
565
    if (Attr.Attrs & Attribute::StructRet)
 
566
      Assert1(Attr.Index == 1, "Attribute sret not on first parameter!", V);
 
567
  }
 
568
 
 
569
  Attributes FAttrs = Attrs.getFnAttributes();
 
570
  Attributes NotFn = FAttrs & (~Attribute::FunctionOnly);
 
571
  Assert1(!NotFn, "Attribute " + Attribute::getAsString(NotFn) +
 
572
          " does not apply to the function!", V);
 
573
 
 
574
  for (unsigned i = 0;
 
575
       i < array_lengthof(Attribute::MutuallyIncompatible); ++i) {
 
576
    Attributes MutI = FAttrs & Attribute::MutuallyIncompatible[i];
 
577
    Assert1(!(MutI & (MutI - 1)), "Attributes " +
 
578
            Attribute::getAsString(MutI) + " are incompatible!", V);
 
579
  }
 
580
}
 
581
 
 
582
static bool VerifyAttributeCount(const AttrListPtr &Attrs, unsigned Params) {
 
583
  if (Attrs.isEmpty())
 
584
    return true;
 
585
 
 
586
  unsigned LastSlot = Attrs.getNumSlots() - 1;
 
587
  unsigned LastIndex = Attrs.getSlot(LastSlot).Index;
 
588
  if (LastIndex <= Params
 
589
      || (LastIndex == (unsigned)~0
 
590
          && (LastSlot == 0 || Attrs.getSlot(LastSlot - 1).Index <= Params)))  
 
591
    return true;
 
592
 
 
593
  return false;
 
594
}
 
595
 
 
596
// visitFunction - Verify that a function is ok.
 
597
//
 
598
void Verifier::visitFunction(Function &F) {
 
599
  // Check function arguments.
 
600
  const FunctionType *FT = F.getFunctionType();
 
601
  unsigned NumArgs = F.arg_size();
 
602
 
 
603
  Assert1(Context == &F.getContext(),
 
604
          "Function context does not match Module context!", &F);
 
605
 
 
606
  Assert1(!F.hasCommonLinkage(), "Functions may not have common linkage", &F);
 
607
  Assert2(FT->getNumParams() == NumArgs,
 
608
          "# formal arguments must match # of arguments for function type!",
 
609
          &F, FT);
 
610
  Assert1(F.getReturnType()->isFirstClassType() ||
 
611
          F.getReturnType()->isVoidTy() || 
 
612
          F.getReturnType()->isStructTy(),
 
613
          "Functions cannot return aggregate values!", &F);
 
614
 
 
615
  Assert1(!F.hasStructRetAttr() || F.getReturnType()->isVoidTy(),
 
616
          "Invalid struct return type!", &F);
 
617
 
 
618
  const AttrListPtr &Attrs = F.getAttributes();
 
619
 
 
620
  Assert1(VerifyAttributeCount(Attrs, FT->getNumParams()),
 
621
          "Attributes after last parameter!", &F);
 
622
 
 
623
  // Check function attributes.
 
624
  VerifyFunctionAttrs(FT, Attrs, &F);
 
625
 
 
626
  // Check that this function meets the restrictions on this calling convention.
 
627
  switch (F.getCallingConv()) {
 
628
  default:
 
629
    break;
 
630
  case CallingConv::C:
 
631
    break;
 
632
  case CallingConv::Fast:
 
633
  case CallingConv::Cold:
 
634
  case CallingConv::X86_FastCall:
 
635
    Assert1(!F.isVarArg(),
 
636
            "Varargs functions must have C calling conventions!", &F);
 
637
    break;
 
638
  }
 
639
 
 
640
  bool isLLVMdotName = F.getName().size() >= 5 &&
 
641
                       F.getName().substr(0, 5) == "llvm.";
 
642
 
 
643
  // Check that the argument values match the function type for this function...
 
644
  unsigned i = 0;
 
645
  for (Function::arg_iterator I = F.arg_begin(), E = F.arg_end();
 
646
       I != E; ++I, ++i) {
 
647
    Assert2(I->getType() == FT->getParamType(i),
 
648
            "Argument value does not match function argument type!",
 
649
            I, FT->getParamType(i));
 
650
    Assert1(I->getType()->isFirstClassType(),
 
651
            "Function arguments must have first-class types!", I);
 
652
    if (!isLLVMdotName)
 
653
      Assert2(!I->getType()->isMetadataTy(),
 
654
              "Function takes metadata but isn't an intrinsic", I, &F);
 
655
  }
 
656
 
 
657
  if (F.isMaterializable()) {
 
658
    // Function has a body somewhere we can't see.
 
659
  } else if (F.isDeclaration()) {
 
660
    Assert1(F.hasExternalLinkage() || F.hasDLLImportLinkage() ||
 
661
            F.hasExternalWeakLinkage(),
 
662
            "invalid linkage type for function declaration", &F);
 
663
  } else {
 
664
    // Verify that this function (which has a body) is not named "llvm.*".  It
 
665
    // is not legal to define intrinsics.
 
666
    Assert1(!isLLVMdotName, "llvm intrinsics cannot be defined!", &F);
 
667
    
 
668
    // Check the entry node
 
669
    BasicBlock *Entry = &F.getEntryBlock();
 
670
    Assert1(pred_begin(Entry) == pred_end(Entry),
 
671
            "Entry block to function must not have predecessors!", Entry);
 
672
    
 
673
    // The address of the entry block cannot be taken, unless it is dead.
 
674
    if (Entry->hasAddressTaken()) {
 
675
      Assert1(!BlockAddress::get(Entry)->isConstantUsed(),
 
676
              "blockaddress may not be used with the entry block!", Entry);
 
677
    }
 
678
  }
 
679
  
 
680
  // If this function is actually an intrinsic, verify that it is only used in
 
681
  // direct call/invokes, never having its "address taken".
 
682
  if (F.getIntrinsicID()) {
 
683
    for (Value::use_iterator UI = F.use_begin(), E = F.use_end(); UI != E;++UI){
 
684
      User *U = cast<User>(UI);
 
685
      if ((isa<CallInst>(U) || isa<InvokeInst>(U)) && UI.getOperandNo() == 0)
 
686
        continue;  // Direct calls/invokes are ok.
 
687
      
 
688
      Assert1(0, "Invalid user of intrinsic instruction!", U); 
 
689
    }
 
690
  }
 
691
}
 
692
 
 
693
// verifyBasicBlock - Verify that a basic block is well formed...
 
694
//
 
695
void Verifier::visitBasicBlock(BasicBlock &BB) {
 
696
  InstsInThisBlock.clear();
 
697
 
 
698
  // Ensure that basic blocks have terminators!
 
699
  Assert1(BB.getTerminator(), "Basic Block does not have terminator!", &BB);
 
700
 
 
701
  // Check constraints that this basic block imposes on all of the PHI nodes in
 
702
  // it.
 
703
  if (isa<PHINode>(BB.front())) {
 
704
    SmallVector<BasicBlock*, 8> Preds(pred_begin(&BB), pred_end(&BB));
 
705
    SmallVector<std::pair<BasicBlock*, Value*>, 8> Values;
 
706
    std::sort(Preds.begin(), Preds.end());
 
707
    PHINode *PN;
 
708
    for (BasicBlock::iterator I = BB.begin(); (PN = dyn_cast<PHINode>(I));++I) {
 
709
      // Ensure that PHI nodes have at least one entry!
 
710
      Assert1(PN->getNumIncomingValues() != 0,
 
711
              "PHI nodes must have at least one entry.  If the block is dead, "
 
712
              "the PHI should be removed!", PN);
 
713
      Assert1(PN->getNumIncomingValues() == Preds.size(),
 
714
              "PHINode should have one entry for each predecessor of its "
 
715
              "parent basic block!", PN);
 
716
 
 
717
      // Get and sort all incoming values in the PHI node...
 
718
      Values.clear();
 
719
      Values.reserve(PN->getNumIncomingValues());
 
720
      for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
 
721
        Values.push_back(std::make_pair(PN->getIncomingBlock(i),
 
722
                                        PN->getIncomingValue(i)));
 
723
      std::sort(Values.begin(), Values.end());
 
724
 
 
725
      for (unsigned i = 0, e = Values.size(); i != e; ++i) {
 
726
        // Check to make sure that if there is more than one entry for a
 
727
        // particular basic block in this PHI node, that the incoming values are
 
728
        // all identical.
 
729
        //
 
730
        Assert4(i == 0 || Values[i].first  != Values[i-1].first ||
 
731
                Values[i].second == Values[i-1].second,
 
732
                "PHI node has multiple entries for the same basic block with "
 
733
                "different incoming values!", PN, Values[i].first,
 
734
                Values[i].second, Values[i-1].second);
 
735
 
 
736
        // Check to make sure that the predecessors and PHI node entries are
 
737
        // matched up.
 
738
        Assert3(Values[i].first == Preds[i],
 
739
                "PHI node entries do not match predecessors!", PN,
 
740
                Values[i].first, Preds[i]);
 
741
      }
 
742
    }
 
743
  }
 
744
}
 
745
 
 
746
void Verifier::visitTerminatorInst(TerminatorInst &I) {
 
747
  // Ensure that terminators only exist at the end of the basic block.
 
748
  Assert1(&I == I.getParent()->getTerminator(),
 
749
          "Terminator found in the middle of a basic block!", I.getParent());
 
750
  visitInstruction(I);
 
751
}
 
752
 
 
753
void Verifier::visitBranchInst(BranchInst &BI) {
 
754
  if (BI.isConditional()) {
 
755
    Assert2(BI.getCondition()->getType()->isIntegerTy(1),
 
756
            "Branch condition is not 'i1' type!", &BI, BI.getCondition());
 
757
  }
 
758
  visitTerminatorInst(BI);
 
759
}
 
760
 
 
761
void Verifier::visitReturnInst(ReturnInst &RI) {
 
762
  Function *F = RI.getParent()->getParent();
 
763
  unsigned N = RI.getNumOperands();
 
764
  if (F->getReturnType()->isVoidTy()) 
 
765
    Assert2(N == 0,
 
766
            "Found return instr that returns non-void in Function of void "
 
767
            "return type!", &RI, F->getReturnType());
 
768
  else if (N == 1 && F->getReturnType() == RI.getOperand(0)->getType()) {
 
769
    // Exactly one return value and it matches the return type. Good.
 
770
  } else if (const StructType *STy = dyn_cast<StructType>(F->getReturnType())) {
 
771
    // The return type is a struct; check for multiple return values.
 
772
    Assert2(STy->getNumElements() == N,
 
773
            "Incorrect number of return values in ret instruction!",
 
774
            &RI, F->getReturnType());
 
775
    for (unsigned i = 0; i != N; ++i)
 
776
      Assert2(STy->getElementType(i) == RI.getOperand(i)->getType(),
 
777
              "Function return type does not match operand "
 
778
              "type of return inst!", &RI, F->getReturnType());
 
779
  } else if (const ArrayType *ATy = dyn_cast<ArrayType>(F->getReturnType())) {
 
780
    // The return type is an array; check for multiple return values.
 
781
    Assert2(ATy->getNumElements() == N,
 
782
            "Incorrect number of return values in ret instruction!",
 
783
            &RI, F->getReturnType());
 
784
    for (unsigned i = 0; i != N; ++i)
 
785
      Assert2(ATy->getElementType() == RI.getOperand(i)->getType(),
 
786
              "Function return type does not match operand "
 
787
              "type of return inst!", &RI, F->getReturnType());
 
788
  } else {
 
789
    CheckFailed("Function return type does not match operand "
 
790
                "type of return inst!", &RI, F->getReturnType());
 
791
  }
 
792
 
 
793
  // Check to make sure that the return value has necessary properties for
 
794
  // terminators...
 
795
  visitTerminatorInst(RI);
 
796
}
 
797
 
 
798
void Verifier::visitSwitchInst(SwitchInst &SI) {
 
799
  // Check to make sure that all of the constants in the switch instruction
 
800
  // have the same type as the switched-on value.
 
801
  const Type *SwitchTy = SI.getCondition()->getType();
 
802
  SmallPtrSet<ConstantInt*, 32> Constants;
 
803
  for (unsigned i = 1, e = SI.getNumCases(); i != e; ++i) {
 
804
    Assert1(SI.getCaseValue(i)->getType() == SwitchTy,
 
805
            "Switch constants must all be same type as switch value!", &SI);
 
806
    Assert2(Constants.insert(SI.getCaseValue(i)),
 
807
            "Duplicate integer as switch case", &SI, SI.getCaseValue(i));
 
808
  }
 
809
 
 
810
  visitTerminatorInst(SI);
 
811
}
 
812
 
 
813
void Verifier::visitSelectInst(SelectInst &SI) {
 
814
  Assert1(!SelectInst::areInvalidOperands(SI.getOperand(0), SI.getOperand(1),
 
815
                                          SI.getOperand(2)),
 
816
          "Invalid operands for select instruction!", &SI);
 
817
 
 
818
  Assert1(SI.getTrueValue()->getType() == SI.getType(),
 
819
          "Select values must have same type as select instruction!", &SI);
 
820
  visitInstruction(SI);
 
821
}
 
822
 
 
823
/// visitUserOp1 - User defined operators shouldn't live beyond the lifetime of
 
824
/// a pass, if any exist, it's an error.
 
825
///
 
826
void Verifier::visitUserOp1(Instruction &I) {
 
827
  Assert1(0, "User-defined operators should not live outside of a pass!", &I);
 
828
}
 
829
 
 
830
void Verifier::visitTruncInst(TruncInst &I) {
 
831
  // Get the source and destination types
 
832
  const Type *SrcTy = I.getOperand(0)->getType();
 
833
  const Type *DestTy = I.getType();
 
834
 
 
835
  // Get the size of the types in bits, we'll need this later
 
836
  unsigned SrcBitSize = SrcTy->getScalarSizeInBits();
 
837
  unsigned DestBitSize = DestTy->getScalarSizeInBits();
 
838
 
 
839
  Assert1(SrcTy->isIntOrIntVectorTy(), "Trunc only operates on integer", &I);
 
840
  Assert1(DestTy->isIntOrIntVectorTy(), "Trunc only produces integer", &I);
 
841
  Assert1(SrcTy->isVectorTy() == DestTy->isVectorTy(),
 
842
          "trunc source and destination must both be a vector or neither", &I);
 
843
  Assert1(SrcBitSize > DestBitSize,"DestTy too big for Trunc", &I);
 
844
 
 
845
  visitInstruction(I);
 
846
}
 
847
 
 
848
void Verifier::visitZExtInst(ZExtInst &I) {
 
849
  // Get the source and destination types
 
850
  const Type *SrcTy = I.getOperand(0)->getType();
 
851
  const Type *DestTy = I.getType();
 
852
 
 
853
  // Get the size of the types in bits, we'll need this later
 
854
  Assert1(SrcTy->isIntOrIntVectorTy(), "ZExt only operates on integer", &I);
 
855
  Assert1(DestTy->isIntOrIntVectorTy(), "ZExt only produces an integer", &I);
 
856
  Assert1(SrcTy->isVectorTy() == DestTy->isVectorTy(),
 
857
          "zext source and destination must both be a vector or neither", &I);
 
858
  unsigned SrcBitSize = SrcTy->getScalarSizeInBits();
 
859
  unsigned DestBitSize = DestTy->getScalarSizeInBits();
 
860
 
 
861
  Assert1(SrcBitSize < DestBitSize,"Type too small for ZExt", &I);
 
862
 
 
863
  visitInstruction(I);
 
864
}
 
865
 
 
866
void Verifier::visitSExtInst(SExtInst &I) {
 
867
  // Get the source and destination types
 
868
  const Type *SrcTy = I.getOperand(0)->getType();
 
869
  const Type *DestTy = I.getType();
 
870
 
 
871
  // Get the size of the types in bits, we'll need this later
 
872
  unsigned SrcBitSize = SrcTy->getScalarSizeInBits();
 
873
  unsigned DestBitSize = DestTy->getScalarSizeInBits();
 
874
 
 
875
  Assert1(SrcTy->isIntOrIntVectorTy(), "SExt only operates on integer", &I);
 
876
  Assert1(DestTy->isIntOrIntVectorTy(), "SExt only produces an integer", &I);
 
877
  Assert1(SrcTy->isVectorTy() == DestTy->isVectorTy(),
 
878
          "sext source and destination must both be a vector or neither", &I);
 
879
  Assert1(SrcBitSize < DestBitSize,"Type too small for SExt", &I);
 
880
 
 
881
  visitInstruction(I);
 
882
}
 
883
 
 
884
void Verifier::visitFPTruncInst(FPTruncInst &I) {
 
885
  // Get the source and destination types
 
886
  const Type *SrcTy = I.getOperand(0)->getType();
 
887
  const Type *DestTy = I.getType();
 
888
  // Get the size of the types in bits, we'll need this later
 
889
  unsigned SrcBitSize = SrcTy->getScalarSizeInBits();
 
890
  unsigned DestBitSize = DestTy->getScalarSizeInBits();
 
891
 
 
892
  Assert1(SrcTy->isFPOrFPVectorTy(),"FPTrunc only operates on FP", &I);
 
893
  Assert1(DestTy->isFPOrFPVectorTy(),"FPTrunc only produces an FP", &I);
 
894
  Assert1(SrcTy->isVectorTy() == DestTy->isVectorTy(),
 
895
          "fptrunc source and destination must both be a vector or neither",&I);
 
896
  Assert1(SrcBitSize > DestBitSize,"DestTy too big for FPTrunc", &I);
 
897
 
 
898
  visitInstruction(I);
 
899
}
 
900
 
 
901
void Verifier::visitFPExtInst(FPExtInst &I) {
 
902
  // Get the source and destination types
 
903
  const Type *SrcTy = I.getOperand(0)->getType();
 
904
  const Type *DestTy = I.getType();
 
905
 
 
906
  // Get the size of the types in bits, we'll need this later
 
907
  unsigned SrcBitSize = SrcTy->getScalarSizeInBits();
 
908
  unsigned DestBitSize = DestTy->getScalarSizeInBits();
 
909
 
 
910
  Assert1(SrcTy->isFPOrFPVectorTy(),"FPExt only operates on FP", &I);
 
911
  Assert1(DestTy->isFPOrFPVectorTy(),"FPExt only produces an FP", &I);
 
912
  Assert1(SrcTy->isVectorTy() == DestTy->isVectorTy(),
 
913
          "fpext source and destination must both be a vector or neither", &I);
 
914
  Assert1(SrcBitSize < DestBitSize,"DestTy too small for FPExt", &I);
 
915
 
 
916
  visitInstruction(I);
 
917
}
 
918
 
 
919
void Verifier::visitUIToFPInst(UIToFPInst &I) {
 
920
  // Get the source and destination types
 
921
  const Type *SrcTy = I.getOperand(0)->getType();
 
922
  const Type *DestTy = I.getType();
 
923
 
 
924
  bool SrcVec = SrcTy->isVectorTy();
 
925
  bool DstVec = DestTy->isVectorTy();
 
926
 
 
927
  Assert1(SrcVec == DstVec,
 
928
          "UIToFP source and dest must both be vector or scalar", &I);
 
929
  Assert1(SrcTy->isIntOrIntVectorTy(),
 
930
          "UIToFP source must be integer or integer vector", &I);
 
931
  Assert1(DestTy->isFPOrFPVectorTy(),
 
932
          "UIToFP result must be FP or FP vector", &I);
 
933
 
 
934
  if (SrcVec && DstVec)
 
935
    Assert1(cast<VectorType>(SrcTy)->getNumElements() ==
 
936
            cast<VectorType>(DestTy)->getNumElements(),
 
937
            "UIToFP source and dest vector length mismatch", &I);
 
938
 
 
939
  visitInstruction(I);
 
940
}
 
941
 
 
942
void Verifier::visitSIToFPInst(SIToFPInst &I) {
 
943
  // Get the source and destination types
 
944
  const Type *SrcTy = I.getOperand(0)->getType();
 
945
  const Type *DestTy = I.getType();
 
946
 
 
947
  bool SrcVec = SrcTy->isVectorTy();
 
948
  bool DstVec = DestTy->isVectorTy();
 
949
 
 
950
  Assert1(SrcVec == DstVec,
 
951
          "SIToFP source and dest must both be vector or scalar", &I);
 
952
  Assert1(SrcTy->isIntOrIntVectorTy(),
 
953
          "SIToFP source must be integer or integer vector", &I);
 
954
  Assert1(DestTy->isFPOrFPVectorTy(),
 
955
          "SIToFP result must be FP or FP vector", &I);
 
956
 
 
957
  if (SrcVec && DstVec)
 
958
    Assert1(cast<VectorType>(SrcTy)->getNumElements() ==
 
959
            cast<VectorType>(DestTy)->getNumElements(),
 
960
            "SIToFP source and dest vector length mismatch", &I);
 
961
 
 
962
  visitInstruction(I);
 
963
}
 
964
 
 
965
void Verifier::visitFPToUIInst(FPToUIInst &I) {
 
966
  // Get the source and destination types
 
967
  const Type *SrcTy = I.getOperand(0)->getType();
 
968
  const Type *DestTy = I.getType();
 
969
 
 
970
  bool SrcVec = SrcTy->isVectorTy();
 
971
  bool DstVec = DestTy->isVectorTy();
 
972
 
 
973
  Assert1(SrcVec == DstVec,
 
974
          "FPToUI source and dest must both be vector or scalar", &I);
 
975
  Assert1(SrcTy->isFPOrFPVectorTy(), "FPToUI source must be FP or FP vector",
 
976
          &I);
 
977
  Assert1(DestTy->isIntOrIntVectorTy(),
 
978
          "FPToUI result must be integer or integer vector", &I);
 
979
 
 
980
  if (SrcVec && DstVec)
 
981
    Assert1(cast<VectorType>(SrcTy)->getNumElements() ==
 
982
            cast<VectorType>(DestTy)->getNumElements(),
 
983
            "FPToUI source and dest vector length mismatch", &I);
 
984
 
 
985
  visitInstruction(I);
 
986
}
 
987
 
 
988
void Verifier::visitFPToSIInst(FPToSIInst &I) {
 
989
  // Get the source and destination types
 
990
  const Type *SrcTy = I.getOperand(0)->getType();
 
991
  const Type *DestTy = I.getType();
 
992
 
 
993
  bool SrcVec = SrcTy->isVectorTy();
 
994
  bool DstVec = DestTy->isVectorTy();
 
995
 
 
996
  Assert1(SrcVec == DstVec,
 
997
          "FPToSI source and dest must both be vector or scalar", &I);
 
998
  Assert1(SrcTy->isFPOrFPVectorTy(),
 
999
          "FPToSI source must be FP or FP vector", &I);
 
1000
  Assert1(DestTy->isIntOrIntVectorTy(),
 
1001
          "FPToSI result must be integer or integer vector", &I);
 
1002
 
 
1003
  if (SrcVec && DstVec)
 
1004
    Assert1(cast<VectorType>(SrcTy)->getNumElements() ==
 
1005
            cast<VectorType>(DestTy)->getNumElements(),
 
1006
            "FPToSI source and dest vector length mismatch", &I);
 
1007
 
 
1008
  visitInstruction(I);
 
1009
}
 
1010
 
 
1011
void Verifier::visitPtrToIntInst(PtrToIntInst &I) {
 
1012
  // Get the source and destination types
 
1013
  const Type *SrcTy = I.getOperand(0)->getType();
 
1014
  const Type *DestTy = I.getType();
 
1015
 
 
1016
  Assert1(SrcTy->isPointerTy(), "PtrToInt source must be pointer", &I);
 
1017
  Assert1(DestTy->isIntegerTy(), "PtrToInt result must be integral", &I);
 
1018
 
 
1019
  visitInstruction(I);
 
1020
}
 
1021
 
 
1022
void Verifier::visitIntToPtrInst(IntToPtrInst &I) {
 
1023
  // Get the source and destination types
 
1024
  const Type *SrcTy = I.getOperand(0)->getType();
 
1025
  const Type *DestTy = I.getType();
 
1026
 
 
1027
  Assert1(SrcTy->isIntegerTy(), "IntToPtr source must be an integral", &I);
 
1028
  Assert1(DestTy->isPointerTy(), "IntToPtr result must be a pointer",&I);
 
1029
 
 
1030
  visitInstruction(I);
 
1031
}
 
1032
 
 
1033
void Verifier::visitBitCastInst(BitCastInst &I) {
 
1034
  // Get the source and destination types
 
1035
  const Type *SrcTy = I.getOperand(0)->getType();
 
1036
  const Type *DestTy = I.getType();
 
1037
 
 
1038
  // Get the size of the types in bits, we'll need this later
 
1039
  unsigned SrcBitSize = SrcTy->getPrimitiveSizeInBits();
 
1040
  unsigned DestBitSize = DestTy->getPrimitiveSizeInBits();
 
1041
 
 
1042
  // BitCast implies a no-op cast of type only. No bits change.
 
1043
  // However, you can't cast pointers to anything but pointers.
 
1044
  Assert1(DestTy->isPointerTy() == DestTy->isPointerTy(),
 
1045
          "Bitcast requires both operands to be pointer or neither", &I);
 
1046
  Assert1(SrcBitSize == DestBitSize, "Bitcast requires types of same width",&I);
 
1047
 
 
1048
  // Disallow aggregates.
 
1049
  Assert1(!SrcTy->isAggregateType(),
 
1050
          "Bitcast operand must not be aggregate", &I);
 
1051
  Assert1(!DestTy->isAggregateType(),
 
1052
          "Bitcast type must not be aggregate", &I);
 
1053
 
 
1054
  visitInstruction(I);
 
1055
}
 
1056
 
 
1057
/// visitPHINode - Ensure that a PHI node is well formed.
 
1058
///
 
1059
void Verifier::visitPHINode(PHINode &PN) {
 
1060
  // Ensure that the PHI nodes are all grouped together at the top of the block.
 
1061
  // This can be tested by checking whether the instruction before this is
 
1062
  // either nonexistent (because this is begin()) or is a PHI node.  If not,
 
1063
  // then there is some other instruction before a PHI.
 
1064
  Assert2(&PN == &PN.getParent()->front() || 
 
1065
          isa<PHINode>(--BasicBlock::iterator(&PN)),
 
1066
          "PHI nodes not grouped at top of basic block!",
 
1067
          &PN, PN.getParent());
 
1068
 
 
1069
  // Check that all of the values of the PHI node have the same type as the
 
1070
  // result, and that the incoming blocks are really basic blocks.
 
1071
  for (unsigned i = 0, e = PN.getNumIncomingValues(); i != e; ++i) {
 
1072
    Assert1(PN.getType() == PN.getIncomingValue(i)->getType(),
 
1073
            "PHI node operands are not the same type as the result!", &PN);
 
1074
    Assert1(isa<BasicBlock>(PN.getOperand(
 
1075
                PHINode::getOperandNumForIncomingBlock(i))),
 
1076
            "PHI node incoming block is not a BasicBlock!", &PN);
 
1077
  }
 
1078
 
 
1079
  // All other PHI node constraints are checked in the visitBasicBlock method.
 
1080
 
 
1081
  visitInstruction(PN);
 
1082
}
 
1083
 
 
1084
void Verifier::VerifyCallSite(CallSite CS) {
 
1085
  Instruction *I = CS.getInstruction();
 
1086
 
 
1087
  Assert1(CS.getCalledValue()->getType()->isPointerTy(),
 
1088
          "Called function must be a pointer!", I);
 
1089
  const PointerType *FPTy = cast<PointerType>(CS.getCalledValue()->getType());
 
1090
 
 
1091
  Assert1(FPTy->getElementType()->isFunctionTy(),
 
1092
          "Called function is not pointer to function type!", I);
 
1093
  const FunctionType *FTy = cast<FunctionType>(FPTy->getElementType());
 
1094
 
 
1095
  // Verify that the correct number of arguments are being passed
 
1096
  if (FTy->isVarArg())
 
1097
    Assert1(CS.arg_size() >= FTy->getNumParams(),
 
1098
            "Called function requires more parameters than were provided!",I);
 
1099
  else
 
1100
    Assert1(CS.arg_size() == FTy->getNumParams(),
 
1101
            "Incorrect number of arguments passed to called function!", I);
 
1102
 
 
1103
  // Verify that all arguments to the call match the function type...
 
1104
  for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i)
 
1105
    Assert3(CS.getArgument(i)->getType() == FTy->getParamType(i),
 
1106
            "Call parameter type does not match function signature!",
 
1107
            CS.getArgument(i), FTy->getParamType(i), I);
 
1108
 
 
1109
  const AttrListPtr &Attrs = CS.getAttributes();
 
1110
 
 
1111
  Assert1(VerifyAttributeCount(Attrs, CS.arg_size()),
 
1112
          "Attributes after last parameter!", I);
 
1113
 
 
1114
  // Verify call attributes.
 
1115
  VerifyFunctionAttrs(FTy, Attrs, I);
 
1116
 
 
1117
  if (FTy->isVarArg())
 
1118
    // Check attributes on the varargs part.
 
1119
    for (unsigned Idx = 1 + FTy->getNumParams(); Idx <= CS.arg_size(); ++Idx) {
 
1120
      Attributes Attr = Attrs.getParamAttributes(Idx);
 
1121
 
 
1122
      VerifyParameterAttrs(Attr, CS.getArgument(Idx-1)->getType(), false, I);
 
1123
 
 
1124
      Attributes VArgI = Attr & Attribute::VarArgsIncompatible;
 
1125
      Assert1(!VArgI, "Attribute " + Attribute::getAsString(VArgI) +
 
1126
              " cannot be used for vararg call arguments!", I);
 
1127
    }
 
1128
 
 
1129
  // Verify that there's no metadata unless it's a direct call to an intrinsic.
 
1130
  if (!CS.getCalledFunction() || CS.getCalledFunction()->getName().size() < 5 ||
 
1131
      CS.getCalledFunction()->getName().substr(0, 5) != "llvm.") {
 
1132
    for (FunctionType::param_iterator PI = FTy->param_begin(),
 
1133
           PE = FTy->param_end(); PI != PE; ++PI)
 
1134
      Assert1(!PI->get()->isMetadataTy(),
 
1135
              "Function has metadata parameter but isn't an intrinsic", I);
 
1136
  }
 
1137
 
 
1138
  visitInstruction(*I);
 
1139
}
 
1140
 
 
1141
void Verifier::visitCallInst(CallInst &CI) {
 
1142
  VerifyCallSite(&CI);
 
1143
 
 
1144
  if (Function *F = CI.getCalledFunction())
 
1145
    if (Intrinsic::ID ID = (Intrinsic::ID)F->getIntrinsicID())
 
1146
      visitIntrinsicFunctionCall(ID, CI);
 
1147
}
 
1148
 
 
1149
void Verifier::visitInvokeInst(InvokeInst &II) {
 
1150
  VerifyCallSite(&II);
 
1151
}
 
1152
 
 
1153
/// visitBinaryOperator - Check that both arguments to the binary operator are
 
1154
/// of the same type!
 
1155
///
 
1156
void Verifier::visitBinaryOperator(BinaryOperator &B) {
 
1157
  Assert1(B.getOperand(0)->getType() == B.getOperand(1)->getType(),
 
1158
          "Both operands to a binary operator are not of the same type!", &B);
 
1159
 
 
1160
  switch (B.getOpcode()) {
 
1161
  // Check that integer arithmetic operators are only used with
 
1162
  // integral operands.
 
1163
  case Instruction::Add:
 
1164
  case Instruction::Sub:
 
1165
  case Instruction::Mul:
 
1166
  case Instruction::SDiv:
 
1167
  case Instruction::UDiv:
 
1168
  case Instruction::SRem:
 
1169
  case Instruction::URem:
 
1170
    Assert1(B.getType()->isIntOrIntVectorTy(),
 
1171
            "Integer arithmetic operators only work with integral types!", &B);
 
1172
    Assert1(B.getType() == B.getOperand(0)->getType(),
 
1173
            "Integer arithmetic operators must have same type "
 
1174
            "for operands and result!", &B);
 
1175
    break;
 
1176
  // Check that floating-point arithmetic operators are only used with
 
1177
  // floating-point operands.
 
1178
  case Instruction::FAdd:
 
1179
  case Instruction::FSub:
 
1180
  case Instruction::FMul:
 
1181
  case Instruction::FDiv:
 
1182
  case Instruction::FRem:
 
1183
    Assert1(B.getType()->isFPOrFPVectorTy(),
 
1184
            "Floating-point arithmetic operators only work with "
 
1185
            "floating-point types!", &B);
 
1186
    Assert1(B.getType() == B.getOperand(0)->getType(),
 
1187
            "Floating-point arithmetic operators must have same type "
 
1188
            "for operands and result!", &B);
 
1189
    break;
 
1190
  // Check that logical operators are only used with integral operands.
 
1191
  case Instruction::And:
 
1192
  case Instruction::Or:
 
1193
  case Instruction::Xor:
 
1194
    Assert1(B.getType()->isIntOrIntVectorTy(),
 
1195
            "Logical operators only work with integral types!", &B);
 
1196
    Assert1(B.getType() == B.getOperand(0)->getType(),
 
1197
            "Logical operators must have same type for operands and result!",
 
1198
            &B);
 
1199
    break;
 
1200
  case Instruction::Shl:
 
1201
  case Instruction::LShr:
 
1202
  case Instruction::AShr:
 
1203
    Assert1(B.getType()->isIntOrIntVectorTy(),
 
1204
            "Shifts only work with integral types!", &B);
 
1205
    Assert1(B.getType() == B.getOperand(0)->getType(),
 
1206
            "Shift return type must be same as operands!", &B);
 
1207
    break;
 
1208
  default:
 
1209
    llvm_unreachable("Unknown BinaryOperator opcode!");
 
1210
  }
 
1211
 
 
1212
  visitInstruction(B);
 
1213
}
 
1214
 
 
1215
void Verifier::visitICmpInst(ICmpInst& IC) {
 
1216
  // Check that the operands are the same type
 
1217
  const Type* Op0Ty = IC.getOperand(0)->getType();
 
1218
  const Type* Op1Ty = IC.getOperand(1)->getType();
 
1219
  Assert1(Op0Ty == Op1Ty,
 
1220
          "Both operands to ICmp instruction are not of the same type!", &IC);
 
1221
  // Check that the operands are the right type
 
1222
  Assert1(Op0Ty->isIntOrIntVectorTy() || Op0Ty->isPointerTy(),
 
1223
          "Invalid operand types for ICmp instruction", &IC);
 
1224
 
 
1225
  visitInstruction(IC);
 
1226
}
 
1227
 
 
1228
void Verifier::visitFCmpInst(FCmpInst& FC) {
 
1229
  // Check that the operands are the same type
 
1230
  const Type* Op0Ty = FC.getOperand(0)->getType();
 
1231
  const Type* Op1Ty = FC.getOperand(1)->getType();
 
1232
  Assert1(Op0Ty == Op1Ty,
 
1233
          "Both operands to FCmp instruction are not of the same type!", &FC);
 
1234
  // Check that the operands are the right type
 
1235
  Assert1(Op0Ty->isFPOrFPVectorTy(),
 
1236
          "Invalid operand types for FCmp instruction", &FC);
 
1237
  visitInstruction(FC);
 
1238
}
 
1239
 
 
1240
void Verifier::visitExtractElementInst(ExtractElementInst &EI) {
 
1241
  Assert1(ExtractElementInst::isValidOperands(EI.getOperand(0),
 
1242
                                              EI.getOperand(1)),
 
1243
          "Invalid extractelement operands!", &EI);
 
1244
  visitInstruction(EI);
 
1245
}
 
1246
 
 
1247
void Verifier::visitInsertElementInst(InsertElementInst &IE) {
 
1248
  Assert1(InsertElementInst::isValidOperands(IE.getOperand(0),
 
1249
                                             IE.getOperand(1),
 
1250
                                             IE.getOperand(2)),
 
1251
          "Invalid insertelement operands!", &IE);
 
1252
  visitInstruction(IE);
 
1253
}
 
1254
 
 
1255
void Verifier::visitShuffleVectorInst(ShuffleVectorInst &SV) {
 
1256
  Assert1(ShuffleVectorInst::isValidOperands(SV.getOperand(0), SV.getOperand(1),
 
1257
                                             SV.getOperand(2)),
 
1258
          "Invalid shufflevector operands!", &SV);
 
1259
 
 
1260
  const VectorType *VTy = dyn_cast<VectorType>(SV.getOperand(0)->getType());
 
1261
  Assert1(VTy, "Operands are not a vector type", &SV);
 
1262
 
 
1263
  // Check to see if Mask is valid.
 
1264
  if (const ConstantVector *MV = dyn_cast<ConstantVector>(SV.getOperand(2))) {
 
1265
    for (unsigned i = 0, e = MV->getNumOperands(); i != e; ++i) {
 
1266
      if (ConstantInt* CI = dyn_cast<ConstantInt>(MV->getOperand(i))) {
 
1267
        Assert1(!CI->uge(VTy->getNumElements()*2),
 
1268
                "Invalid shufflevector shuffle mask!", &SV);
 
1269
      } else {
 
1270
        Assert1(isa<UndefValue>(MV->getOperand(i)),
 
1271
                "Invalid shufflevector shuffle mask!", &SV);
 
1272
      }
 
1273
    }
 
1274
  } else {
 
1275
    Assert1(isa<UndefValue>(SV.getOperand(2)) || 
 
1276
            isa<ConstantAggregateZero>(SV.getOperand(2)),
 
1277
            "Invalid shufflevector shuffle mask!", &SV);
 
1278
  }
 
1279
 
 
1280
  visitInstruction(SV);
 
1281
}
 
1282
 
 
1283
void Verifier::visitGetElementPtrInst(GetElementPtrInst &GEP) {
 
1284
  SmallVector<Value*, 16> Idxs(GEP.idx_begin(), GEP.idx_end());
 
1285
  const Type *ElTy =
 
1286
    GetElementPtrInst::getIndexedType(GEP.getOperand(0)->getType(),
 
1287
                                      Idxs.begin(), Idxs.end());
 
1288
  Assert1(ElTy, "Invalid indices for GEP pointer type!", &GEP);
 
1289
  Assert2(GEP.getType()->isPointerTy() &&
 
1290
          cast<PointerType>(GEP.getType())->getElementType() == ElTy,
 
1291
          "GEP is not of right type for indices!", &GEP, ElTy);
 
1292
  visitInstruction(GEP);
 
1293
}
 
1294
 
 
1295
void Verifier::visitLoadInst(LoadInst &LI) {
 
1296
  const PointerType *PTy = dyn_cast<PointerType>(LI.getOperand(0)->getType());
 
1297
  Assert1(PTy, "Load operand must be a pointer.", &LI);
 
1298
  const Type *ElTy = PTy->getElementType();
 
1299
  Assert2(ElTy == LI.getType(),
 
1300
          "Load result type does not match pointer operand type!", &LI, ElTy);
 
1301
  visitInstruction(LI);
 
1302
}
 
1303
 
 
1304
void Verifier::visitStoreInst(StoreInst &SI) {
 
1305
  const PointerType *PTy = dyn_cast<PointerType>(SI.getOperand(1)->getType());
 
1306
  Assert1(PTy, "Load operand must be a pointer.", &SI);
 
1307
  const Type *ElTy = PTy->getElementType();
 
1308
  Assert2(ElTy == SI.getOperand(0)->getType(),
 
1309
          "Stored value type does not match pointer operand type!",
 
1310
          &SI, ElTy);
 
1311
  visitInstruction(SI);
 
1312
}
 
1313
 
 
1314
void Verifier::visitAllocaInst(AllocaInst &AI) {
 
1315
  const PointerType *PTy = AI.getType();
 
1316
  Assert1(PTy->getAddressSpace() == 0, 
 
1317
          "Allocation instruction pointer not in the generic address space!",
 
1318
          &AI);
 
1319
  Assert1(PTy->getElementType()->isSized(), "Cannot allocate unsized type",
 
1320
          &AI);
 
1321
  Assert1(AI.getArraySize()->getType()->isIntegerTy(32),
 
1322
          "Alloca array size must be i32", &AI);
 
1323
  visitInstruction(AI);
 
1324
}
 
1325
 
 
1326
void Verifier::visitExtractValueInst(ExtractValueInst &EVI) {
 
1327
  Assert1(ExtractValueInst::getIndexedType(EVI.getAggregateOperand()->getType(),
 
1328
                                           EVI.idx_begin(), EVI.idx_end()) ==
 
1329
          EVI.getType(),
 
1330
          "Invalid ExtractValueInst operands!", &EVI);
 
1331
  
 
1332
  visitInstruction(EVI);
 
1333
}
 
1334
 
 
1335
void Verifier::visitInsertValueInst(InsertValueInst &IVI) {
 
1336
  Assert1(ExtractValueInst::getIndexedType(IVI.getAggregateOperand()->getType(),
 
1337
                                           IVI.idx_begin(), IVI.idx_end()) ==
 
1338
          IVI.getOperand(1)->getType(),
 
1339
          "Invalid InsertValueInst operands!", &IVI);
 
1340
  
 
1341
  visitInstruction(IVI);
 
1342
}
 
1343
 
 
1344
/// verifyInstruction - Verify that an instruction is well formed.
 
1345
///
 
1346
void Verifier::visitInstruction(Instruction &I) {
 
1347
  BasicBlock *BB = I.getParent();
 
1348
  Assert1(BB, "Instruction not embedded in basic block!", &I);
 
1349
 
 
1350
  if (!isa<PHINode>(I)) {   // Check that non-phi nodes are not self referential
 
1351
    for (Value::use_iterator UI = I.use_begin(), UE = I.use_end();
 
1352
         UI != UE; ++UI)
 
1353
      Assert1(*UI != (User*)&I || !DT->isReachableFromEntry(BB),
 
1354
              "Only PHI nodes may reference their own value!", &I);
 
1355
  }
 
1356
 
 
1357
  // Verify that if this is a terminator that it is at the end of the block.
 
1358
  if (isa<TerminatorInst>(I))
 
1359
    Assert1(BB->getTerminator() == &I, "Terminator not at end of block!", &I);
 
1360
 
 
1361
  // Check that void typed values don't have names
 
1362
  Assert1(!I.getType()->isVoidTy() || !I.hasName(),
 
1363
          "Instruction has a name, but provides a void value!", &I);
 
1364
 
 
1365
  // Check that the return value of the instruction is either void or a legal
 
1366
  // value type.
 
1367
  Assert1(I.getType()->isVoidTy() || 
 
1368
          I.getType()->isFirstClassType(),
 
1369
          "Instruction returns a non-scalar type!", &I);
 
1370
 
 
1371
  // Check that the instruction doesn't produce metadata. Calls are already
 
1372
  // checked against the callee type.
 
1373
  Assert1(!I.getType()->isMetadataTy() ||
 
1374
          isa<CallInst>(I) || isa<InvokeInst>(I),
 
1375
          "Invalid use of metadata!", &I);
 
1376
 
 
1377
  // Check that all uses of the instruction, if they are instructions
 
1378
  // themselves, actually have parent basic blocks.  If the use is not an
 
1379
  // instruction, it is an error!
 
1380
  for (User::use_iterator UI = I.use_begin(), UE = I.use_end();
 
1381
       UI != UE; ++UI) {
 
1382
    if (Instruction *Used = dyn_cast<Instruction>(*UI))
 
1383
      Assert2(Used->getParent() != 0, "Instruction referencing instruction not"
 
1384
              " embedded in a basic block!", &I, Used);
 
1385
    else {
 
1386
      CheckFailed("Use of instruction is not an instruction!", *UI);
 
1387
      return;
 
1388
    }
 
1389
  }
 
1390
 
 
1391
  for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i) {
 
1392
    Assert1(I.getOperand(i) != 0, "Instruction has null operand!", &I);
 
1393
 
 
1394
    // Check to make sure that only first-class-values are operands to
 
1395
    // instructions.
 
1396
    if (!I.getOperand(i)->getType()->isFirstClassType()) {
 
1397
      Assert1(0, "Instruction operands must be first-class values!", &I);
 
1398
    }
 
1399
 
 
1400
    if (Function *F = dyn_cast<Function>(I.getOperand(i))) {
 
1401
      // Check to make sure that the "address of" an intrinsic function is never
 
1402
      // taken.
 
1403
      Assert1(!F->isIntrinsic() || (i == 0 && isa<CallInst>(I)),
 
1404
              "Cannot take the address of an intrinsic!", &I);
 
1405
      Assert1(F->getParent() == Mod, "Referencing function in another module!",
 
1406
              &I);
 
1407
    } else if (BasicBlock *OpBB = dyn_cast<BasicBlock>(I.getOperand(i))) {
 
1408
      Assert1(OpBB->getParent() == BB->getParent(),
 
1409
              "Referring to a basic block in another function!", &I);
 
1410
    } else if (Argument *OpArg = dyn_cast<Argument>(I.getOperand(i))) {
 
1411
      Assert1(OpArg->getParent() == BB->getParent(),
 
1412
              "Referring to an argument in another function!", &I);
 
1413
    } else if (GlobalValue *GV = dyn_cast<GlobalValue>(I.getOperand(i))) {
 
1414
      Assert1(GV->getParent() == Mod, "Referencing global in another module!",
 
1415
              &I);
 
1416
    } else if (Instruction *Op = dyn_cast<Instruction>(I.getOperand(i))) {
 
1417
      BasicBlock *OpBlock = Op->getParent();
 
1418
 
 
1419
      // Check that a definition dominates all of its uses.
 
1420
      if (InvokeInst *II = dyn_cast<InvokeInst>(Op)) {
 
1421
        // Invoke results are only usable in the normal destination, not in the
 
1422
        // exceptional destination.
 
1423
        BasicBlock *NormalDest = II->getNormalDest();
 
1424
 
 
1425
        Assert2(NormalDest != II->getUnwindDest(),
 
1426
                "No uses of invoke possible due to dominance structure!",
 
1427
                Op, &I);
 
1428
 
 
1429
        // PHI nodes differ from other nodes because they actually "use" the
 
1430
        // value in the predecessor basic blocks they correspond to.
 
1431
        BasicBlock *UseBlock = BB;
 
1432
        if (isa<PHINode>(I))
 
1433
          UseBlock = dyn_cast<BasicBlock>(I.getOperand(i+1));
 
1434
        Assert2(UseBlock, "Invoke operand is PHI node with bad incoming-BB",
 
1435
                Op, &I);
 
1436
 
 
1437
        if (isa<PHINode>(I) && UseBlock == OpBlock) {
 
1438
          // Special case of a phi node in the normal destination or the unwind
 
1439
          // destination.
 
1440
          Assert2(BB == NormalDest || !DT->isReachableFromEntry(UseBlock),
 
1441
                  "Invoke result not available in the unwind destination!",
 
1442
                  Op, &I);
 
1443
        } else {
 
1444
          Assert2(DT->dominates(NormalDest, UseBlock) ||
 
1445
                  !DT->isReachableFromEntry(UseBlock),
 
1446
                  "Invoke result does not dominate all uses!", Op, &I);
 
1447
 
 
1448
          // If the normal successor of an invoke instruction has multiple
 
1449
          // predecessors, then the normal edge from the invoke is critical,
 
1450
          // so the invoke value can only be live if the destination block
 
1451
          // dominates all of it's predecessors (other than the invoke).
 
1452
          if (!NormalDest->getSinglePredecessor() &&
 
1453
              DT->isReachableFromEntry(UseBlock))
 
1454
            // If it is used by something non-phi, then the other case is that
 
1455
            // 'NormalDest' dominates all of its predecessors other than the
 
1456
            // invoke.  In this case, the invoke value can still be used.
 
1457
            for (pred_iterator PI = pred_begin(NormalDest),
 
1458
                 E = pred_end(NormalDest); PI != E; ++PI)
 
1459
              if (*PI != II->getParent() && !DT->dominates(NormalDest, *PI) &&
 
1460
                  DT->isReachableFromEntry(*PI)) {
 
1461
                CheckFailed("Invoke result does not dominate all uses!", Op,&I);
 
1462
                return;
 
1463
              }
 
1464
        }
 
1465
      } else if (isa<PHINode>(I)) {
 
1466
        // PHI nodes are more difficult than other nodes because they actually
 
1467
        // "use" the value in the predecessor basic blocks they correspond to.
 
1468
        BasicBlock *PredBB = dyn_cast<BasicBlock>(I.getOperand(i+1));
 
1469
        Assert2(PredBB && (DT->dominates(OpBlock, PredBB) ||
 
1470
                           !DT->isReachableFromEntry(PredBB)),
 
1471
                "Instruction does not dominate all uses!", Op, &I);
 
1472
      } else {
 
1473
        if (OpBlock == BB) {
 
1474
          // If they are in the same basic block, make sure that the definition
 
1475
          // comes before the use.
 
1476
          Assert2(InstsInThisBlock.count(Op) || !DT->isReachableFromEntry(BB),
 
1477
                  "Instruction does not dominate all uses!", Op, &I);
 
1478
        }
 
1479
 
 
1480
        // Definition must dominate use unless use is unreachable!
 
1481
        Assert2(InstsInThisBlock.count(Op) || DT->dominates(Op, &I) ||
 
1482
                !DT->isReachableFromEntry(BB),
 
1483
                "Instruction does not dominate all uses!", Op, &I);
 
1484
      }
 
1485
    } else if (isa<InlineAsm>(I.getOperand(i))) {
 
1486
      Assert1(i == 0 && (isa<CallInst>(I) || isa<InvokeInst>(I)),
 
1487
              "Cannot take the address of an inline asm!", &I);
 
1488
    }
 
1489
  }
 
1490
  InstsInThisBlock.insert(&I);
 
1491
 
 
1492
  VerifyType(I.getType());
 
1493
}
 
1494
 
 
1495
/// VerifyType - Verify that a type is well formed.
 
1496
///
 
1497
void Verifier::VerifyType(const Type *Ty) {
 
1498
  if (!Types.insert(Ty)) return;
 
1499
 
 
1500
  Assert1(Context == &Ty->getContext(),
 
1501
          "Type context does not match Module context!", Ty);
 
1502
 
 
1503
  switch (Ty->getTypeID()) {
 
1504
  case Type::FunctionTyID: {
 
1505
    const FunctionType *FTy = cast<FunctionType>(Ty);
 
1506
 
 
1507
    const Type *RetTy = FTy->getReturnType();
 
1508
    Assert2(FunctionType::isValidReturnType(RetTy),
 
1509
            "Function type with invalid return type", RetTy, FTy);
 
1510
    VerifyType(RetTy);
 
1511
 
 
1512
    for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i) {
 
1513
      const Type *ElTy = FTy->getParamType(i);
 
1514
      Assert2(FunctionType::isValidArgumentType(ElTy),
 
1515
              "Function type with invalid parameter type", ElTy, FTy);
 
1516
      VerifyType(ElTy);
 
1517
    }
 
1518
  } break;
 
1519
  case Type::StructTyID: {
 
1520
    const StructType *STy = cast<StructType>(Ty);
 
1521
    for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) {
 
1522
      const Type *ElTy = STy->getElementType(i);
 
1523
      Assert2(StructType::isValidElementType(ElTy),
 
1524
              "Structure type with invalid element type", ElTy, STy);
 
1525
      VerifyType(ElTy);
 
1526
    }
 
1527
  } break;
 
1528
  case Type::ArrayTyID: {
 
1529
    const ArrayType *ATy = cast<ArrayType>(Ty);
 
1530
    Assert1(ArrayType::isValidElementType(ATy->getElementType()),
 
1531
            "Array type with invalid element type", ATy);
 
1532
    VerifyType(ATy->getElementType());
 
1533
  } break;
 
1534
  case Type::PointerTyID: {
 
1535
    const PointerType *PTy = cast<PointerType>(Ty);
 
1536
    Assert1(PointerType::isValidElementType(PTy->getElementType()),
 
1537
            "Pointer type with invalid element type", PTy);
 
1538
    VerifyType(PTy->getElementType());
 
1539
  } break;
 
1540
  case Type::VectorTyID: {
 
1541
    const VectorType *VTy = cast<VectorType>(Ty);
 
1542
    Assert1(VectorType::isValidElementType(VTy->getElementType()),
 
1543
            "Vector type with invalid element type", VTy);
 
1544
    VerifyType(VTy->getElementType());
 
1545
  } break;
 
1546
  default:
 
1547
    break;
 
1548
  }
 
1549
}
 
1550
 
 
1551
/// VerifyFunctionLocalMetadata - Verify that the specified MDNode is local to
 
1552
/// specified Function.
 
1553
void Verifier::VerifyFunctionLocalMetadata(MDNode *N, Function *F,
 
1554
                                           SmallPtrSet<MDNode *, 32> &Visited) {
 
1555
  assert(N->isFunctionLocal() && "Should only be called on function-local MD");
 
1556
 
 
1557
  // Only visit each node once.
 
1558
  if (!Visited.insert(N))
 
1559
    return;
 
1560
  
 
1561
  for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) {
 
1562
    Value *V = N->getOperand(i);
 
1563
    if (!V) continue;
 
1564
    
 
1565
    Function *ActualF = 0;
 
1566
    if (Instruction *I = dyn_cast<Instruction>(V))
 
1567
      ActualF = I->getParent()->getParent();
 
1568
    else if (BasicBlock *BB = dyn_cast<BasicBlock>(V))
 
1569
      ActualF = BB->getParent();
 
1570
    else if (Argument *A = dyn_cast<Argument>(V))
 
1571
      ActualF = A->getParent();
 
1572
    else if (MDNode *MD = dyn_cast<MDNode>(V))
 
1573
      if (MD->isFunctionLocal())
 
1574
        VerifyFunctionLocalMetadata(MD, F, Visited);
 
1575
 
 
1576
    // If this was an instruction, bb, or argument, verify that it is in the
 
1577
    // function that we expect.
 
1578
    Assert1(ActualF == 0 || ActualF == F,
 
1579
            "function-local metadata used in wrong function", N);
 
1580
  }
 
1581
}
 
1582
 
 
1583
// Flags used by TableGen to mark intrinsic parameters with the
 
1584
// LLVMExtendedElementVectorType and LLVMTruncatedElementVectorType classes.
 
1585
static const unsigned ExtendedElementVectorType = 0x40000000;
 
1586
static const unsigned TruncatedElementVectorType = 0x20000000;
 
1587
 
 
1588
/// visitIntrinsicFunction - Allow intrinsics to be verified in different ways.
 
1589
///
 
1590
void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) {
 
1591
  Function *IF = CI.getCalledFunction();
 
1592
  Assert1(IF->isDeclaration(), "Intrinsic functions should never be defined!",
 
1593
          IF);
 
1594
 
 
1595
#define GET_INTRINSIC_VERIFIER
 
1596
#include "llvm/Intrinsics.gen"
 
1597
#undef GET_INTRINSIC_VERIFIER
 
1598
 
 
1599
  // If the intrinsic takes MDNode arguments, verify that they are either global
 
1600
  // or are local to *this* function.
 
1601
  for (unsigned i = 1, e = CI.getNumOperands(); i != e; ++i)
 
1602
    if (MDNode *MD = dyn_cast<MDNode>(CI.getOperand(i))) {
 
1603
      if (!MD->isFunctionLocal()) continue;
 
1604
      SmallPtrSet<MDNode *, 32> Visited;
 
1605
      VerifyFunctionLocalMetadata(MD, CI.getParent()->getParent(), Visited);
 
1606
    }
 
1607
 
 
1608
  switch (ID) {
 
1609
  default:
 
1610
    break;
 
1611
  case Intrinsic::dbg_declare: {  // llvm.dbg.declare
 
1612
    Assert1(CI.getOperand(1) && isa<MDNode>(CI.getOperand(1)),
 
1613
                "invalid llvm.dbg.declare intrinsic call 1", &CI);
 
1614
    MDNode *MD = cast<MDNode>(CI.getOperand(1));
 
1615
    Assert1(MD->getNumOperands() == 1,
 
1616
                "invalid llvm.dbg.declare intrinsic call 2", &CI);
 
1617
    if (MD->getOperand(0))
 
1618
      if (Constant *C = dyn_cast<Constant>(MD->getOperand(0)))
 
1619
        Assert1(C && !isa<ConstantPointerNull>(C),
 
1620
                "invalid llvm.dbg.declare intrinsic call 3", &CI);
 
1621
  } break;
 
1622
  case Intrinsic::memcpy:
 
1623
  case Intrinsic::memmove:
 
1624
  case Intrinsic::memset:
 
1625
    Assert1(isa<ConstantInt>(CI.getOperand(4)),
 
1626
            "alignment argument of memory intrinsics must be a constant int",
 
1627
            &CI);
 
1628
    break;
 
1629
  case Intrinsic::gcroot:
 
1630
  case Intrinsic::gcwrite:
 
1631
  case Intrinsic::gcread:
 
1632
    if (ID == Intrinsic::gcroot) {
 
1633
      AllocaInst *AI =
 
1634
        dyn_cast<AllocaInst>(CI.getOperand(1)->stripPointerCasts());
 
1635
      Assert1(AI && AI->getType()->getElementType()->isPointerTy(),
 
1636
              "llvm.gcroot parameter #1 must be a pointer alloca.", &CI);
 
1637
      Assert1(isa<Constant>(CI.getOperand(2)),
 
1638
              "llvm.gcroot parameter #2 must be a constant.", &CI);
 
1639
    }
 
1640
 
 
1641
    Assert1(CI.getParent()->getParent()->hasGC(),
 
1642
            "Enclosing function does not use GC.", &CI);
 
1643
    break;
 
1644
  case Intrinsic::init_trampoline:
 
1645
    Assert1(isa<Function>(CI.getOperand(2)->stripPointerCasts()),
 
1646
            "llvm.init_trampoline parameter #2 must resolve to a function.",
 
1647
            &CI);
 
1648
    break;
 
1649
  case Intrinsic::prefetch:
 
1650
    Assert1(isa<ConstantInt>(CI.getOperand(2)) &&
 
1651
            isa<ConstantInt>(CI.getOperand(3)) &&
 
1652
            cast<ConstantInt>(CI.getOperand(2))->getZExtValue() < 2 &&
 
1653
            cast<ConstantInt>(CI.getOperand(3))->getZExtValue() < 4,
 
1654
            "invalid arguments to llvm.prefetch",
 
1655
            &CI);
 
1656
    break;
 
1657
  case Intrinsic::stackprotector:
 
1658
    Assert1(isa<AllocaInst>(CI.getOperand(2)->stripPointerCasts()),
 
1659
            "llvm.stackprotector parameter #2 must resolve to an alloca.",
 
1660
            &CI);
 
1661
    break;
 
1662
  case Intrinsic::lifetime_start:
 
1663
  case Intrinsic::lifetime_end:
 
1664
  case Intrinsic::invariant_start:
 
1665
    Assert1(isa<ConstantInt>(CI.getOperand(1)),
 
1666
            "size argument of memory use markers must be a constant integer",
 
1667
            &CI);
 
1668
    break;
 
1669
  case Intrinsic::invariant_end:
 
1670
    Assert1(isa<ConstantInt>(CI.getOperand(2)),
 
1671
            "llvm.invariant.end parameter #2 must be a constant integer", &CI);
 
1672
    break;
 
1673
  }
 
1674
}
 
1675
 
 
1676
/// Produce a string to identify an intrinsic parameter or return value.
 
1677
/// The ArgNo value numbers the return values from 0 to NumRets-1 and the
 
1678
/// parameters beginning with NumRets.
 
1679
///
 
1680
static std::string IntrinsicParam(unsigned ArgNo, unsigned NumRets) {
 
1681
  if (ArgNo < NumRets) {
 
1682
    if (NumRets == 1)
 
1683
      return "Intrinsic result type";
 
1684
    else
 
1685
      return "Intrinsic result type #" + utostr(ArgNo);
 
1686
  } else
 
1687
    return "Intrinsic parameter #" + utostr(ArgNo - NumRets);
 
1688
}
 
1689
 
 
1690
bool Verifier::PerformTypeCheck(Intrinsic::ID ID, Function *F, const Type *Ty,
 
1691
                                int VT, unsigned ArgNo, std::string &Suffix) {
 
1692
  const FunctionType *FTy = F->getFunctionType();
 
1693
 
 
1694
  unsigned NumElts = 0;
 
1695
  const Type *EltTy = Ty;
 
1696
  const VectorType *VTy = dyn_cast<VectorType>(Ty);
 
1697
  if (VTy) {
 
1698
    EltTy = VTy->getElementType();
 
1699
    NumElts = VTy->getNumElements();
 
1700
  }
 
1701
 
 
1702
  const Type *RetTy = FTy->getReturnType();
 
1703
  const StructType *ST = dyn_cast<StructType>(RetTy);
 
1704
  unsigned NumRets = 1;
 
1705
  if (ST)
 
1706
    NumRets = ST->getNumElements();
 
1707
 
 
1708
  if (VT < 0) {
 
1709
    int Match = ~VT;
 
1710
 
 
1711
    // Check flags that indicate a type that is an integral vector type with
 
1712
    // elements that are larger or smaller than the elements of the matched
 
1713
    // type.
 
1714
    if ((Match & (ExtendedElementVectorType |
 
1715
                  TruncatedElementVectorType)) != 0) {
 
1716
      const IntegerType *IEltTy = dyn_cast<IntegerType>(EltTy);
 
1717
      if (!VTy || !IEltTy) {
 
1718
        CheckFailed(IntrinsicParam(ArgNo, NumRets) + " is not "
 
1719
                    "an integral vector type.", F);
 
1720
        return false;
 
1721
      }
 
1722
      // Adjust the current Ty (in the opposite direction) rather than
 
1723
      // the type being matched against.
 
1724
      if ((Match & ExtendedElementVectorType) != 0) {
 
1725
        if ((IEltTy->getBitWidth() & 1) != 0) {
 
1726
          CheckFailed(IntrinsicParam(ArgNo, NumRets) + " vector "
 
1727
                      "element bit-width is odd.", F);
 
1728
          return false;
 
1729
        }
 
1730
        Ty = VectorType::getTruncatedElementVectorType(VTy);
 
1731
      } else
 
1732
        Ty = VectorType::getExtendedElementVectorType(VTy);
 
1733
      Match &= ~(ExtendedElementVectorType | TruncatedElementVectorType);
 
1734
    }
 
1735
 
 
1736
    if (Match <= static_cast<int>(NumRets - 1)) {
 
1737
      if (ST)
 
1738
        RetTy = ST->getElementType(Match);
 
1739
 
 
1740
      if (Ty != RetTy) {
 
1741
        CheckFailed(IntrinsicParam(ArgNo, NumRets) + " does not "
 
1742
                    "match return type.", F);
 
1743
        return false;
 
1744
      }
 
1745
    } else {
 
1746
      if (Ty != FTy->getParamType(Match - NumRets)) {
 
1747
        CheckFailed(IntrinsicParam(ArgNo, NumRets) + " does not "
 
1748
                    "match parameter %" + utostr(Match - NumRets) + ".", F);
 
1749
        return false;
 
1750
      }
 
1751
    }
 
1752
  } else if (VT == MVT::iAny) {
 
1753
    if (!EltTy->isIntegerTy()) {
 
1754
      CheckFailed(IntrinsicParam(ArgNo, NumRets) + " is not "
 
1755
                  "an integer type.", F);
 
1756
      return false;
 
1757
    }
 
1758
 
 
1759
    unsigned GotBits = cast<IntegerType>(EltTy)->getBitWidth();
 
1760
    Suffix += ".";
 
1761
 
 
1762
    if (EltTy != Ty)
 
1763
      Suffix += "v" + utostr(NumElts);
 
1764
 
 
1765
    Suffix += "i" + utostr(GotBits);
 
1766
 
 
1767
    // Check some constraints on various intrinsics.
 
1768
    switch (ID) {
 
1769
    default: break; // Not everything needs to be checked.
 
1770
    case Intrinsic::bswap:
 
1771
      if (GotBits < 16 || GotBits % 16 != 0) {
 
1772
        CheckFailed("Intrinsic requires even byte width argument", F);
 
1773
        return false;
 
1774
      }
 
1775
      break;
 
1776
    }
 
1777
  } else if (VT == MVT::fAny) {
 
1778
    if (!EltTy->isFloatingPointTy()) {
 
1779
      CheckFailed(IntrinsicParam(ArgNo, NumRets) + " is not "
 
1780
                  "a floating-point type.", F);
 
1781
      return false;
 
1782
    }
 
1783
 
 
1784
    Suffix += ".";
 
1785
 
 
1786
    if (EltTy != Ty)
 
1787
      Suffix += "v" + utostr(NumElts);
 
1788
 
 
1789
    Suffix += EVT::getEVT(EltTy).getEVTString();
 
1790
  } else if (VT == MVT::vAny) {
 
1791
    if (!VTy) {
 
1792
      CheckFailed(IntrinsicParam(ArgNo, NumRets) + " is not a vector type.", F);
 
1793
      return false;
 
1794
    }
 
1795
    Suffix += ".v" + utostr(NumElts) + EVT::getEVT(EltTy).getEVTString();
 
1796
  } else if (VT == MVT::iPTR) {
 
1797
    if (!Ty->isPointerTy()) {
 
1798
      CheckFailed(IntrinsicParam(ArgNo, NumRets) + " is not a "
 
1799
                  "pointer and a pointer is required.", F);
 
1800
      return false;
 
1801
    }
 
1802
  } else if (VT == MVT::iPTRAny) {
 
1803
    // Outside of TableGen, we don't distinguish iPTRAny (to any address space)
 
1804
    // and iPTR. In the verifier, we can not distinguish which case we have so
 
1805
    // allow either case to be legal.
 
1806
    if (const PointerType* PTyp = dyn_cast<PointerType>(Ty)) {
 
1807
      Suffix += ".p" + utostr(PTyp->getAddressSpace()) + 
 
1808
        EVT::getEVT(PTyp->getElementType()).getEVTString();
 
1809
    } else {
 
1810
      CheckFailed(IntrinsicParam(ArgNo, NumRets) + " is not a "
 
1811
                  "pointer and a pointer is required.", F);
 
1812
      return false;
 
1813
    }
 
1814
  } else if (EVT((MVT::SimpleValueType)VT).isVector()) {
 
1815
    EVT VVT = EVT((MVT::SimpleValueType)VT);
 
1816
 
 
1817
    // If this is a vector argument, verify the number and type of elements.
 
1818
    if (VVT.getVectorElementType() != EVT::getEVT(EltTy)) {
 
1819
      CheckFailed("Intrinsic prototype has incorrect vector element type!", F);
 
1820
      return false;
 
1821
    }
 
1822
 
 
1823
    if (VVT.getVectorNumElements() != NumElts) {
 
1824
      CheckFailed("Intrinsic prototype has incorrect number of "
 
1825
                  "vector elements!", F);
 
1826
      return false;
 
1827
    }
 
1828
  } else if (EVT((MVT::SimpleValueType)VT).getTypeForEVT(Ty->getContext()) != 
 
1829
             EltTy) {
 
1830
    CheckFailed(IntrinsicParam(ArgNo, NumRets) + " is wrong!", F);
 
1831
    return false;
 
1832
  } else if (EltTy != Ty) {
 
1833
    CheckFailed(IntrinsicParam(ArgNo, NumRets) + " is a vector "
 
1834
                "and a scalar is required.", F);
 
1835
    return false;
 
1836
  }
 
1837
 
 
1838
  return true;
 
1839
}
 
1840
 
 
1841
/// VerifyIntrinsicPrototype - TableGen emits calls to this function into
 
1842
/// Intrinsics.gen.  This implements a little state machine that verifies the
 
1843
/// prototype of intrinsics.
 
1844
void Verifier::VerifyIntrinsicPrototype(Intrinsic::ID ID, Function *F,
 
1845
                                        unsigned RetNum,
 
1846
                                        unsigned ParamNum, ...) {
 
1847
  va_list VA;
 
1848
  va_start(VA, ParamNum);
 
1849
  const FunctionType *FTy = F->getFunctionType();
 
1850
 
 
1851
  // For overloaded intrinsics, the Suffix of the function name must match the
 
1852
  // types of the arguments. This variable keeps track of the expected
 
1853
  // suffix, to be checked at the end.
 
1854
  std::string Suffix;
 
1855
 
 
1856
  if (FTy->getNumParams() + FTy->isVarArg() != ParamNum) {
 
1857
    CheckFailed("Intrinsic prototype has incorrect number of arguments!", F);
 
1858
    return;
 
1859
  }
 
1860
 
 
1861
  const Type *Ty = FTy->getReturnType();
 
1862
  const StructType *ST = dyn_cast<StructType>(Ty);
 
1863
 
 
1864
  // Verify the return types.
 
1865
  if (ST && ST->getNumElements() != RetNum) {
 
1866
    CheckFailed("Intrinsic prototype has incorrect number of return types!", F);
 
1867
    return;
 
1868
  }
 
1869
 
 
1870
  for (unsigned ArgNo = 0; ArgNo < RetNum; ++ArgNo) {
 
1871
    int VT = va_arg(VA, int); // An MVT::SimpleValueType when non-negative.
 
1872
 
 
1873
    if (ST) Ty = ST->getElementType(ArgNo);
 
1874
 
 
1875
    if (!PerformTypeCheck(ID, F, Ty, VT, ArgNo, Suffix))
 
1876
      break;
 
1877
  }
 
1878
 
 
1879
  // Verify the parameter types.
 
1880
  for (unsigned ArgNo = 0; ArgNo < ParamNum; ++ArgNo) {
 
1881
    int VT = va_arg(VA, int); // An MVT::SimpleValueType when non-negative.
 
1882
 
 
1883
    if (VT == MVT::isVoid && ArgNo > 0) {
 
1884
      if (!FTy->isVarArg())
 
1885
        CheckFailed("Intrinsic prototype has no '...'!", F);
 
1886
      break;
 
1887
    }
 
1888
 
 
1889
    if (!PerformTypeCheck(ID, F, FTy->getParamType(ArgNo), VT, ArgNo + RetNum,
 
1890
                          Suffix))
 
1891
      break;
 
1892
  }
 
1893
 
 
1894
  va_end(VA);
 
1895
 
 
1896
  // For intrinsics without pointer arguments, if we computed a Suffix then the
 
1897
  // intrinsic is overloaded and we need to make sure that the name of the
 
1898
  // function is correct. We add the suffix to the name of the intrinsic and
 
1899
  // compare against the given function name. If they are not the same, the
 
1900
  // function name is invalid. This ensures that overloading of intrinsics
 
1901
  // uses a sane and consistent naming convention.  Note that intrinsics with
 
1902
  // pointer argument may or may not be overloaded so we will check assuming it
 
1903
  // has a suffix and not.
 
1904
  if (!Suffix.empty()) {
 
1905
    std::string Name(Intrinsic::getName(ID));
 
1906
    if (Name + Suffix != F->getName()) {
 
1907
      CheckFailed("Overloaded intrinsic has incorrect suffix: '" +
 
1908
                  F->getName().substr(Name.length()) + "'. It should be '" +
 
1909
                  Suffix + "'", F);
 
1910
    }
 
1911
  }
 
1912
 
 
1913
  // Check parameter attributes.
 
1914
  Assert1(F->getAttributes() == Intrinsic::getAttributes(ID),
 
1915
          "Intrinsic has wrong parameter attributes!", F);
 
1916
}
 
1917
 
 
1918
 
 
1919
//===----------------------------------------------------------------------===//
 
1920
//  Implement the public interfaces to this file...
 
1921
//===----------------------------------------------------------------------===//
 
1922
 
 
1923
FunctionPass *llvm::createVerifierPass(VerifierFailureAction action) {
 
1924
  return new Verifier(action);
 
1925
}
 
1926
 
 
1927
 
 
1928
// verifyFunction - Create
 
1929
bool llvm::verifyFunction(const Function &f, VerifierFailureAction action) {
 
1930
  Function &F = const_cast<Function&>(f);
 
1931
  assert(!F.isDeclaration() && "Cannot verify external functions");
 
1932
 
 
1933
  FunctionPassManager FPM(F.getParent());
 
1934
  Verifier *V = new Verifier(action);
 
1935
  FPM.add(V);
 
1936
  FPM.run(F);
 
1937
  return V->Broken;
 
1938
}
 
1939
 
 
1940
/// verifyModule - Check a module for errors, printing messages on stderr.
 
1941
/// Return true if the module is corrupt.
 
1942
///
 
1943
bool llvm::verifyModule(const Module &M, VerifierFailureAction action,
 
1944
                        std::string *ErrorInfo) {
 
1945
  PassManager PM;
 
1946
  Verifier *V = new Verifier(action);
 
1947
  PM.add(V);
 
1948
  PM.run(const_cast<Module&>(M));
 
1949
 
 
1950
  if (ErrorInfo && V->Broken)
 
1951
    *ErrorInfo = V->MessagesStr.str();
 
1952
  return V->Broken;
 
1953
}