aboutsummaryrefslogtreecommitdiff
path: root/lib/Transforms/IPO/Internalize.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Transforms/IPO/Internalize.cpp')
-rw-r--r--lib/Transforms/IPO/Internalize.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/Transforms/IPO/Internalize.cpp b/lib/Transforms/IPO/Internalize.cpp
index eeee63b989..cd1eda71dc 100644
--- a/lib/Transforms/IPO/Internalize.cpp
+++ b/lib/Transforms/IPO/Internalize.cpp
@@ -99,9 +99,13 @@ namespace {
}
// Mark all global variables with initializers as internal as well...
- for (Module::global_iterator I = M.global_begin(), E = M.global_end(); I != E; ++I)
+ for (Module::global_iterator I = M.global_begin(), E = M.global_end();
+ I != E; ++I)
if (!I->isExternal() && !I->hasInternalLinkage() &&
- !ExternalNames.count(I->getName())) {
+ !ExternalNames.count(I->getName()) &&
+ // *never* internalize the llvm.used symbol, used to implement
+ // attribute((used)).
+ I->getName() != "llvm.used") {
// Special case handling of the global ctor and dtor list. When we
// internalize it, we mark it constant, which allows elimination of
// the list if it's empty.