mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-05-05 09:51:29 +02:00
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.
This commit is contained in:
@@ -276,7 +276,7 @@ LLGlobalValue::LinkageTypes DtoLinkage(Dsymbol* sym)
|
||||
{
|
||||
// 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 @@ LLGlobalValue::LinkageTypes DtoLinkage(Dsymbol* sym)
|
||||
// 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 @@ LLGlobalValue::LinkageTypes DtoLinkage(Dsymbol* sym)
|
||||
{
|
||||
// template
|
||||
if (DtoIsTemplateInstance(cd))
|
||||
return llvm::GlobalValue::WeakLinkage;
|
||||
return TEMPLATE_LINKAGE_TYPE;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -320,7 +320,7 @@ LLGlobalValue::LinkageTypes DtoLinkage(Dsymbol* sym)
|
||||
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 DtoInternalLinkage(Dsymbol* sym)
|
||||
llvm::GlobalValue::LinkageTypes DtoExternalLinkage(Dsymbol* sym)
|
||||
{
|
||||
if (DtoIsTemplateInstance(sym))
|
||||
return llvm::GlobalValue::WeakLinkage;
|
||||
return TEMPLATE_LINKAGE_TYPE;
|
||||
else
|
||||
return llvm::GlobalValue::ExternalLinkage;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user