From 12f3285f9bcce0ea4f1197a68a3b738762678273 Mon Sep 17 00:00:00 2001 From: Lu Guanqun Date: Thu, 15 Mar 2012 13:47:57 +0800 Subject: [PATCH] calls to C/C++ functions should not be mangled. Otherwise, linker will never find the correct function. --- module.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/module.cpp b/module.cpp index 7b7f2e5c..1539347e 100644 --- a/module.cpp +++ b/module.cpp @@ -501,10 +501,14 @@ Module::AddFunctionDeclaration(Symbol *funSym, bool isInline) { llvm::GlobalValue::LinkageTypes linkage = (funSym->storageClass == SC_STATIC || isInline) ? llvm::GlobalValue::InternalLinkage : llvm::GlobalValue::ExternalLinkage; - std::string functionName = ((funSym->storageClass == SC_EXTERN_C) ? - funSym->name : funSym->MangledName()); - if (g->mangleFunctionsWithTarget) - functionName += g->target.GetISAString(); + std::string functionName; + if (funSym->storageClass == SC_EXTERN_C) + functionName = funSym->name; + else { + functionName = funSym->MangledName(); + if (g->mangleFunctionsWithTarget) + functionName += g->target.GetISAString(); + } llvm::Function *function = llvm::Function::Create(llvmFunctionType, linkage, functionName.c_str(), module);