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;
 }