]> granicus.if.org Git - clang/commitdiff
The version objects need to actually store the version strings; they
authorChandler Carruth <chandlerc@gmail.com>
Sun, 6 Nov 2011 10:51:30 +0000 (10:51 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Sun, 6 Nov 2011 10:51:30 +0000 (10:51 +0000)
aren't guaranteed to live long enough otherwise.

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

lib/Driver/ToolChains.cpp
lib/Driver/ToolChains.h

index ec6aea792629f40ea1feaa4e65a09ece1386efcb..159d2afcd0e213c4f0f132406a0e0a185a9d398e 100644 (file)
@@ -1523,11 +1523,11 @@ static LinuxDistro DetectLinuxDistro(llvm::Triple::ArchType Arch) {
 ///
 /// This is the primary means of forming GCCVersion objects.
 /*static*/ Linux::GCCVersion Linux::GCCVersion::Parse(StringRef VersionText) {
-  const GCCVersion BadVersion = { VersionText, -1, -1, -1, "" };
+  const GCCVersion BadVersion = { VersionText.str(), -1, -1, -1, "" };
   std::pair<StringRef, StringRef> First = VersionText.split('.');
   std::pair<StringRef, StringRef> Second = First.second.split('.');
 
-  GCCVersion GoodVersion = { VersionText, -1, -1, -1, "" };
+  GCCVersion GoodVersion = { VersionText.str(), -1, -1, -1, "" };
   if (First.first.getAsInteger(10, GoodVersion.Major) ||
       GoodVersion.Major < 0)
     return BadVersion;
@@ -1544,14 +1544,14 @@ static LinuxDistro DetectLinuxDistro(llvm::Triple::ArchType Arch) {
   //   4.4.2-rc4
   //   4.4.x-patched
   // And retains any patch number it finds.
-  StringRef PatchText = GoodVersion.PatchSuffix = Second.second;
+  StringRef PatchText = GoodVersion.PatchSuffix = Second.second.str();
   if (!PatchText.empty()) {
     if (unsigned EndNumber = PatchText.find_first_not_of("0123456789")) {
       // Try to parse the number and any suffix.
       if (PatchText.slice(0, EndNumber).getAsInteger(10, GoodVersion.Patch) ||
           GoodVersion.Patch < 0)
         return BadVersion;
-      GoodVersion.PatchSuffix = PatchText.substr(EndNumber);
+      GoodVersion.PatchSuffix = PatchText.substr(EndNumber).str();
     }
   }
 
index 7599cd6b453acb2dd61918e0303d8334700d9e38..31c97d6e45404e148a837a7a5cc5c5f365ed2fa5 100644 (file)
@@ -389,13 +389,13 @@ class LLVM_LIBRARY_VISIBILITY Linux : public Generic_ELF {
   /// becomes necessary, it can be added.
   struct GCCVersion {
     /// \brief The unparsed text of the version.
-    StringRef Text;
+    std::string Text;
 
     /// \brief The parsed major, minor, and patch numbers.
     int Major, Minor, Patch;
 
     /// \brief Any textual suffix on the patch number.
-    StringRef PatchSuffix;
+    std::string PatchSuffix;
 
     static GCCVersion Parse(StringRef VersionText);
     bool operator<(const GCCVersion &RHS) const;