Mercurial > projects > ldc
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 } |