r215346 - Revert r215331, "unique_ptrify CompilerInstance::OutputFile(s) and remove a unique_ptr around a non-owning raw_ostream in CodeGenAction::CreateASTConsumer"

NAKAMURA Takumi geek4civic at gmail.com
Sun Aug 10 23:53:11 PDT 2014


Author: chapuni
Date: Mon Aug 11 01:53:11 2014
New Revision: 215346

URL: http://llvm.org/viewvc/llvm-project?rev=215346&view=rev
Log:
Revert r215331, "unique_ptrify CompilerInstance::OutputFile(s) and remove a unique_ptr around a non-owning raw_ostream in CodeGenAction::CreateASTConsumer"

It cannot be compiled on Visual Studio 2012.

  clang\include\clang/Frontend/CompilerInstance.h(153):
error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>'
            with
            [
                _Ty=llvm::raw_ostream
            ]
            D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\memory(1447) : see declaration of 'std::unique_ptr<_Ty>::unique_ptr'
            with
            [
                _Ty=llvm::raw_ostream
            ]
            This diagnostic occurred in the compiler generated function 'clang::CompilerInstance::OutputFile::OutputFile(const clang::CompilerInstance::OutputFile &)'

Modified:
    cfe/trunk/include/clang/Frontend/CompilerInstance.h
    cfe/trunk/lib/CodeGen/CodeGenAction.cpp
    cfe/trunk/lib/Frontend/CompilerInstance.cpp

Modified: cfe/trunk/include/clang/Frontend/CompilerInstance.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CompilerInstance.h?rev=215346&r1=215345&r2=215346&view=diff
==============================================================================
--- cfe/trunk/include/clang/Frontend/CompilerInstance.h (original)
+++ cfe/trunk/include/clang/Frontend/CompilerInstance.h Mon Aug 11 01:53:11 2014
@@ -144,11 +144,11 @@ class CompilerInstance : public ModuleLo
   struct OutputFile {
     std::string Filename;
     std::string TempFilename;
-    std::unique_ptr<raw_ostream> OS;
+    raw_ostream *OS;
 
     OutputFile(const std::string &filename, const std::string &tempFilename,
-               std::unique_ptr<raw_ostream> OS)
-      : Filename(filename), TempFilename(tempFilename), OS(std::move(OS)) { }
+               raw_ostream *os)
+      : Filename(filename), TempFilename(tempFilename), OS(os) { }
   };
 
   /// The list of active output files.
@@ -508,7 +508,7 @@ public:
   /// addOutputFile - Add an output file onto the list of tracked output files.
   ///
   /// \param OutFile - The output file info.
-  void addOutputFile(OutputFile OutFile);
+  void addOutputFile(const OutputFile &OutFile);
 
   /// clearOutputFiles - Clear the output file list, destroying the contained
   /// output streams.
@@ -657,11 +657,14 @@ public:
   /// stored here on success.
   /// \param TempPathName [out] - If given, the temporary file path name
   /// will be stored here on success.
-  static std::unique_ptr<llvm::raw_fd_ostream>
-  createOutputFile(StringRef OutputPath, std::string &Error, bool Binary,
-                   bool RemoveFileOnSignal, StringRef BaseInput,
-                   StringRef Extension, bool UseTemporary,
-                   bool CreateMissingDirectories, std::string *ResultPathName,
+  static llvm::raw_fd_ostream *
+  createOutputFile(StringRef OutputPath, std::string &Error,
+                   bool Binary, bool RemoveFileOnSignal,
+                   StringRef BaseInput,
+                   StringRef Extension,
+                   bool UseTemporary,
+                   bool CreateMissingDirectories,
+                   std::string *ResultPathName,
                    std::string *TempPathName);
 
   llvm::raw_null_ostream *createNullOutputFile();

Modified: cfe/trunk/lib/CodeGen/CodeGenAction.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenAction.cpp?rev=215346&r1=215345&r2=215346&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CodeGenAction.cpp (original)
+++ cfe/trunk/lib/CodeGen/CodeGenAction.cpp Mon Aug 11 01:53:11 2014
@@ -610,7 +610,7 @@ static raw_ostream *GetOutputStream(Comp
 std::unique_ptr<ASTConsumer>
 CodeGenAction::CreateASTConsumer(CompilerInstance &CI, StringRef InFile) {
   BackendAction BA = static_cast<BackendAction>(Act);
-  raw_ostream *OS = GetOutputStream(CI, InFile, BA);
+  std::unique_ptr<raw_ostream> OS(GetOutputStream(CI, InFile, BA));
   if (BA != Backend_EmitNothing && !OS)
     return nullptr;
 
@@ -649,7 +649,7 @@ CodeGenAction::CreateASTConsumer(Compile
   std::unique_ptr<BackendConsumer> Result(new BackendConsumer(
       BA, CI.getDiagnostics(), CI.getCodeGenOpts(), CI.getTargetOpts(),
       CI.getLangOpts(), CI.getFrontendOpts().ShowTimers, InFile,
-      LinkModuleToUse, OS, *VMContext, CoverageInfo));
+      LinkModuleToUse, OS.release(), *VMContext, CoverageInfo));
   BEConsumer = Result.get();
   return std::move(Result);
 }

Modified: cfe/trunk/lib/Frontend/CompilerInstance.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInstance.cpp?rev=215346&r1=215345&r2=215346&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/CompilerInstance.cpp (original)
+++ cfe/trunk/lib/Frontend/CompilerInstance.cpp Mon Aug 11 01:53:11 2014
@@ -518,15 +518,15 @@ void CompilerInstance::createSema(Transl
 
 // Output Files
 
-void CompilerInstance::addOutputFile(OutputFile OutFile) {
+void CompilerInstance::addOutputFile(const OutputFile &OutFile) {
   assert(OutFile.OS && "Attempt to add empty stream to output list!");
-  OutputFiles.push_back(std::move(OutFile));
+  OutputFiles.push_back(OutFile);
 }
 
 void CompilerInstance::clearOutputFiles(bool EraseFiles) {
   for (std::list<OutputFile>::iterator
          it = OutputFiles.begin(), ie = OutputFiles.end(); it != ie; ++it) {
-    it->OS.reset();
+    delete it->OS;
     if (!it->TempFilename.empty()) {
       if (EraseFiles) {
         llvm::sys::fs::remove(it->TempFilename);
@@ -561,10 +561,9 @@ CompilerInstance::createDefaultOutputFil
 }
 
 llvm::raw_null_ostream *CompilerInstance::createNullOutputFile() {
-  auto OS = llvm::make_unique<llvm::raw_null_ostream>();
-  auto *Res = OS.get();
-  addOutputFile(OutputFile("", "", std::move(OS)));
-  return Res;
+  llvm::raw_null_ostream *OS = new llvm::raw_null_ostream();
+  addOutputFile(OutputFile("", "", OS));
+  return OS;
 }
 
 llvm::raw_fd_ostream *
@@ -575,7 +574,7 @@ CompilerInstance::createOutputFile(Strin
                                    bool UseTemporary,
                                    bool CreateMissingDirectories) {
   std::string Error, OutputPathName, TempPathName;
-  auto OS = createOutputFile(OutputPath, Error, Binary,
+  llvm::raw_fd_ostream *OS = createOutputFile(OutputPath, Error, Binary,
                                               RemoveFileOnSignal,
                                               InFile, Extension,
                                               UseTemporary,
@@ -588,16 +587,15 @@ CompilerInstance::createOutputFile(Strin
     return nullptr;
   }
 
-  auto *Res = OS.get();
   // Add the output file -- but don't try to remove "-", since this means we are
   // using stdin.
   addOutputFile(OutputFile((OutputPathName != "-") ? OutputPathName : "",
-                           TempPathName, std::move(OS)));
+                TempPathName, OS));
 
-  return Res;
+  return OS;
 }
 
-std::unique_ptr<llvm::raw_fd_ostream>
+llvm::raw_fd_ostream *
 CompilerInstance::createOutputFile(StringRef OutputPath,
                                    std::string &Error,
                                    bool Binary,
@@ -665,7 +663,7 @@ CompilerInstance::createOutputFile(Strin
     }
 
     if (!EC) {
-      OS = llvm::make_unique<llvm::raw_fd_ostream>(fd, /*shouldClose=*/true);
+      OS.reset(new llvm::raw_fd_ostream(fd, /*shouldClose=*/true));
       OSFile = TempFile = TempPath.str();
     }
     // If we failed to create the temporary, fallback to writing to the file
@@ -675,9 +673,9 @@ CompilerInstance::createOutputFile(Strin
 
   if (!OS) {
     OSFile = OutFile;
-    OS = llvm::make_unique<llvm::raw_fd_ostream>(
+    OS.reset(new llvm::raw_fd_ostream(
         OSFile.c_str(), Error,
-        (Binary ? llvm::sys::fs::F_None : llvm::sys::fs::F_Text));
+        (Binary ? llvm::sys::fs::F_None : llvm::sys::fs::F_Text)));
     if (!Error.empty())
       return nullptr;
   }
@@ -691,7 +689,7 @@ CompilerInstance::createOutputFile(Strin
   if (TempPathName)
     *TempPathName = TempFile;
 
-  return OS;
+  return OS.release();
 }
 
 // Initialization Utilities





More information about the cfe-commits mailing list