Does msvc 2012 not generate implicit move operations? On Aug 11, 2014 12:05 AM, "NAKAMURA Takumi" <[email protected]> wrote:
> 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 > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
