From 8c4db5da5fe4ec63c9968adfe4965c41ff16a8bf Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Thu, 6 Sep 2018 23:35:58 +0000 Subject: [PATCH] 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 --- llvm/include/llvm/ProfileData/SampleProf.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/llvm/include/llvm/ProfileData/SampleProf.h b/llvm/include/llvm/ProfileData/SampleProf.h index f5e123f..65fa8a8 100644 --- a/llvm/include/llvm/ProfileData/SampleProf.h +++ b/llvm/include/llvm/ProfileData/SampleProf.h @@ -403,7 +403,7 @@ public: void setName(StringRef FunctionName) { Name = FunctionName; } /// 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. StringRef getFuncNameInModule(const Module *M) const { @@ -422,7 +422,7 @@ public: // Expect CurrentModule to be initialized by GUIDToFuncNameMapper. if (M != 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()) return StringRef(); return iter->second; @@ -486,8 +486,10 @@ public: // 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 // don't want to return the GUID of GUID. - static uint64_t getGUID(const StringRef &Name) { - return (Format == SPF_Compact_Binary) ? std::stoul(Name.data()) + static uint64_t getGUID(StringRef Name) { + if (Format == SPF_Compact_Binary) + errs() << Name << '\n'; + return (Format == SPF_Compact_Binary) ? std::stoull(Name.data()) : Function::getGUID(Name); } -- 2.7.4