OSDN Git Service

Fix SampleProf code on LLP64 platforms with stoull
authorReid Kleckner <rnk@google.com>
Thu, 6 Sep 2018 23:35:58 +0000 (23:35 +0000)
committerReid Kleckner <rnk@google.com>
Thu, 6 Sep 2018 23:35:58 +0000 (23:35 +0000)
Otherwise, stoul will throw an out of range exception if the integer
doesn't fit in a 32-bit number.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341604 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ProfileData/SampleProf.h

index f5e123f..65fa8a8 100644 (file)
@@ -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);
   }