Index: llvm/lib/Transforms/Utils/UniqueInternalLinkageNames.cpp =================================================================== --- llvm/lib/Transforms/Utils/UniqueInternalLinkageNames.cpp +++ llvm/lib/Transforms/Utils/UniqueInternalLinkageNames.cpp @@ -27,9 +27,12 @@ Md5.final(R); SmallString<32> Str; llvm::MD5::stringifyResult(R, Str); + // Convert MD5hash to Decimal. Demangler suffixes can either contain numbers + // or characters but not both. + APInt IntHash = APInt(128, Str.str(), 16); // Prepend "__uniq" before the hash for tools like profilers to understand that // this symbol is of internal linkage type. - std::string ModuleNameHash = (Twine(".__uniq.") + Twine(Str)).str(); + std::string ModuleNameHash = (Twine(".__uniq.") + Twine(IntHash.toString(10, false))).str(); bool Changed = false; // Append the module hash to all internal linkage functions. Index: llvm/test/Transforms/UniqueInternalLinkageNames/unique_symbol_names.ll =================================================================== --- llvm/test/Transforms/UniqueInternalLinkageNames/unique_symbol_names.ll +++ llvm/test/Transforms/UniqueInternalLinkageNames/unique_symbol_names.ll @@ -10,5 +10,5 @@ ret i32 0 } -; CHECK: @glob.__uniq.6ae72bb15a7d1834b42ae042a58f7a4d = internal global -; CHECK: define internal i32 @foo.__uniq.6ae72bb15a7d1834b42ae042a58f7a4d() +; CHECK: @glob.__uniq.142098474322525230676991677820000238157 = internal global +; CHECK: define internal i32 @foo.__uniq.142098474322525230676991677820000238157()