Fix SampleProf code on LLP64 platforms with stoull

Otherwise, stoul will throw an out of range exception if the integer
doesn't fit in a 32-bit number.

llvm-svn: 341604
This commit is contained in:
Reid Kleckner 2018-09-06 23:35:58 +00:00
parent d0d0cb38be
commit 8c4db5da5f
1 changed files with 6 additions and 4 deletions

View File

@ -403,7 +403,7 @@ public:
void setName(StringRef FunctionName) { Name = FunctionName; } void setName(StringRef FunctionName) { Name = FunctionName; }
/// Return the function name. /// Return the function name.
const StringRef &getName() const { return Name; } StringRef getName() const { return Name; }
/// Return the original function name if it exists in Module \p M. /// Return the original function name if it exists in Module \p M.
StringRef getFuncNameInModule(const Module *M) const { StringRef getFuncNameInModule(const Module *M) const {
@ -422,7 +422,7 @@ public:
// Expect CurrentModule to be initialized by GUIDToFuncNameMapper. // Expect CurrentModule to be initialized by GUIDToFuncNameMapper.
if (M != CurrentModule) if (M != CurrentModule)
llvm_unreachable("Input Module should be the same as CurrentModule"); llvm_unreachable("Input Module should be the same as CurrentModule");
auto iter = GUIDToFuncNameMap.find(std::stoul(Name.data())); auto iter = GUIDToFuncNameMap.find(std::stoull(Name.data()));
if (iter == GUIDToFuncNameMap.end()) if (iter == GUIDToFuncNameMap.end())
return StringRef(); return StringRef();
return iter->second; return iter->second;
@ -486,8 +486,10 @@ public:
// Assume the input \p Name is a name coming from FunctionSamples itself. // Assume the input \p Name is a name coming from FunctionSamples itself.
// If the format is SPF_Compact_Binary, the name is already a GUID and we // If the format is SPF_Compact_Binary, the name is already a GUID and we
// don't want to return the GUID of GUID. // don't want to return the GUID of GUID.
static uint64_t getGUID(const StringRef &Name) { static uint64_t getGUID(StringRef Name) {
return (Format == SPF_Compact_Binary) ? std::stoul(Name.data()) if (Format == SPF_Compact_Binary)
errs() << Name << '\n';
return (Format == SPF_Compact_Binary) ? std::stoull(Name.data())
: Function::getGUID(Name); : Function::getGUID(Name);
} }