1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 19:12:56 +02:00

Add code to verify correctly linkages

llvm-svn: 5788
This commit is contained in:
Chris Lattner 2003-04-16 20:42:40 +00:00
parent 19e35f5a22
commit a9a0e4e780

View File

@ -94,8 +94,7 @@ namespace { // Anonymous namespace for class
bool doFinalization(Module &M) {
// Scan through, checking all of the external function's linkage now...
for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I)
if (I->isExternal() && I->hasInternalLinkage())
CheckFailed("Function Declaration has Internal Linkage!", I);
visitGlobalValue(*I);
for (Module::giterator I = M.gbegin(), E = M.gend(); I != E; ++I)
if (I->isExternal() && I->hasInternalLinkage())
@ -122,8 +121,10 @@ namespace { // Anonymous namespace for class
}
}
// Verification methods...
void verifySymbolTable(SymbolTable &ST);
void visitGlobalValue(GlobalValue &GV);
void visitFunction(Function &F);
void visitBasicBlock(BasicBlock &BB);
void visitPHINode(PHINode &PN);
@ -171,6 +172,19 @@ namespace { // Anonymous namespace for class
do { if (!(C)) { CheckFailed(M, V1, V2, V3, V4); return; } } while (0)
void Verifier::visitGlobalValue(GlobalValue &GV) {
Assert1(!GV.isExternal() || GV.hasExternalLinkage(),
"Global value has Internal Linkage!", &GV);
Assert1(!GV.hasAppendingLinkage() || isa<GlobalVariable>(GV),
"Only global variables can have appending linkage!", &GV);
if (GV.hasAppendingLinkage()) {
GlobalVariable &GVar = cast<GlobalVariable>(GV);
Assert1(isa<ArrayType>(GVar.getType()->getElementType()),
"Only global arrays can have appending linkage!", &GV);
}
}
// verifySymbolTable - Verify that a function or module symbol table is ok
//
void Verifier::verifySymbolTable(SymbolTable &ST) {