summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CodeGenModule.cpp
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2010-02-18 21:31:48 +0000
committerJohn McCall <rjmccall@apple.com>2010-02-18 21:31:48 +0000
commit334ce7c1c4075fc3579ab1e3b9e76296b0da53ed (patch)
tree53f287975e343e6be5d8866577430946779f78ed /clang/lib/CodeGen/CodeGenModule.cpp
parent5ffef745c2913c6e84d26d390d748a2381225f24 (diff)
downloadbcm5719-llvm-334ce7c1c4075fc3579ab1e3b9e76296b0da53ed.tar.gz
bcm5719-llvm-334ce7c1c4075fc3579ab1e3b9e76296b0da53ed.zip
Revert the ctor/dtor alias optimization for now; the buildbots can detect
some failure here that I can't. llvm-svn: 96612
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
-rw-r--r--clang/lib/CodeGen/CodeGenModule.cpp29
1 files changed, 12 insertions, 17 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index 41575e41e53..5a552c490ac 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -316,20 +316,24 @@ GetLinkageForFunction(ASTContext &Context, const FunctionDecl *FD,
return CodeGenModule::GVA_CXXInline;
}
-llvm::GlobalValue::LinkageTypes
-CodeGenModule::getFunctionLinkage(const FunctionDecl *D) {
+/// SetFunctionDefinitionAttributes - Set attributes for a global.
+///
+/// FIXME: This is currently only done for aliases and functions, but not for
+/// variables (these details are set in EmitGlobalVarDefinition for variables).
+void CodeGenModule::SetFunctionDefinitionAttributes(const FunctionDecl *D,
+ llvm::GlobalValue *GV) {
GVALinkage Linkage = GetLinkageForFunction(getContext(), D, Features);
if (Linkage == GVA_Internal) {
- return llvm::Function::InternalLinkage;
+ GV->setLinkage(llvm::Function::InternalLinkage);
} else if (D->hasAttr<DLLExportAttr>()) {
- return llvm::Function::DLLExportLinkage;
+ GV->setLinkage(llvm::Function::DLLExportLinkage);
} else if (D->hasAttr<WeakAttr>()) {
- return llvm::Function::WeakAnyLinkage;
+ GV->setLinkage(llvm::Function::WeakAnyLinkage);
} else if (Linkage == GVA_C99Inline) {
// In C99 mode, 'inline' functions are guaranteed to have a strong
// definition somewhere else, so we can use available_externally linkage.
- return llvm::Function::AvailableExternallyLinkage;
+ GV->setLinkage(llvm::Function::AvailableExternallyLinkage);
} else if (Linkage == GVA_CXXInline || Linkage == GVA_TemplateInstantiation) {
// In C++, the compiler has to emit a definition in every translation unit
// that references the function. We should use linkonce_odr because
@@ -337,22 +341,13 @@ CodeGenModule::getFunctionLinkage(const FunctionDecl *D) {
// don't need to codegen it. b) if the function persists, it needs to be
// merged with other definitions. c) C++ has the ODR, so we know the
// definition is dependable.
- return llvm::Function::LinkOnceODRLinkage;
+ GV->setLinkage(llvm::Function::LinkOnceODRLinkage);
} else {
assert(Linkage == GVA_StrongExternal);
// Otherwise, we have strong external linkage.
- return llvm::Function::ExternalLinkage;
+ GV->setLinkage(llvm::Function::ExternalLinkage);
}
-}
-
-/// SetFunctionDefinitionAttributes - Set attributes for a global.
-///
-/// FIXME: This is currently only done for aliases and functions, but not for
-/// variables (these details are set in EmitGlobalVarDefinition for variables).
-void CodeGenModule::SetFunctionDefinitionAttributes(const FunctionDecl *D,
- llvm::GlobalValue *GV) {
- GV->setLinkage(getFunctionLinkage(D));
SetCommonAttributes(D, GV);
}
OpenPOWER on IntegriCloud