diff --git a/lib/ARCMigrate/FileRemapper.cpp b/lib/ARCMigrate/FileRemapper.cpp
index ee33c8f..159ab79 100644
--- a/lib/ARCMigrate/FileRemapper.cpp
+++ b/lib/ARCMigrate/FileRemapper.cpp
@@ -146,11 +146,10 @@
     } else {
 
       SmallString<64> tempPath;
-      tempPath = path::filename(origFE->getName());
-      tempPath += "-%%%%%%%%";
-      tempPath += path::extension(origFE->getName());
       int fd;
-      if (fs::unique_file(tempPath.str(), fd, tempPath) != llvm::errc::success)
+      if (fs::createTemporaryFile(path::filename(origFE->getName()),
+                                  path::extension(origFE->getName()), fd,
+                                  tempPath))
         return report("Could not create file: " + tempPath.str(), Diag);
 
       llvm::raw_fd_ostream newOut(fd, /*shouldClose=*/true);
diff --git a/lib/AST/InheritViz.cpp b/lib/AST/InheritViz.cpp
index 40bda72..3d64310 100644
--- a/lib/AST/InheritViz.cpp
+++ b/lib/AST/InheritViz.cpp
@@ -140,8 +140,8 @@
 
   int FD;
   SmallString<128> Filename;
-  error_code EC = sys::fs::unique_file(Self.getAsString() + "-%%%%%%.dot", FD,
-                                       Filename);
+  error_code EC =
+      sys::fs::createTemporaryFile(Self.getAsString(), "dot", FD, Filename);
   if (EC) {
     llvm::errs() << "Error: " << EC.message() << "\n";
     return;
diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp
index 3f3d001..1daabcb 100644
--- a/lib/Driver/Driver.cpp
+++ b/lib/Driver/Driver.cpp
@@ -1616,7 +1616,7 @@
   const {
   SmallString<128> Path;
   llvm::error_code EC =
-    llvm::sys::fs::unique_file(Prefix + "-%%%%%%." + Suffix, Path);
+      llvm::sys::fs::createTemporaryFile(Prefix, Suffix, Path);
   if (EC) {
     Diag(clang::diag::err_unable_to_make_temp) << EC.message();
     return "";
diff --git a/lib/Frontend/ASTUnit.cpp b/lib/Frontend/ASTUnit.cpp
index d175073..7d25ebb 100644
--- a/lib/Frontend/ASTUnit.cpp
+++ b/lib/Frontend/ASTUnit.cpp
@@ -1244,7 +1244,7 @@
     return TmpFile;
 
   SmallString<128> Path;
-  llvm::sys::fs::unique_file("preamble-%%%%%%.pch", Path);
+  llvm::sys::fs::createTemporaryFile("preamble", "pch", Path);
 
   return Path.str();
 }
diff --git a/lib/Frontend/CompilerInstance.cpp b/lib/Frontend/CompilerInstance.cpp
index 61c140c..8d78a22 100644
--- a/lib/Frontend/CompilerInstance.cpp
+++ b/lib/Frontend/CompilerInstance.cpp
@@ -855,13 +855,9 @@
                                                     IK));
   } else {
     // Create a temporary module map file.
-    TempModuleMapFileName = Module->Name;
-    TempModuleMapFileName += "-%%%%%%%%.map";
     int FD;
-    if (llvm::sys::fs::unique_file(TempModuleMapFileName.str(), FD, 
-                                   TempModuleMapFileName,
-                                   /*makeAbsolute=*/true)
-          != llvm::errc::success) {
+    if (llvm::sys::fs::createTemporaryFile(Module->Name, "map", FD,
+                                           TempModuleMapFileName)) {
       ImportingInstance.getDiagnostics().Report(diag::err_module_map_temp_file)
         << TempModuleMapFileName;
       return;
diff --git a/lib/Rewrite/Frontend/FrontendActions.cpp b/lib/Rewrite/Frontend/FrontendActions.cpp
index 9935aeb..e9ec388 100644
--- a/lib/Rewrite/Frontend/FrontendActions.cpp
+++ b/lib/Rewrite/Frontend/FrontendActions.cpp
@@ -76,12 +76,10 @@
 public:
   std::string RewriteFilename(const std::string &Filename, int &fd) {
     SmallString<128> Path;
-    Path = llvm::sys::path::filename(Filename);
-    Path += "-%%%%%%%%";
-    Path += llvm::sys::path::extension(Filename);
-    SmallString<128> NewPath;
-    llvm::sys::fs::unique_file(Path.str(), fd, NewPath);
-    return NewPath.str();
+    llvm::sys::fs::createTemporaryFile(llvm::sys::path::filename(Filename),
+                                       llvm::sys::path::extension(Filename), fd,
+                                       Path);
+    return Path.str();
   }
 };
 } // end anonymous namespace
diff --git a/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp b/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
index 13f75b9..64ba5f6 100644
--- a/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
+++ b/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
@@ -700,7 +700,7 @@
 static ExplodedNode::Auditor* CreateUbiViz() {
   SmallString<128> P;
   int FD;
-  llvm::sys::fs::unique_file("llvm_ubi-%%%%%%", FD, P);
+  llvm::sys::fs::createTemporaryFile("llvm_ubi", "", FD, P);
   llvm::errs() << "Writing '" << P.str() << "'.\n";
 
   OwningPtr<llvm::raw_fd_ostream> Stream;
diff --git a/unittests/Tooling/RefactoringTest.cpp b/unittests/Tooling/RefactoringTest.cpp
index f4c086c..f8d10d286 100644
--- a/unittests/Tooling/RefactoringTest.cpp
+++ b/unittests/Tooling/RefactoringTest.cpp
@@ -194,7 +194,7 @@
     SmallString<1024> Path;
     int FD;
     llvm::error_code EC =
-        llvm::sys::fs::unique_file(Twine(Name) + "%%%%%%", FD, Path);
+        llvm::sys::fs::createTemporaryFile(Name, "", FD, Path);
     assert(!EC);
     (void)EC;
 
diff --git a/unittests/Tooling/RewriterTestContext.h b/unittests/Tooling/RewriterTestContext.h
index 629ebf1..841cd0f 100644
--- a/unittests/Tooling/RewriterTestContext.h
+++ b/unittests/Tooling/RewriterTestContext.h
@@ -63,7 +63,7 @@
     SmallString<1024> Path;
     int FD;
     llvm::error_code EC =
-      llvm::sys::fs::unique_file(Twine(Name) + "%%%%%%", FD, Path);
+        llvm::sys::fs::createTemporaryFile(Name, "", FD, Path);
     assert(!EC);
     (void)EC;
 
