diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Transforms/IPO/GlobalOpt.cpp | 9 | 
1 files changed, 8 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/IPO/GlobalOpt.cpp b/llvm/lib/Transforms/IPO/GlobalOpt.cpp index 06a319017ee..2873ee72169 100644 --- a/llvm/lib/Transforms/IPO/GlobalOpt.cpp +++ b/llvm/lib/Transforms/IPO/GlobalOpt.cpp @@ -2993,10 +2993,17 @@ bool GlobalOpt::OptimizeGlobalAliases(Module &M) {    for (Module::alias_iterator I = M.alias_begin(), E = M.alias_end();         I != E;) { -    Module::alias_iterator J = I++; +    GlobalAlias *J = &*I++; +      // Aliases without names cannot be referenced outside this module.      if (!J->hasName() && !J->isDeclaration() && !J->hasLocalLinkage())        J->setLinkage(GlobalValue::InternalLinkage); + +    if (deleteIfDead(*J)) { +      Changed = true; +      continue; +    } +      // If the aliasee may change at link time, nothing can be done - bail out.      if (J->mayBeOverridden())        continue;  | 

