Merge pull request #189 from guanqun/fix-extern-c-error

calls to C/C++ functions should not be mangled.
This commit is contained in:
Matt Pharr
2012-03-20 05:55:09 -07:00

View File

@@ -501,10 +501,14 @@ Module::AddFunctionDeclaration(Symbol *funSym, bool isInline) {
llvm::GlobalValue::LinkageTypes linkage = (funSym->storageClass == SC_STATIC || llvm::GlobalValue::LinkageTypes linkage = (funSym->storageClass == SC_STATIC ||
isInline) ? isInline) ?
llvm::GlobalValue::InternalLinkage : llvm::GlobalValue::ExternalLinkage; llvm::GlobalValue::InternalLinkage : llvm::GlobalValue::ExternalLinkage;
std::string functionName = ((funSym->storageClass == SC_EXTERN_C) ? std::string functionName;
funSym->name : funSym->MangledName()); if (funSym->storageClass == SC_EXTERN_C)
if (g->mangleFunctionsWithTarget) functionName = funSym->name;
functionName += g->target.GetISAString(); else {
functionName = funSym->MangledName();
if (g->mangleFunctionsWithTarget)
functionName += g->target.GetISAString();
}
llvm::Function *function = llvm::Function *function =
llvm::Function::Create(llvmFunctionType, linkage, functionName.c_str(), llvm::Function::Create(llvmFunctionType, linkage, functionName.c_str(),
module); module);