comparison gen/tollvm.cpp @ 896:fcab41e144c9

Makes sure only function definitions inside templates get weak linkage, llvm doesn't allow weak linkage on just declarations, so we use external linkage for those. Fixes #162
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Thu, 22 Jan 2009 17:26:50 +0100
parents d54f7cf84e6b
children a4fcc13da3cd
comparison
equal deleted inserted replaced
895:fb4853c46917 896:fcab41e144c9
292 return llvm::GlobalValue::InternalLinkage; 292 return llvm::GlobalValue::InternalLinkage;
293 // intrinsics are always external 293 // intrinsics are always external
294 if (fdecl->llvmInternal == LLVMintrinsic) 294 if (fdecl->llvmInternal == LLVMintrinsic)
295 return llvm::GlobalValue::ExternalLinkage; 295 return llvm::GlobalValue::ExternalLinkage;
296 // template instances should have weak linkage 296 // template instances should have weak linkage
297 else if (DtoIsTemplateInstance(fdecl)) 297 // but only if there's a body, otherwise we make it external
298 else if (DtoIsTemplateInstance(fdecl) && fdecl->fbody)
298 return llvm::GlobalValue::WeakLinkage; 299 return llvm::GlobalValue::WeakLinkage;
299 // extern(C) functions are always external 300 // extern(C) functions are always external
300 else if (ft->linkage == LINKc) 301 else if (ft->linkage == LINKc)
301 return llvm::GlobalValue::ExternalLinkage; 302 return llvm::GlobalValue::ExternalLinkage;
302 } 303 }