Mercurial > projects > ldc
diff gen/tollvm.cpp @ 918:a4fcc13da3cd
Changed templates and typeinfo to use linkonce linkage instead of weak linkage, this should fix inlining problems, fixing bug #197 . If problems show up, it's easy to change it back by changing the define in mars.h . I'm 95% sure this is safe, given how we handle templates.
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Mon, 02 Feb 2009 01:44:51 +0100 |
parents | fcab41e144c9 |
children | 545f54041d91 |
line wrap: on
line diff
--- a/gen/tollvm.cpp Mon Feb 02 00:58:36 2009 +0100 +++ b/gen/tollvm.cpp Mon Feb 02 01:44:51 2009 +0100 @@ -276,7 +276,7 @@ { // template if (DtoIsTemplateInstance(sym)) - return llvm::GlobalValue::WeakLinkage; + return TEMPLATE_LINKAGE_TYPE; // local static else if (sym->parent && sym->parent->isFuncDeclaration()) return llvm::GlobalValue::InternalLinkage; @@ -296,7 +296,7 @@ // template instances should have weak linkage // but only if there's a body, otherwise we make it external else if (DtoIsTemplateInstance(fdecl) && fdecl->fbody) - return llvm::GlobalValue::WeakLinkage; + return TEMPLATE_LINKAGE_TYPE; // extern(C) functions are always external else if (ft->linkage == LINKc) return llvm::GlobalValue::ExternalLinkage; @@ -306,7 +306,7 @@ { // template if (DtoIsTemplateInstance(cd)) - return llvm::GlobalValue::WeakLinkage; + return TEMPLATE_LINKAGE_TYPE; } else { @@ -320,7 +320,7 @@ llvm::GlobalValue::LinkageTypes DtoInternalLinkage(Dsymbol* sym) { if (DtoIsTemplateInstance(sym)) - return llvm::GlobalValue::WeakLinkage; + return TEMPLATE_LINKAGE_TYPE; else return llvm::GlobalValue::InternalLinkage; } @@ -328,7 +328,7 @@ llvm::GlobalValue::LinkageTypes DtoExternalLinkage(Dsymbol* sym) { if (DtoIsTemplateInstance(sym)) - return llvm::GlobalValue::WeakLinkage; + return TEMPLATE_LINKAGE_TYPE; else return llvm::GlobalValue::ExternalLinkage; }