Fix GCMetadaPrinter::finishAssembly not executed, patch by Yiannis Tsiouris.

Due to the execution order of doFinalization functions, the GC information were
deleted before AsmPrinter::doFinalization was executed. Thus, the
GCMetadataPrinter::finishAssembly was never called.

The patch fixes that by moving the code of the GCInfoDeleter::doFinalization to
Printer::doFinalization.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175528 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Benjamin Kramer
2013-02-19 16:51:44 +00:00
parent 26a5c4dd31
commit 063337309e
3 changed files with 34 additions and 40 deletions
+3 -38
View File
@@ -33,25 +33,13 @@ namespace {
explicit Printer(raw_ostream &OS) : FunctionPass(ID), OS(OS) {}
const char *getPassName() const;
void getAnalysisUsage(AnalysisUsage &AU) const;
bool runOnFunction(Function &F);
};
class Deleter : public FunctionPass {
static char ID;
public:
Deleter();
const char *getPassName() const;
void getAnalysisUsage(AnalysisUsage &AU) const;
bool runOnFunction(Function &F);
bool doFinalization(Module &M);
};
}
INITIALIZE_PASS(GCModuleInfo, "collector-metadata",
@@ -182,32 +170,9 @@ bool Printer::runOnFunction(Function &F) {
return false;
}
// -----------------------------------------------------------------------------
char Deleter::ID = 0;
FunctionPass *llvm::createGCInfoDeleter() {
return new Deleter();
}
Deleter::Deleter() : FunctionPass(ID) {}
const char *Deleter::getPassName() const {
return "Delete Garbage Collector Information";
}
void Deleter::getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll();
AU.addRequired<GCModuleInfo>();
}
bool Deleter::runOnFunction(Function &MF) {
return false;
}
bool Deleter::doFinalization(Module &M) {
bool Printer::doFinalization(Module &M) {
GCModuleInfo *GMI = getAnalysisIfAvailable<GCModuleInfo>();
assert(GMI && "Deleter didn't require GCModuleInfo?!");
assert(GMI && "Printer didn't require GCModuleInfo?!");
GMI->clear();
return false;
}