diff --git a/bridge/go-llvm-materialize.cpp b/bridge/go-llvm-materialize.cpp
index 5ce47bf..d833706 100644
--- a/bridge/go-llvm-materialize.cpp
+++ b/bridge/go-llvm-materialize.cpp
@@ -1496,7 +1496,7 @@
   llvm::Value *callValue = nullptr;
   if (llvm::isa<llvm::Function>(fnval)) {
     llvm::Function *fcn = llvm::cast<llvm::Function>(fnval);
-    BuiltinEntry *be = builtinTable_->lookup(fcn->getName());
+    BuiltinEntry *be = builtinTable_->lookup(fcn->getName().str());
     if (be) {
       BuiltinExprMaker makerfn = be->exprMaker();
       if (makerfn)
diff --git a/bridge/go-sha1.cpp b/bridge/go-sha1.cpp
index cc1d5ff..0fa9279 100644
--- a/bridge/go-sha1.cpp
+++ b/bridge/go-sha1.cpp
@@ -46,7 +46,7 @@
 std::string
 Llvm_Sha1_Helper::finish()
 {
-  std::string result(ctx_->final(), 0, checksum_len);
+  std::string result(ctx_->final().str(), 0, checksum_len);
   return result;
 }
 
diff --git a/driver/CompileGo.cpp b/driver/CompileGo.cpp
index 2dd64c0..9bbce86 100644
--- a/driver/CompileGo.cpp
+++ b/driver/CompileGo.cpp
@@ -255,7 +255,7 @@
 void CompileGoImpl::dumpArg(opt::Arg &arg, bool doquote)
 {
   if (arg.getOption().getKind() != opt::Option::InputClass)
-    quoteDump(arg.getSpelling(), doquote);
+    quoteDump(arg.getSpelling().str(), doquote);
   for (auto &val : arg.getValues())
     quoteDump(val, doquote);
 }
@@ -422,7 +422,7 @@
         errs() << progname_ << ": unable to access file: " << fname << "\n";
         return false;
       }
-      sampleProfileFile_ = fname;
+      sampleProfileFile_ = fname.str();
     }
   }
 
@@ -526,7 +526,7 @@
   if (cpuarg != nullptr) {
     std::string val(cpuarg->getValue());
     if (val == "native")
-      cpuStr = sys::getHostCPUName();
+      cpuStr = sys::getHostCPUName().str();
     else
       cpuStr = cpuarg->getValue();
   }
diff --git a/driver/Driver.cpp b/driver/Driver.cpp
index dc65e5b..8db03f2 100644
--- a/driver/Driver.cpp
+++ b/driver/Driver.cpp
@@ -50,7 +50,7 @@
   }
   SmallString<128> abspath(executablePath_);
   llvm::sys::fs::make_absolute(abspath);
-  installDir_ = llvm::sys::path::parent_path(abspath);
+  installDir_ = llvm::sys::path::parent_path(abspath).str();
   prefixes_ = args.getAllArgValues(gollvm::options::OPT_B);
 }
 
@@ -105,17 +105,17 @@
   llvm::SmallString<256> installed(installedLibDir());
   llvm::sys::path::append(installed, name);
   if (llvm::sys::fs::exists(llvm::Twine(installed)))
-    return installed.str();
+    return std::string(installed);
 
   // Examine toolchain file paths.
   for (const auto &dir : toolchain.filePaths()) {
     llvm::SmallString<256> candidate(dir);
     llvm::sys::path::append(candidate, name);
     if (llvm::sys::fs::exists(llvm::Twine(candidate)))
-      return candidate.str();
+      return std::string(candidate);
   }
 
-  return name;
+  return name.str();
 }
 
 std::string Driver::getProgramPath(llvm::StringRef name,
@@ -126,7 +126,7 @@
   for (auto p : prefixes_)
     candidates.push_back((p + name).str());
   candidates.push_back((triple_.str() + "-" + name).str());
-  candidates.push_back(name);
+  candidates.push_back(name.str());
 
   // Examine toolchain program paths.
   for (auto &dir : toolchain.programPaths()) {
@@ -134,7 +134,7 @@
       llvm::SmallString<256> candidate(dir);
       llvm::sys::path::append(candidate, cand);
       if (llvm::sys::fs::can_execute(llvm::Twine(candidate)))
-        return candidate.str();
+        return std::string(candidate);
     }
   }
 
@@ -146,7 +146,7 @@
       return *pcand;
   }
 
-  return name;
+  return name.str();
 }
 
 // FIXME: some  platforms have PIE enabled by default; we don't
diff --git a/driver/GccUtils.cpp b/driver/GccUtils.cpp
index 78b88f3..f8f8c8e 100644
--- a/driver/GccUtils.cpp
+++ b/driver/GccUtils.cpp
@@ -87,7 +87,7 @@
       llvm::StringRef(tokens[0]).getAsInteger(10, result.maj_) ||
       result.maj_ < 4)
     return bad;
-  result.text_ = vtext;
+  result.text_ = vtext.str();
   if (tokens.size() == 1)
     return result;
 
diff --git a/driver/LinuxToolChain.cpp b/driver/LinuxToolChain.cpp
index dfce121..cc41379 100644
--- a/driver/LinuxToolChain.cpp
+++ b/driver/LinuxToolChain.cpp
@@ -64,7 +64,7 @@
   // File paths
   pathlist &fpaths = filePaths();
   addIfPathExists(fpaths, gccDetector_.getLibPath());
-  std::string osLibDir = getOSLibDir(targetTriple);
+  std::string osLibDir = getOSLibDir(targetTriple).str();
   if (!driver.sysRoot().empty())
     osLibDir = driver.sysRoot() + "/" + osLibDir;
   addIfPathExists(fpaths, llvm::Twine(gccDetector_.getParentLibPath() +
