r234597 - Use a std::unique_ptr to make it easier to see who owns the stream.

Rafael Espíndola rafael.espindola at gmail.com
Fri Apr 10 10:25:27 PDT 2015


Should be fixed by 234599

On 10 April 2015 at 11:09, Timur Iskhodzhanov <timurrrr at google.com> wrote:
> Looks like MSVC isn't happy with this change:
> http://lab.llvm.org:8011/builders/sanitizer-windows/builds/2488/steps/run%20tests/logs/stdio
>
> [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.
>
>
> пт, 10 апр. 2015 г. в 17:17, Rafael Espindola <rafael.espindola at gmail.com>:
>
>> Author: rafael
>> Date: Fri Apr 10 09:11:52 2015
>> New Revision: 234597
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=234597&view=rev
>> Log:
>> Use a std::unique_ptr to make it easier to see who owns the stream.
>>
>> Modified:
>>     cfe/trunk/include/clang/Frontend/CompilerInstance.h
>>     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=234597&r1=234596&r2=234597&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/include/clang/Frontend/CompilerInstance.h (original)
>> +++ cfe/trunk/include/clang/Frontend/CompilerInstance.h Fri Apr 10
>> 09:11:52 2015
>> @@ -151,11 +151,11 @@ class CompilerInstance : public ModuleLo
>>    struct OutputFile {
>>      std::string Filename;
>>      std::string TempFilename;
>> -    raw_ostream *OS;
>> +    std::unique_ptr<raw_ostream> OS;
>>
>>      OutputFile(const std::string &filename, const std::string
>> &tempFilename,
>> -               raw_ostream *os)
>> -      : Filename(filename), TempFilename(tempFilename), OS(os) { }
>> +               std::unique_ptr<raw_ostream> OS)
>> +        : Filename(filename), TempFilename(tempFilename),
>> OS(std::move(OS)) {}
>>    };
>>
>>    /// The list of active output files.
>> @@ -518,7 +518,7 @@ public:
>>    /// addOutputFile - Add an output file onto the list of tracked output
>> files.
>>    ///
>>    /// \param OutFile - The output file info.
>> -  void addOutputFile(const OutputFile &OutFile);
>> +  void addOutputFile(OutputFile &&OutFile);
>>
>>    /// clearOutputFiles - Clear the output file list, destroying the
>> contained
>>    /// output streams.
>>
>> Modified: cfe/trunk/lib/Frontend/CompilerInstance.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInstance.cpp?rev=234597&r1=234596&r2=234597&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Frontend/CompilerInstance.cpp (original)
>> +++ cfe/trunk/lib/Frontend/CompilerInstance.cpp Fri Apr 10 09:11:52 2015
>> @@ -518,15 +518,14 @@ void CompilerInstance::createSema(Transl
>>
>>  // Output Files
>>
>> -void CompilerInstance::addOutputFile(const OutputFile &OutFile) {
>> +void CompilerInstance::addOutputFile(OutputFile &&OutFile) {
>>    assert(OutFile.OS && "Attempt to add empty stream to output list!");
>> -  OutputFiles.push_back(OutFile);
>> +  OutputFiles.push_back(std::move(OutFile));
>>  }
>>
>>  void CompilerInstance::clearOutputFiles(bool EraseFiles) {
>>    for (std::list<OutputFile>::iterator
>>           it = OutputFiles.begin(), ie = OutputFiles.end(); it != ie;
>> ++it) {
>> -    delete it->OS;
>>      if (!it->TempFilename.empty()) {
>>        if (EraseFiles) {
>>          llvm::sys::fs::remove(it->TempFilename);
>> @@ -561,9 +560,10 @@ CompilerInstance::createDefaultOutputFil
>>  }
>>
>>  llvm::raw_null_ostream *CompilerInstance::createNullOutputFile() {
>> -  llvm::raw_null_ostream *OS = new llvm::raw_null_ostream();
>> -  addOutputFile(OutputFile("", "", OS));
>> -  return OS;
>> +  auto OS = llvm::make_unique<llvm::raw_null_ostream>();
>> +  llvm::raw_null_ostream *Ret = OS.get();
>> +  addOutputFile(OutputFile("", "", std::move(OS)));
>> +  return Ret;
>>  }
>>
>>  llvm::raw_fd_ostream *
>> @@ -575,21 +575,22 @@ CompilerInstance::createOutputFile(Strin
>>                                     bool CreateMissingDirectories) {
>>    std::string OutputPathName, TempPathName;
>>    std::error_code EC;
>> -  llvm::raw_fd_ostream *OS = createOutputFile(
>> +  std::unique_ptr<llvm::raw_fd_ostream> OS(createOutputFile(
>>        OutputPath, EC, Binary, RemoveFileOnSignal, InFile, Extension,
>> -      UseTemporary, CreateMissingDirectories, &OutputPathName,
>> &TempPathName);
>> +      UseTemporary, CreateMissingDirectories, &OutputPathName,
>> &TempPathName));
>>    if (!OS) {
>>      getDiagnostics().Report(diag::err_fe_unable_to_open_output) <<
>> OutputPath
>>                                                                  <<
>> EC.message();
>>      return nullptr;
>>    }
>>
>> +  llvm::raw_fd_ostream *Ret = OS.get();
>>    // Add the output file -- but don't try to remove "-", since this means
>> we are
>>    // using stdin.
>>    addOutputFile(OutputFile((OutputPathName != "-") ? OutputPathName : "",
>> -                TempPathName, OS));
>> +                           TempPathName, std::move(OS)));
>>
>> -  return OS;
>> +  return Ret;
>>  }
>>
>>  llvm::raw_fd_ostream *CompilerInstance::createOutputFile(
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list