diff --git a/bridge/go-backend.cpp b/bridge/go-backend.cpp
index cf3a7ef..ba880bf 100644
--- a/bridge/go-backend.cpp
+++ b/bridge/go-backend.cpp
@@ -63,11 +63,10 @@
   for (llvm::object::section_iterator si = obj->section_begin(),
            se = obj->section_end(); si != se; ++si) {
     llvm::object::SectionRef sref = *si;
-    llvm::StringRef sname;
-    std::error_code error = sref.getName(sname);
-    if (error)
+    llvm::Expected<llvm::StringRef> sname = sref.getName();
+    if (! sname)
       break;
-    if (sname == GO_EXPORT_SECTION_NAME) {
+    if (*sname == GO_EXPORT_SECTION_NAME) {
       // Extract section of interest
       llvm::Expected<llvm::StringRef> bytes = sref.getContents();
       if (! bytes) {
diff --git a/driver-main/llvm-goc.cpp b/driver-main/llvm-goc.cpp
index 3970074..411083d 100644
--- a/driver-main/llvm-goc.cpp
+++ b/driver-main/llvm-goc.cpp
@@ -150,7 +150,7 @@
   auto llvmargs = args_.getAllArgValues(gollvm::options::OPT_mllvm);
   if (! llvmargs.empty()) {
     unsigned nargs = llvmargs.size();
-    auto args = llvm::make_unique<const char*[]>(nargs + 2);
+    auto args = std::make_unique<const char*[]>(nargs + 2);
     args[0] = "gollvm (LLVM option parsing)";
     for (unsigned i = 0; i != nargs; ++i)
       args[i + 1] = llvmargs[i].c_str();
diff --git a/driver/Compilation.cpp b/driver/Compilation.cpp
index 34c5c3f..ac0291e 100644
--- a/driver/Compilation.cpp
+++ b/driver/Compilation.cpp
@@ -134,10 +134,10 @@
                              const char *executable,
                              llvm::opt::ArgStringList &args)
 {
-  ownedCommands_.push_back(llvm::make_unique<Command>(srcAction,
-                                                      creatingTool,
-                                                      executable,
-                                                      args));
+  ownedCommands_.push_back(std::make_unique<Command>(srcAction,
+                                                     creatingTool,
+                                                     executable,
+                                                     args));
   commands_.push_back(ownedCommands_.back().get());
 }
 
diff --git a/driver/CompileGo.cpp b/driver/CompileGo.cpp
index e3fa441..c0c5caa 100644
--- a/driver/CompileGo.cpp
+++ b/driver/CompileGo.cpp
@@ -313,8 +313,8 @@
   // Open output file.
   std::error_code EC;
   sys::fs::OpenFlags OpenFlags = sys::fs::F_Text;
-  auto FDOut = llvm::make_unique<ToolOutputFile>(asmOutFileName_, EC,
-                                                 OpenFlags);
+  auto FDOut = std::make_unique<ToolOutputFile>(asmOutFileName_, EC,
+                                                OpenFlags);
   if (EC) {
     errs() << progname_ << ": error opening " << asmOutFileName_ << ": "
            << EC.message() << '\n';
@@ -432,16 +432,16 @@
     if (fnamearg != nullptr) {
       StringRef fname = fnamearg->getValue();
       std::error_code EC;
-      optRecordFile_ = llvm::make_unique<llvm::ToolOutputFile>(
+      optRecordFile_ = std::make_unique<llvm::ToolOutputFile>(
           fname, EC, llvm::sys::fs::F_None);
       if (EC) {
         errs() << "error: unable to open file '"
                << fname << "' to emit optimization remarks\n";
         return false;
       }
-      context_.setRemarkStreamer(llvm::make_unique<llvm::RemarkStreamer>(
+      context_.setRemarkStreamer(std::make_unique<llvm::RemarkStreamer>(
           fname,
-          llvm::make_unique<llvm::remarks::YAMLRemarkSerializer>(optRecordFile_->os(),
+          std::make_unique<llvm::remarks::YAMLRemarkSerializer>(optRecordFile_->os(),
                                     llvm::remarks::SerializerMode::Separate)));
       if (! sampleProfileFile_.empty())
         context_.setDiagnosticsHotnessRequested(true);
@@ -580,7 +580,8 @@
 {
   // Set up the LLVM context
   context_.setDiagnosticHandler(
-      llvm::make_unique<BEDiagnosticHandler>(&this->hasError_, this->remarkCtl_));
+      std::make_unique<BEDiagnosticHandler>(&this->hasError_,
+                                            this->remarkCtl_));
 
   llvm::Optional<unsigned> enable_gc =
       driver_.getLastArgAsInteger(gollvm::options::OPT_enable_gc_EQ, 0u);
diff --git a/driver/Driver.cpp b/driver/Driver.cpp
index 8323881..62c62dd 100644
--- a/driver/Driver.cpp
+++ b/driver/Driver.cpp
@@ -301,7 +301,7 @@
   if (!tc) {
     switch (triple_.getOS()) {
       case Triple::Linux:
-        tc = make_unique<toolchains::Linux>(*this, triple_);
+        tc = std::make_unique<toolchains::Linux>(*this, triple_);
         break;
       default:
         errs() << progname_ << ": error: unsupported target "
diff --git a/driver/GollvmOptions.cpp b/driver/GollvmOptions.cpp
index 859ef21..4455b1a 100644
--- a/driver/GollvmOptions.cpp
+++ b/driver/GollvmOptions.cpp
@@ -40,7 +40,7 @@
 }
 
 std::unique_ptr<OptTable> createGollvmDriverOptTable() {
-  auto Result = llvm::make_unique<DriverOptTable>();
+  auto Result = std::make_unique<DriverOptTable>();
   return std::move(Result);
 }
 
diff --git a/libgo/godumpspec/godumpspec.cpp b/libgo/godumpspec/godumpspec.cpp
index 68507d4..edf7705 100644
--- a/libgo/godumpspec/godumpspec.cpp
+++ b/libgo/godumpspec/godumpspec.cpp
@@ -1265,8 +1265,8 @@
   std::unique_ptr<ToolOutputFile> OutputFile;
   if (!OutputFilename.empty()) {
     std::error_code EC;
-    OutputFile = llvm::make_unique<ToolOutputFile>(OutputFilename, EC,
-                                                     sys::fs::F_None);
+    OutputFile = std::make_unique<ToolOutputFile>(OutputFilename, EC,
+                                                  sys::fs::F_None);
     // Don't remove output file if we exit with an error.
     OutputFile->keep();
     error("Unable to open output file" + OutputFilename, EC);
