calls to C/C++ functions should not be mangled.

Otherwise, linker will never find the correct function.
This commit is contained in:
Lu Guanqun
2012-03-15 13:47:57 +08:00
parent 7e954e4248
commit 12f3285f9b

View File

@@ -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);