<div dir="ltr">Looks like MSVC isn't happy with this change:<br><a href="http://lab.llvm.org:8011/builders/sanitizer-windows/builds/2488/steps/run%20tests/logs/stdio">http://lab.llvm.org:8011/builders/sanitizer-windows/builds/2488/steps/run%20tests/logs/stdio</a><div><pre style="font-family:'Courier New',courier,monotype,monospace;color:rgb(0,0,0);font-size:medium;line-height:normal"><span class="stdout">[12/88] Building CXX object tools\clang\lib\Frontend\CMakeFiles\clangFrontend.dir\CompilerInstance.cpp.obj
[13/88] Building CXX object tools\clang\lib\Frontend\CMakeFiles\clangFrontend.dir\CreateInvocationFromCommandLine.cpp.obj
FAILED: C:\PROGRA~2\MICROS~1.0\VC\bin\cl.exe   /nologo /TP /DWIN32 /D_WINDOWS /W3   -wd4146 -wd4180 -wd4244 -wd4258 -wd4267 -wd4291 -wd4345 -wd4351 -wd4355 -wd4456 -wd4457 -wd4458 -wd4459 -wd4503 -wd4624 -wd4722 -wd4800 -wd4100 -wd4127 -wd4512 -wd4505 -wd4610 -wd4510 -wd4702 -wd4245 -wd4706 -wd4310 -wd4701 -wd4703 -wd4389 -wd4611 -wd4805 -wd4204 -w14062 -we4238 /MD /O2 /Ob2 -Itools\clang\lib\Frontend -IC:\b\slave\sanitizer-windows\llvm\tools\clang\lib\Frontend -IC:\b\slave\sanitizer-windows\llvm\tools\clang\include -Itools\clang\include -Iinclude -IC:\b\slave\sanitizer-windows\llvm\include    -UNDEBUG /EHs-c- /GR- /showIncludes -DCLANG_ENABLE_ARCMT -DCLANG_ENABLE_OBJC_REWRITER -DCLANG_ENABLE_STATIC_ANALYZER -DGTEST_HAS_RTTI=0 -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_GNU_SOURCE -D_HAS_EXCEPTIONS=0 -D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS /Fotools\clang\lib\Frontend\CMakeFiles\clangFrontend.dir\CompilerInstance.cpp.obj /Fdtools\clang\lib\Frontend\CMakeFiles\clangFrontend.dir\ /FS -c C:\b\slave\sanitizer-windows\llvm\tools\clang\lib\Frontend\CompilerInstance.cpp
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\vector(254) : error C2280: 'std::unique_ptr<llvm::raw_ostream,std::default_delete<_Ty>>::unique_ptr(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)' : attempting to reference a deleted function
        with
        [
            _Ty=llvm::raw_ostream
        ]
        C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\memory(1486) : see declaration of 'std::unique_ptr<llvm::raw_ostream,std::default_delete<_Ty>>::unique_ptr'
        with
        [
            _Ty=llvm::raw_ostream
        ]
        This diagnostic occurred in the compiler generated function 'clang::CompilerInstance::OutputFile::OutputFile(const clang::CompilerInstance::OutputFile &)'
ninja: build stopped: subcommand failed.</span></pre></div></div><br><div class="gmail_quote">пт, 10 апр. 2015 г. в 17:17, Rafael Espindola <<a href="mailto:rafael.espindola@gmail.com">rafael.espindola@gmail.com</a>>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rafael<br>
Date: Fri Apr 10 09:11:52 2015<br>
New Revision: 234597<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=234597&view=rev" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project?rev=234597&view=rev</a><br>
Log:<br>
Use a std::unique_ptr to make it easier to see who owns the stream.<br>
<br>
Modified:<br>
    cfe/trunk/include/clang/<u></u>Frontend/CompilerInstance.h<br>
    cfe/trunk/lib/Frontend/<u></u>CompilerInstance.cpp<br>
<br>
Modified: cfe/trunk/include/clang/<u></u>Frontend/CompilerInstance.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CompilerInstance.h?rev=234597&r1=234596&r2=234597&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/cfe/trunk/include/<u></u>clang/Frontend/<u></u>CompilerInstance.h?rev=234597&<u></u>r1=234596&r2=234597&view=diff</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- cfe/trunk/include/clang/<u></u>Frontend/CompilerInstance.h (original)<br>
+++ cfe/trunk/include/clang/<u></u>Frontend/CompilerInstance.h Fri Apr 10 09:11:52 2015<br>
@@ -151,11 +151,11 @@ class CompilerInstance : public ModuleLo<br>
   struct OutputFile {<br>
     std::string Filename;<br>
     std::string TempFilename;<br>
-    raw_ostream *OS;<br>
+    std::unique_ptr<raw_ostream> OS;<br>
<br>
     OutputFile(const std::string &filename, const std::string &tempFilename,<br>
-               raw_ostream *os)<br>
-      : Filename(filename), TempFilename(tempFilename), OS(os) { }<br>
+               std::unique_ptr<raw_ostream> OS)<br>
+        : Filename(filename), TempFilename(tempFilename), OS(std::move(OS)) {}<br>
   };<br>
<br>
   /// The list of active output files.<br>
@@ -518,7 +518,7 @@ public:<br>
   /// addOutputFile - Add an output file onto the list of tracked output files.<br>
   ///<br>
   /// \param OutFile - The output file info.<br>
-  void addOutputFile(const OutputFile &OutFile);<br>
+  void addOutputFile(OutputFile &&OutFile);<br>
<br>
   /// clearOutputFiles - Clear the output file list, destroying the contained<br>
   /// output streams.<br>
<br>
Modified: cfe/trunk/lib/Frontend/<u></u>CompilerInstance.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInstance.cpp?rev=234597&r1=234596&r2=234597&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/cfe/trunk/lib/<u></u>Frontend/CompilerInstance.cpp?<u></u>rev=234597&r1=234596&r2=<u></u>234597&view=diff</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- cfe/trunk/lib/Frontend/<u></u>CompilerInstance.cpp (original)<br>
+++ cfe/trunk/lib/Frontend/<u></u>CompilerInstance.cpp Fri Apr 10 09:11:52 2015<br>
@@ -518,15 +518,14 @@ void CompilerInstance::createSema(<u></u>Transl<br>
<br>
 // Output Files<br>
<br>
-void CompilerInstance::<u></u>addOutputFile(const OutputFile &OutFile) {<br>
+void CompilerInstance::<u></u>addOutputFile(OutputFile &&OutFile) {<br>
   assert(OutFile.OS && "Attempt to add empty stream to output list!");<br>
-  OutputFiles.push_back(OutFile)<u></u>;<br>
+  OutputFiles.push_back(std::<u></u>move(OutFile));<br>
 }<br>
<br>
 void CompilerInstance::<u></u>clearOutputFiles(bool EraseFiles) {<br>
   for (std::list<OutputFile>::<u></u>iterator<br>
          it = OutputFiles.begin(), ie = OutputFiles.end(); it != ie; ++it) {<br>
-    delete it->OS;<br>
     if (!it->TempFilename.empty()) {<br>
       if (EraseFiles) {<br>
         llvm::sys::fs::remove(it-><u></u>TempFilename);<br>
@@ -561,9 +560,10 @@ CompilerInstance::<u></u>createDefaultOutputFil<br>
 }<br>
<br>
 llvm::raw_null_ostream *CompilerInstance::<u></u>createNullOutputFile() {<br>
-  llvm::raw_null_ostream *OS = new llvm::raw_null_ostream();<br>
-  addOutputFile(OutputFile("", "", OS));<br>
-  return OS;<br>
+  auto OS = llvm::make_unique<llvm::raw_<u></u>null_ostream>();<br>
+  llvm::raw_null_ostream *Ret = OS.get();<br>
+  addOutputFile(OutputFile("", "", std::move(OS)));<br>
+  return Ret;<br>
 }<br>
<br>
 llvm::raw_fd_ostream *<br>
@@ -575,21 +575,22 @@ CompilerInstance::<u></u>createOutputFile(Strin<br>
                                    bool CreateMissingDirectories) {<br>
   std::string OutputPathName, TempPathName;<br>
   std::error_code EC;<br>
-  llvm::raw_fd_ostream *OS = createOutputFile(<br>
+  std::unique_ptr<llvm::raw_fd_<u></u>ostream> OS(createOutputFile(<br>
       OutputPath, EC, Binary, RemoveFileOnSignal, InFile, Extension,<br>
-      UseTemporary, CreateMissingDirectories, &OutputPathName, &TempPathName);<br>
+      UseTemporary, CreateMissingDirectories, &OutputPathName, &TempPathName));<br>
   if (!OS) {<br>
     getDiagnostics().Report(diag::<u></u>err_fe_unable_to_open_output) << OutputPath<br>
                                                                 << EC.message();<br>
     return nullptr;<br>
   }<br>
<br>
+  llvm::raw_fd_ostream *Ret = OS.get();<br>
   // Add the output file -- but don't try to remove "-", since this means we are<br>
   // using stdin.<br>
   addOutputFile(OutputFile((<u></u>OutputPathName != "-") ? OutputPathName : "",<br>
-                TempPathName, OS));<br>
+                           TempPathName, std::move(OS)));<br>
<br>
-  return OS;<br>
+  return Ret;<br>
 }<br>
<br>
 llvm::raw_fd_ostream *CompilerInstance::<u></u>createOutputFile(<br>
<br>
<br>
______________________________<u></u>_________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/<u></u>mailman/listinfo/cfe-commits</a><br>
</blockquote></div>