summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.cpp7
-rw-r--r--clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.h4
-rw-r--r--clang-tools-extra/cpp11-migrate/Core/CMakeLists.txt2
-rw-r--r--clang-tools-extra/cpp11-migrate/Core/FileOverrides.cpp10
-rw-r--r--clang-tools-extra/cpp11-migrate/Core/FileOverrides.h44
-rw-r--r--clang-tools-extra/cpp11-migrate/Core/SyntaxCheck.cpp59
-rw-r--r--clang-tools-extra/cpp11-migrate/Core/SyntaxCheck.h35
-rw-r--r--clang-tools-extra/cpp11-migrate/Core/Transform.cpp48
-rw-r--r--clang-tools-extra/cpp11-migrate/Core/Transform.h19
-rw-r--r--clang-tools-extra/cpp11-migrate/LoopConvert/LoopConvert.cpp4
-rw-r--r--clang-tools-extra/cpp11-migrate/LoopConvert/LoopConvert.h4
-rw-r--r--clang-tools-extra/cpp11-migrate/UseAuto/UseAuto.cpp4
-rw-r--r--clang-tools-extra/cpp11-migrate/UseAuto/UseAuto.h4
-rw-r--r--clang-tools-extra/cpp11-migrate/UseNullptr/UseNullptr.cpp4
-rw-r--r--clang-tools-extra/cpp11-migrate/UseNullptr/UseNullptr.h4
-rw-r--r--clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp41
-rw-r--r--clang-tools-extra/unittests/cpp11-migrate/PerfSupportTest.cpp8
-rw-r--r--clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp4
18 files changed, 215 insertions, 90 deletions
diff --git a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.cpp b/clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.cpp
index 0deb8d22f2c..c628fac3b8b 100644
--- a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.cpp
+++ b/clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.cpp
@@ -29,12 +29,13 @@ using namespace clang;
static llvm::cl::opt<bool> DetectMacros(
"override-macros",
- llvm::cl::desc("Detect and use macros that expand to the 'override' keyword."));
+ llvm::cl::desc(
+ "Detect and use macros that expand to the 'override' keyword."));
-int AddOverrideTransform::apply(const FileContentsByPath &InputStates,
+int AddOverrideTransform::apply(const FileOverrides &InputStates,
const CompilationDatabase &Database,
const std::vector<std::string> &SourcePaths,
- FileContentsByPath &ResultStates) {
+ FileOverrides &ResultStates) {
RefactoringTool AddOverrideTool(Database, SourcePaths);
unsigned AcceptedChanges = 0;
diff --git a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.h b/clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.h
index 976807cf6f2..651cc6f8abd 100644
--- a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.h
+++ b/clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.h
@@ -30,10 +30,10 @@ public:
: Transform("AddOverride", Options) {}
/// \see Transform::run().
- virtual int apply(const FileContentsByPath &InputStates,
+ virtual int apply(const FileOverrides &InputStates,
const clang::tooling::CompilationDatabase &Database,
const std::vector<std::string> &SourcePaths,
- FileContentsByPath &ResultStates) LLVM_OVERRIDE;
+ FileOverrides &ResultStates) LLVM_OVERRIDE;
virtual bool handleBeginSource(clang::CompilerInstance &CI,
llvm::StringRef Filename) LLVM_OVERRIDE;
diff --git a/clang-tools-extra/cpp11-migrate/Core/CMakeLists.txt b/clang-tools-extra/cpp11-migrate/Core/CMakeLists.txt
index 1cd42f0b237..562ae65e1eb 100644
--- a/clang-tools-extra/cpp11-migrate/Core/CMakeLists.txt
+++ b/clang-tools-extra/cpp11-migrate/Core/CMakeLists.txt
@@ -1,6 +1,8 @@
set(LLVM_LINK_COMPONENTS support)
add_clang_library(migrateCore
+ FileOverrides.cpp
+ SyntaxCheck.cpp
Transforms.cpp
Transform.cpp
IncludeExcludeInfo.cpp
diff --git a/clang-tools-extra/cpp11-migrate/Core/FileOverrides.cpp b/clang-tools-extra/cpp11-migrate/Core/FileOverrides.cpp
new file mode 100644
index 00000000000..0f7e5214ff1
--- /dev/null
+++ b/clang-tools-extra/cpp11-migrate/Core/FileOverrides.cpp
@@ -0,0 +1,10 @@
+#include "Core/FileOverrides.h"
+#include "clang/Basic/SourceManager.h"
+
+void SourceOverrides::applyOverrides(clang::SourceManager &SM,
+ clang::FileManager &FM) const {
+ assert(!MainFileOverride.empty() &&
+ "Main source file override should exist!");
+ SM.overrideFileContents(FM.getFile(MainFileName),
+ llvm::MemoryBuffer::getMemBuffer(MainFileOverride));
+}
diff --git a/clang-tools-extra/cpp11-migrate/Core/FileOverrides.h b/clang-tools-extra/cpp11-migrate/Core/FileOverrides.h
new file mode 100644
index 00000000000..d33cddf4c50
--- /dev/null
+++ b/clang-tools-extra/cpp11-migrate/Core/FileOverrides.h
@@ -0,0 +1,44 @@
+//===-- Core/FileOverrides.h ------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// \brief This file provides types and functionality for dealing with source
+/// and header file content overrides.
+///
+//===----------------------------------------------------------------------===//
+#ifndef CPP11_MIGRATE_FILE_OVERRIDES_H
+#define CPP11_MIGRATE_FILE_OVERRIDES_H
+
+#include <map>
+#include <string>
+
+// Forward Declarations
+namespace clang {
+class SourceManager;
+class FileManager;
+} // namespace clang
+
+
+/// \brief Container storing the file content overrides for a source file.
+struct SourceOverrides {
+ SourceOverrides(const char *MainFileName)
+ : MainFileName(MainFileName) {}
+
+ /// \brief Convenience function for applying this source's overrides to
+ /// the given SourceManager.
+ void applyOverrides(clang::SourceManager &SM, clang::FileManager &FM) const;
+
+ std::string MainFileName;
+ std::string MainFileOverride;
+};
+
+/// \brief Maps source file names to content override information.
+typedef std::map<std::string, SourceOverrides> FileOverrides;
+
+#endif // CPP11_MIGRATE_FILE_OVERRIDES_H
diff --git a/clang-tools-extra/cpp11-migrate/Core/SyntaxCheck.cpp b/clang-tools-extra/cpp11-migrate/Core/SyntaxCheck.cpp
new file mode 100644
index 00000000000..65877668ee4
--- /dev/null
+++ b/clang-tools-extra/cpp11-migrate/Core/SyntaxCheck.cpp
@@ -0,0 +1,59 @@
+#include "SyntaxCheck.h"
+#include "clang/Frontend/CompilerInstance.h"
+#include "clang/Frontend/FrontendActions.h"
+#include "clang/Tooling/Tooling.h"
+
+using namespace clang;
+using namespace tooling;
+
+class SyntaxCheck : public SyntaxOnlyAction {
+public:
+ SyntaxCheck(const FileOverrides &Overrides) : Overrides(Overrides) {}
+
+ virtual bool BeginSourceFileAction(CompilerInstance &CI, StringRef Filename) {
+ if (!SyntaxOnlyAction::BeginSourceFileAction(CI, Filename))
+ return false;
+
+ FileOverrides::const_iterator I = Overrides.find(Filename);
+ if (I != Overrides.end())
+ I->second.applyOverrides(CI.getSourceManager(), CI.getFileManager());
+
+ return true;
+ }
+
+private:
+ const FileOverrides &Overrides;
+};
+
+class SyntaxCheckFactory : public FrontendActionFactory {
+public:
+ SyntaxCheckFactory(const FileOverrides &Overrides)
+ : Overrides(Overrides) {}
+
+ virtual FrontendAction *create() { return new SyntaxCheck(Overrides); }
+
+private:
+ const FileOverrides &Overrides;
+};
+
+class SyntaxArgumentsAdjuster : public ArgumentsAdjuster {
+ CommandLineArguments Adjust(const CommandLineArguments &Args) {
+ CommandLineArguments AdjustedArgs = Args;
+ AdjustedArgs.push_back("-fsyntax-only");
+ AdjustedArgs.push_back("-std=c++11");
+ return AdjustedArgs;
+ }
+};
+
+bool doSyntaxCheck(const CompilationDatabase &Database,
+ const std::vector<std::string> &SourcePaths,
+ const FileOverrides &Overrides) {
+ ClangTool SyntaxTool(Database, SourcePaths);
+
+ // Ensure C++11 support is enabled.
+ // FIXME: This isn't necessary anymore since the Migrator requires C++11
+ // to be enabled in the CompilationDatabase. Remove later.
+ SyntaxTool.setArgumentsAdjuster(new SyntaxArgumentsAdjuster);
+
+ return SyntaxTool.run(new SyntaxCheckFactory(Overrides)) == 0;
+}
diff --git a/clang-tools-extra/cpp11-migrate/Core/SyntaxCheck.h b/clang-tools-extra/cpp11-migrate/Core/SyntaxCheck.h
new file mode 100644
index 00000000000..570f955a8bf
--- /dev/null
+++ b/clang-tools-extra/cpp11-migrate/Core/SyntaxCheck.h
@@ -0,0 +1,35 @@
+//===-- Core/SyntaxCheck.h --------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// \brief This file exposes functionaliy for doing a syntax-only check on
+/// files with overridden contents.
+///
+//===----------------------------------------------------------------------===//
+#ifndef CPP11_MIGRATE_SYNTAX_CHECK_H
+#define CPP11_MIGRATE_SYNTAX_CHECK_H
+
+#include <vector>
+#include "Core/FileOverrides.h"
+
+// Forward Declarations
+namespace clang {
+namespace tooling {
+class CompilationDatabase;
+} // namespace tooling
+} // namespace clang
+
+/// \brief Perform a syntax-only check over all files in \c SourcePaths using
+/// options provided by \c Database using file contents from \c Overrides if
+/// available.
+extern bool doSyntaxCheck(const clang::tooling::CompilationDatabase &Database,
+ const std::vector<std::string> &SourcePaths,
+ const FileOverrides &Overrides);
+
+#endif // CPP11_MIGRATE_SYNTAX_CHECK_H
diff --git a/clang-tools-extra/cpp11-migrate/Core/Transform.cpp b/clang-tools-extra/cpp11-migrate/Core/Transform.cpp
index 718ed0785ad..3a054e330df 100644
--- a/clang-tools-extra/cpp11-migrate/Core/Transform.cpp
+++ b/clang-tools-extra/cpp11-migrate/Core/Transform.cpp
@@ -1,7 +1,5 @@
#include "Core/Transform.h"
#include "clang/ASTMatchers/ASTMatchFinder.h"
-#include "clang/Basic/FileManager.h"
-#include "clang/Basic/SourceManager.h"
#include "clang/Frontend/CompilerInstance.h"
#include "clang/Rewrite/Core/Rewriter.h"
#include "llvm/Support/raw_ostream.h"
@@ -22,7 +20,7 @@ using namespace ast_matchers;
/// SourceFileCallbacks.
class ActionFactory : public clang::tooling::FrontendActionFactory {
public:
- ActionFactory(MatchFinder &Finder, const FileContentsByPath &Overrides,
+ ActionFactory(MatchFinder &Finder, const FileOverrides &Overrides,
SourceFileCallbacks &Callbacks)
: Finder(Finder), Overrides(Overrides), Callbacks(Callbacks) {}
@@ -33,7 +31,7 @@ public:
private:
class FactoryAdaptor : public ASTFrontendAction {
public:
- FactoryAdaptor(MatchFinder &Finder, const FileContentsByPath &Overrides,
+ FactoryAdaptor(MatchFinder &Finder, const FileOverrides &Overrides,
SourceFileCallbacks &Callbacks)
: Finder(Finder), Overrides(Overrides), Callbacks(Callbacks) {}
@@ -46,12 +44,10 @@ private:
if (!ASTFrontendAction::BeginSourceFileAction(CI, Filename))
return false;
- FileContentsByPath::const_iterator I = Overrides.find(Filename.str());
- if (I != Overrides.end())
- // If an override exists, use it.
- CI.getSourceManager()
- .overrideFileContents(CI.getFileManager().getFile(I->first),
- llvm::MemoryBuffer::getMemBuffer(I->second));
+ FileOverrides::const_iterator I = Overrides.find(Filename.str());
+ if (I != Overrides.end()) {
+ I->second.applyOverrides(CI.getSourceManager(), CI.getFileManager());
+ }
return Callbacks.handleBeginSource(CI, Filename);
}
@@ -63,38 +59,34 @@ private:
private:
MatchFinder &Finder;
- const FileContentsByPath &Overrides;
+ const FileOverrides &Overrides;
SourceFileCallbacks &Callbacks;
};
MatchFinder &Finder;
- const FileContentsByPath &Overrides;
+ const FileOverrides &Overrides;
SourceFileCallbacks &Callbacks;
};
} // namespace
RewriterContainer::RewriterContainer(clang::FileManager &Files,
- const FileContentsByPath &InputStates)
+ const FileOverrides &InputStates)
: DiagOpts(new clang::DiagnosticOptions()),
DiagnosticPrinter(llvm::errs(), DiagOpts.getPtr()),
Diagnostics(llvm::IntrusiveRefCntPtr<clang::DiagnosticIDs>(
new clang::DiagnosticIDs()),
DiagOpts.getPtr(), &DiagnosticPrinter, false),
Sources(Diagnostics, Files), Rewrite(Sources, DefaultLangOptions) {
-
- // Overwrite source manager's file contents with data from InputStates
- for (FileContentsByPath::const_iterator I = InputStates.begin(),
- E = InputStates.end();
- I != E; ++I) {
- Sources.overrideFileContents(Files.getFile(I->first),
- llvm::MemoryBuffer::getMemBuffer(I->second));
- }
+ for (FileOverrides::const_iterator I = InputStates.begin(),
+ E = InputStates.end();
+ I != E; ++I)
+ I->second.applyOverrides(Sources, Files);
}
void collectResults(clang::Rewriter &Rewrite,
- const FileContentsByPath &InputStates,
- FileContentsByPath &Results) {
+ const FileOverrides &InputStates,
+ FileOverrides &Results) {
// Copy the contents of InputStates to be modified.
Results = InputStates;
@@ -106,6 +98,12 @@ void collectResults(clang::Rewriter &Rewrite,
assert(Entry->getName() != 0 &&
"Unexpected NULL return from FileEntry::getName()");
+ FileOverrides::iterator OverrideI = Results.find(Entry->getName());
+ if (OverrideI == Results.end()) {
+ OverrideI = Results.insert(FileOverrides::value_type(
+ Entry->getName(), Entry->getName())).first;
+ }
+
std::string ResultBuf;
// Get a copy of the rewritten buffer from the Rewriter.
@@ -118,7 +116,7 @@ void collectResults(clang::Rewriter &Rewrite,
// FIXME: Use move semantics to avoid copies of the buffer contents if
// benchmarking shows the copies are expensive, especially for large source
// files.
- Results[Entry->getName()] = ResultBuf;
+ OverrideI->second.MainFileOverride = ResultBuf;
}
}
@@ -144,6 +142,6 @@ void Transform::addTiming(llvm::StringRef Label, llvm::TimeRecord Duration) {
FrontendActionFactory *
Transform::createActionFactory(MatchFinder &Finder,
- const FileContentsByPath &InputStates) {
+ const FileOverrides &InputStates) {
return new ActionFactory(Finder, InputStates, *this);
}
diff --git a/clang-tools-extra/cpp11-migrate/Core/Transform.h b/clang-tools-extra/cpp11-migrate/Core/Transform.h
index 1312cf42ed6..d990b4ec65c 100644
--- a/clang-tools-extra/cpp11-migrate/Core/Transform.h
+++ b/clang-tools-extra/cpp11-migrate/Core/Transform.h
@@ -17,7 +17,9 @@
#include <string>
#include <vector>
-#include "IncludeExcludeInfo.h"
+#include "Core/IncludeExcludeInfo.h"
+#include "Core/FileOverrides.h"
+#include "clang/ASTMatchers/ASTMatchFinder.h"
#include "clang/Tooling/Tooling.h"
#include "llvm/Support/Timer.h"
@@ -54,9 +56,6 @@ class MatchFinder;
} // namespace ast_matchers
} // namespace clang
-/// \brief The key is the path of a file, which is mapped to a
-/// buffer with the possibly modified contents of that file.
-typedef std::map<std::string, std::string> FileContentsByPath;
/// \brief In \p Results place copies of the buffers resulting from applying
/// all rewrites represented by \p Rewrite.
@@ -64,8 +63,8 @@ typedef std::map<std::string, std::string> FileContentsByPath;
/// \p Results is made up of pairs {filename, buffer contents}. Pairs are
/// simply appended to \p Results.
void collectResults(clang::Rewriter &Rewrite,
- const FileContentsByPath &InputStates,
- FileContentsByPath &Results);
+ const FileOverrides &InputStates,
+ FileOverrides &Results);
/// \brief Class for containing a Rewriter instance and all of
/// its lifetime dependencies.
@@ -80,7 +79,7 @@ void collectResults(clang::Rewriter &Rewrite,
class RewriterContainer {
public:
RewriterContainer(clang::FileManager &Files,
- const FileContentsByPath &InputStates);
+ const FileOverrides &InputStates);
clang::Rewriter &getRewriter() { return Rewrite; }
@@ -140,10 +139,10 @@ public:
/// SourcePaths and should take precedence over content of files on disk.
/// Upon return, \p ResultStates shall contain the result of performing this
/// transform on the files listed in \p SourcePaths.
- virtual int apply(const FileContentsByPath &InputStates,
+ virtual int apply(const FileOverrides &InputStates,
const clang::tooling::CompilationDatabase &Database,
const std::vector<std::string> &SourcePaths,
- FileContentsByPath &ResultStates) = 0;
+ FileOverrides &ResultStates) = 0;
/// \brief Query if changes were made during the last call to apply().
bool getChangesMade() const { return AcceptedChanges > 0; }
@@ -225,7 +224,7 @@ protected:
/// for overriding source file contents with results of previous transforms.
clang::tooling::FrontendActionFactory *
createActionFactory(clang::ast_matchers::MatchFinder &Finder,
- const FileContentsByPath &InputStates);
+ const FileOverrides &InputStates);
private:
const std::string Name;
diff --git a/clang-tools-extra/cpp11-migrate/LoopConvert/LoopConvert.cpp b/clang-tools-extra/cpp11-migrate/LoopConvert/LoopConvert.cpp
index 355dfa362e1..4c6a98b8c6a 100644
--- a/clang-tools-extra/cpp11-migrate/LoopConvert/LoopConvert.cpp
+++ b/clang-tools-extra/cpp11-migrate/LoopConvert/LoopConvert.cpp
@@ -25,10 +25,10 @@ using clang::ast_matchers::MatchFinder;
using namespace clang::tooling;
using namespace clang;
-int LoopConvertTransform::apply(const FileContentsByPath &InputStates,
+int LoopConvertTransform::apply(const FileOverrides &InputStates,
const CompilationDatabase &Database,
const std::vector<std::string> &SourcePaths,
- FileContentsByPath &ResultStates) {
+ FileOverrides &ResultStates) {
RefactoringTool LoopTool(Database, SourcePaths);
StmtAncestorASTVisitor ParentFinder;
diff --git a/clang-tools-extra/cpp11-migrate/LoopConvert/LoopConvert.h b/clang-tools-extra/cpp11-migrate/LoopConvert/LoopConvert.h
index 9dfff55be15..07d2f571e1b 100644
--- a/clang-tools-extra/cpp11-migrate/LoopConvert/LoopConvert.h
+++ b/clang-tools-extra/cpp11-migrate/LoopConvert/LoopConvert.h
@@ -27,10 +27,10 @@ public:
: Transform("LoopConvert", Options) {}
/// \see Transform::run().
- virtual int apply(const FileContentsByPath &InputStates,
+ virtual int apply(const FileOverrides &InputStates,
const clang::tooling::CompilationDatabase &Database,
const std::vector<std::string> &SourcePaths,
- FileContentsByPath &ResultStates) LLVM_OVERRIDE;
+ FileOverrides &ResultStates) LLVM_OVERRIDE;
};
#endif // LLVM_TOOLS_CLANG_TOOLS_EXTRA_CPP11_MIGRATE_LOOP_CONVERT_H
diff --git a/clang-tools-extra/cpp11-migrate/UseAuto/UseAuto.cpp b/clang-tools-extra/cpp11-migrate/UseAuto/UseAuto.cpp
index 2a76b304ad5..67ed968420f 100644
--- a/clang-tools-extra/cpp11-migrate/UseAuto/UseAuto.cpp
+++ b/clang-tools-extra/cpp11-migrate/UseAuto/UseAuto.cpp
@@ -20,10 +20,10 @@ using clang::ast_matchers::MatchFinder;
using namespace clang;
using namespace clang::tooling;
-int UseAutoTransform::apply(const FileContentsByPath &InputStates,
+int UseAutoTransform::apply(const FileOverrides &InputStates,
const clang::tooling::CompilationDatabase &Database,
const std::vector<std::string> &SourcePaths,
- FileContentsByPath &ResultStates) {
+ FileOverrides &ResultStates) {
RefactoringTool UseAutoTool(Database, SourcePaths);
unsigned AcceptedChanges = 0;
diff --git a/clang-tools-extra/cpp11-migrate/UseAuto/UseAuto.h b/clang-tools-extra/cpp11-migrate/UseAuto/UseAuto.h
index b3bcc41b8e3..ae5328d2f72 100644
--- a/clang-tools-extra/cpp11-migrate/UseAuto/UseAuto.h
+++ b/clang-tools-extra/cpp11-migrate/UseAuto/UseAuto.h
@@ -32,10 +32,10 @@ public:
UseAutoTransform(const TransformOptions &Options) : Transform("UseAuto", Options) {}
/// \see Transform::run().
- virtual int apply(const FileContentsByPath &InputStates,
+ virtual int apply(const FileOverrides &InputStates,
const clang::tooling::CompilationDatabase &Database,
const std::vector<std::string> &SourcePaths,
- FileContentsByPath &ResultStates) LLVM_OVERRIDE;
+ FileOverrides &ResultStates) LLVM_OVERRIDE;
};
#endif // LLVM_TOOLS_CLANG_TOOLS_EXTRA_CPP11_MIGRATE_USE_AUTO_H
diff --git a/clang-tools-extra/cpp11-migrate/UseNullptr/UseNullptr.cpp b/clang-tools-extra/cpp11-migrate/UseNullptr/UseNullptr.cpp
index fa5811bae3b..48c1bbd782f 100644
--- a/clang-tools-extra/cpp11-migrate/UseNullptr/UseNullptr.cpp
+++ b/clang-tools-extra/cpp11-migrate/UseNullptr/UseNullptr.cpp
@@ -25,10 +25,10 @@ using clang::ast_matchers::MatchFinder;
using namespace clang::tooling;
using namespace clang;
-int UseNullptrTransform::apply(const FileContentsByPath &InputStates,
+int UseNullptrTransform::apply(const FileOverrides &InputStates,
const CompilationDatabase &Database,
const std::vector<std::string> &SourcePaths,
- FileContentsByPath &ResultStates) {
+ FileOverrides &ResultStates) {
RefactoringTool UseNullptrTool(Database, SourcePaths);
unsigned AcceptedChanges = 0;
diff --git a/clang-tools-extra/cpp11-migrate/UseNullptr/UseNullptr.h b/clang-tools-extra/cpp11-migrate/UseNullptr/UseNullptr.h
index 5b8328b942c..ae4a5f0e121 100644
--- a/clang-tools-extra/cpp11-migrate/UseNullptr/UseNullptr.h
+++ b/clang-tools-extra/cpp11-migrate/UseNullptr/UseNullptr.h
@@ -27,10 +27,10 @@ public:
: Transform("UseNullptr", Options) {}
/// \see Transform::run().
- virtual int apply(const FileContentsByPath &InputStates,
+ virtual int apply(const FileOverrides &InputStates,
const clang::tooling::CompilationDatabase &Database,
const std::vector<std::string> &SourcePaths,
- FileContentsByPath &ResultStates) LLVM_OVERRIDE;
+ FileOverrides &ResultStates) LLVM_OVERRIDE;
};
#endif // LLVM_TOOLS_CLANG_TOOLS_EXTRA_CPP11_MIGRATE_USE_NULLPTR_H
diff --git a/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp b/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp
index da9edb460af..26c2ac4bfa2 100644
--- a/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp
+++ b/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp
@@ -15,6 +15,7 @@
///
//===----------------------------------------------------------------------===//
+#include "Core/SyntaxCheck.h"
#include "Core/Transforms.h"
#include "Core/Transform.h"
#include "Core/PerfSupport.h"
@@ -88,15 +89,6 @@ static cl::opt<bool, /*ExternalStorage=*/true> EnableHeaderModifications(
cl::location(GlobalOptions.EnableHeaderModifications),
cl::init(false));
-class EndSyntaxArgumentsAdjuster : public ArgumentsAdjuster {
- CommandLineArguments Adjust(const CommandLineArguments &Args) {
- CommandLineArguments AdjustedArgs = Args;
- AdjustedArgs.push_back("-fsyntax-only");
- AdjustedArgs.push_back("-std=c++11");
- return AdjustedArgs;
- }
-};
-
int main(int argc, const char **argv) {
llvm::sys::PrintStackTraceOnErrorSignal();
Transforms TransformManager;
@@ -138,7 +130,7 @@ int main(int argc, const char **argv) {
return 1;
}
- FileContentsByPath FileStates1, FileStates2,
+ FileOverrides FileStates1, FileStates2,
*InputFileStates = &FileStates1, *OutputFileStates = &FileStates2;
SourcePerfData PerfData;
@@ -173,35 +165,20 @@ int main(int argc, const char **argv) {
OutputFileStates->clear();
}
- // Final state of files is pointed at by InputFileStates.
-
- if (FinalSyntaxCheck) {
- ClangTool EndSyntaxTool(OptionsParser.getCompilations(),
- OptionsParser.getSourcePathList());
-
- // Add c++11 support to clang.
- EndSyntaxTool.setArgumentsAdjuster(new EndSyntaxArgumentsAdjuster);
-
- for (FileContentsByPath::const_iterator I = InputFileStates->begin(),
- E = InputFileStates->end();
- I != E; ++I) {
- EndSyntaxTool.mapVirtualFile(I->first, I->second);
- }
-
- if (EndSyntaxTool.run(newFrontendActionFactory<clang::SyntaxOnlyAction>())
- != 0) {
+ if (FinalSyntaxCheck)
+ // Final state of files is pointed at by InputFileStates.
+ if (!doSyntaxCheck(OptionsParser.getCompilations(),
+ OptionsParser.getSourcePathList(), *InputFileStates))
return 1;
- }
- }
// Write results to file.
- for (FileContentsByPath::const_iterator I = InputFileStates->begin(),
- E = InputFileStates->end();
+ for (FileOverrides::const_iterator I = InputFileStates->begin(),
+ E = InputFileStates->end();
I != E; ++I) {
std::string ErrorInfo;
llvm::raw_fd_ostream FileStream(I->first.c_str(), ErrorInfo,
llvm::raw_fd_ostream::F_Binary);
- FileStream << I->second;
+ FileStream << I->second.MainFileOverride;
}
// Report execution times.
diff --git a/clang-tools-extra/unittests/cpp11-migrate/PerfSupportTest.cpp b/clang-tools-extra/unittests/cpp11-migrate/PerfSupportTest.cpp
index 21f296068fe..f947b10ca8e 100644
--- a/clang-tools-extra/unittests/cpp11-migrate/PerfSupportTest.cpp
+++ b/clang-tools-extra/unittests/cpp11-migrate/PerfSupportTest.cpp
@@ -9,9 +9,9 @@ public:
TransformA(const TransformOptions &Options)
: Transform("TransformA", Options) {}
- virtual int apply(const FileContentsByPath &,
+ virtual int apply(const FileOverrides &,
const tooling::CompilationDatabase &,
- const std::vector<std::string> &, FileContentsByPath &) {
+ const std::vector<std::string> &, FileOverrides &) {
return 0;
}
@@ -25,9 +25,9 @@ public:
TransformB(const TransformOptions &Options)
: Transform("TransformB", Options) {}
- virtual int apply(const FileContentsByPath &,
+ virtual int apply(const FileOverrides &,
const tooling::CompilationDatabase &,
- const std::vector<std::string> &, FileContentsByPath &) {
+ const std::vector<std::string> &, FileOverrides &) {
return 0;
}
diff --git a/clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp b/clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp
index cdb665a84c8..2a5689898a4 100644
--- a/clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp
+++ b/clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp
@@ -13,10 +13,10 @@ public:
DummyTransform(llvm::StringRef Name, const TransformOptions &Options)
: Transform(Name, Options) {}
- virtual int apply(const FileContentsByPath &,
+ virtual int apply(const FileOverrides &,
const tooling::CompilationDatabase &,
const std::vector<std::string> &,
- FileContentsByPath &) { return 0; }
+ FileOverrides &) { return 0; }
void setAcceptedChanges(unsigned Changes) {
Transform::setAcceptedChanges(Changes);
OpenPOWER on IntegriCloud