Mercurial > projects > ldc
diff gen/tollvm.cpp @ 1644:9176437d98be
Add -linkonce-templates for emitting linkonce_odr syms instead of weak_odr.
author | Matti Niemenmaa <matti.niemenmaa+hg@iki.fi> |
---|---|
date | Tue, 09 Mar 2010 23:07:08 +0200 |
parents | d8e558087001 |
children | 40bd4a0d4870 |
line wrap: on
line diff
--- a/gen/tollvm.cpp Mon Mar 08 23:37:40 2010 -0700 +++ b/gen/tollvm.cpp Tue Mar 09 23:07:08 2010 +0200 @@ -245,7 +245,7 @@ return llvm::GlobalValue::AvailableExternallyLinkage; // template if (needsTemplateLinkage(sym)) - return TEMPLATE_LINKAGE_TYPE; + return templateLinkage; } // function else if (FuncDeclaration* fdecl = sym->isFuncDeclaration()) @@ -263,12 +263,12 @@ return llvm::GlobalValue::AvailableExternallyLinkage; // array operations are always template linkage if (fdecl->isArrayOp) - return TEMPLATE_LINKAGE_TYPE; + return templateLinkage; // template instances should have weak linkage // but only if there's a body, and it's not naked // otherwise we make it external else if (needsTemplateLinkage(fdecl) && fdecl->fbody && !fdecl->naked) - return TEMPLATE_LINKAGE_TYPE; + return templateLinkage; // extern(C) functions are always external else if (ft->linkage == LINKc) return llvm::GlobalValue::ExternalLinkage; @@ -283,7 +283,7 @@ return llvm::GlobalValue::AvailableExternallyLinkage; // template if (needsTemplateLinkage(cd)) - return TEMPLATE_LINKAGE_TYPE; + return templateLinkage; } else { @@ -334,7 +334,7 @@ if (needsTemplateLinkage(sym)) { if (isAvailableExternally(sym) && mustDefineSymbol(sym)) return llvm::GlobalValue::AvailableExternallyLinkage; - return TEMPLATE_LINKAGE_TYPE; + return templateLinkage; } else return llvm::GlobalValue::InternalLinkage; @@ -345,7 +345,7 @@ if (isAvailableExternally(sym) && mustDefineSymbol(sym)) return llvm::GlobalValue::AvailableExternallyLinkage; if (needsTemplateLinkage(sym)) - return TEMPLATE_LINKAGE_TYPE; + return templateLinkage; else return llvm::GlobalValue::ExternalLinkage; }