Skip to content

Commit c208d43

Browse files
Roman Levensteinfacebook-github-bot
Roman Levenstein
authored andcommitted
Fix how mangled C++ functions are handled
Differential Revision: D56683446
1 parent f9079b1 commit c208d43

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

Diff for: lib/LLVMIRCodeGen/LLVMIRGen.cpp

+11-5
Original file line numberDiff line numberDiff line change
@@ -795,7 +795,7 @@ static std::string createName(const std::string &name, ElemKind elemTy) {
795795
void LLVMIRGen::initLLVMFunctionNameToMangledNameMap() {
796796
CHECK(llvmFunctionNameToMangledName_.empty());
797797
constexpr size_t maxFnBaseNameLen = 4096;
798-
char *fnNameBuf = static_cast<char *>(std::malloc(maxFnBaseNameLen));
798+
char fnNameBuf[maxFnBaseNameLen] = {0};
799799
// Build a map from names to the list of matching mangled names.
800800
for (llvm::Function &F : getModule()) {
801801
auto mangledName = F.getName().str();
@@ -805,6 +805,16 @@ void LLVMIRGen::initLLVMFunctionNameToMangledNameMap() {
805805
continue;
806806
}
807807
size_t fnNameLen = maxFnBaseNameLen;
808+
size_t fnContextLen = maxFnBaseNameLen;
809+
// Skip C++ functions that have names like a::b::c. It helps to avoid name
810+
// conflicts with kernels that may be called just c and conflict with C++
811+
// functions.
812+
char *contextNamePtr =
813+
Mangler.getFunctionDeclContextName(fnNameBuf, &fnContextLen);
814+
if (contextNamePtr && fnContextLen != 0 && contextNamePtr[0]) {
815+
continue;
816+
}
817+
fnNameBuf[0] = '\0';
808818
char *demangledNamePtr = Mangler.getFunctionBaseName(fnNameBuf, &fnNameLen);
809819
if (!demangledNamePtr || fnNameLen == 0) {
810820
continue;
@@ -817,10 +827,6 @@ void LLVMIRGen::initLLVMFunctionNameToMangledNameMap() {
817827
}
818828
llvmFunctionNameToMangledName_[demangledFnName].push_back(mangledName);
819829
}
820-
// Free up the memory.
821-
if (fnNameBuf) {
822-
free(fnNameBuf);
823-
}
824830
DEBUG_GLOW({
825831
// Dump the map for debugging purposes.
826832
llvm::dbgs() << "Mapping between function names and matching LLVM function "

0 commit comments

Comments
 (0)