...but Flags parameter was plain unsigned int prior to Clang 3.4
Change-Id: Ife39abda6b5274ae196dcbf591d02fa3f36f6072
This commit is contained in:
@@ -10,12 +10,17 @@
|
||||
#ifndef INCLUDED_COMPILERPLUGINS_CLANG_COMPAT_HXX
|
||||
#define INCLUDED_COMPILERPLUGINS_CLANG_COMPAT_HXX
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include "clang/AST/Decl.h"
|
||||
#include "clang/AST/Expr.h"
|
||||
#include "clang/AST/Type.h"
|
||||
#include "clang/Basic/Diagnostic.h"
|
||||
#include "clang/Basic/DiagnosticIDs.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
|
||||
// Compatibility wrapper to abstract over (trivial) changes in the Clang API:
|
||||
namespace compat {
|
||||
@@ -66,6 +71,18 @@ inline unsigned getCustomDiagID(
|
||||
#endif
|
||||
}
|
||||
|
||||
inline std::unique_ptr<llvm::raw_fd_ostream> create_raw_fd_ostream(
|
||||
char const * Filename, std::string & ErrorInfo)
|
||||
{
|
||||
#if (__clang_major__ == 3 && __clang_minor__ >= 5) || __clang_major__ > 3
|
||||
return std::unique_ptr<llvm::raw_fd_ostream>(
|
||||
new llvm::raw_fd_ostream(Filename, ErrorInfo, llvm::sys::fs::F_None));
|
||||
#else
|
||||
return std::unique_ptr<llvm::raw_fd_ostream>(
|
||||
new llvm::raw_fd_ostream(Filename, ErrorInfo));
|
||||
#endif
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@@ -224,15 +224,16 @@ void PluginHandler::HandleTranslationUnit( ASTContext& context )
|
||||
sprintf( filename, "%s.new.%d", modifyFile.c_str(), getpid());
|
||||
string error;
|
||||
bool ok = false;
|
||||
raw_fd_ostream ostream( filename, error, sys::fs::F_None );
|
||||
std::unique_ptr<raw_fd_ostream> ostream(
|
||||
compat::create_raw_fd_ostream(filename, error) );
|
||||
if( error.empty())
|
||||
{
|
||||
it->second.write( ostream );
|
||||
ostream.close();
|
||||
if( !ostream.has_error() && rename( filename, modifyFile.c_str()) == 0 )
|
||||
it->second.write( *ostream );
|
||||
ostream->close();
|
||||
if( !ostream->has_error() && rename( filename, modifyFile.c_str()) == 0 )
|
||||
ok = true;
|
||||
}
|
||||
ostream.clear_error();
|
||||
ostream->clear_error();
|
||||
unlink( filename );
|
||||
if( !ok )
|
||||
report( DiagnosticsEngine::Error, "cannot write modified source to %0 (%1)" ) << modifyFile << error;
|
||||
|
Reference in New Issue
Block a user