diff options
author | Chris Lattner <sabre@nondot.org> | 2003-11-22 01:29:35 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-11-22 01:29:35 +0000 |
commit | 35bb52f8b1c155b03acafb2f02d9037c9dc947a3 (patch) | |
tree | c32744b5a5adfa5656c168116b9345d17aa7502c /lib/Transforms/Scalar | |
parent | 915cab2ac186f7575c61f1e1e347e2c59e04c92f (diff) | |
download | external_llvm-35bb52f8b1c155b03acafb2f02d9037c9dc947a3.zip external_llvm-35bb52f8b1c155b03acafb2f02d9037c9dc947a3.tar.gz external_llvm-35bb52f8b1c155b03acafb2f02d9037c9dc947a3.tar.bz2 |
Finegrainify namespacification
The module stripping pass should not strip symbols on external globals
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10157 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Scalar')
-rw-r--r-- | lib/Transforms/Scalar/SymbolStripping.cpp | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/lib/Transforms/Scalar/SymbolStripping.cpp b/lib/Transforms/Scalar/SymbolStripping.cpp index 9e058e7..32ebdd3 100644 --- a/lib/Transforms/Scalar/SymbolStripping.cpp +++ b/lib/Transforms/Scalar/SymbolStripping.cpp @@ -25,8 +25,7 @@ #include "llvm/Module.h" #include "llvm/SymbolTable.h" #include "llvm/Pass.h" - -namespace llvm { +using namespace llvm; static bool StripSymbolTable(SymbolTable &SymTab) { bool RemovedSymbol = false; @@ -34,15 +33,20 @@ static bool StripSymbolTable(SymbolTable &SymTab) { for (SymbolTable::iterator I = SymTab.begin(); I != SymTab.end(); ++I) { std::map<const std::string, Value *> &Plane = I->second; - SymbolTable::type_iterator B; - while ((B = Plane.begin()) != Plane.end()) { // Found nonempty type plane! + SymbolTable::type_iterator B = Plane.begin(); + while (B != Plane.end()) { // Found nonempty type plane! Value *V = B->second; - if (isa<Constant>(V) || isa<Type>(V)) - SymTab.type_remove(B); - else - V->setName("", &SymTab); // Set name to "", removing from symbol table! - RemovedSymbol = true; - assert(Plane.begin() != B && "Symbol not removed from table!"); + if (isa<Constant>(V) || isa<Type>(V)) { + SymTab.type_remove(B++); + RemovedSymbol = true; + } else { + ++B; + if (!isa<GlobalValue>(V) || cast<GlobalValue>(V)->hasInternalLinkage()){ + // Set name to "", removing from symbol table! + V->setName("", &SymTab); + RemovedSymbol = true; + } + } } } @@ -69,12 +73,10 @@ namespace { "Strip symbols from module and functions"); } -Pass *createSymbolStrippingPass() { +Pass *llvm::createSymbolStrippingPass() { return new SymbolStripping(); } -Pass *createFullSymbolStrippingPass() { +Pass *llvm::createFullSymbolStrippingPass() { return new FullSymbolStripping(); } - -} // End llvm namespace |