Port loop-convert into cpp11-migrate
Took existing code from loop-convert tool and made it into a cpp11-migrate
transform. Pattern now set for having transform code in subdirectories. Related
changes:
- Makefile and CMakeLists.txt updated to support source files in
subdirectories.
- At least one transform must be specified. syntax-only tests removed to
reflect this.
- TODO: port over loop-convert tests.
Reviewers: klimek, silvas
llvm-svn: 171481
diff --git a/clang-tools-extra/cpp11-migrate/Cpp11Migrate.cpp b/clang-tools-extra/cpp11-migrate/Cpp11Migrate.cpp
index 7bd4cbd..08ae3e0d 100644
--- a/clang-tools-extra/cpp11-migrate/Cpp11Migrate.cpp
+++ b/clang-tools-extra/cpp11-migrate/Cpp11Migrate.cpp
@@ -27,21 +27,44 @@
///
//===----------------------------------------------------------------------===//
-#include "clang/Basic/FileManager.h"
-#include "clang/Frontend/CompilerInstance.h"
#include "clang/Frontend/FrontendActions.h"
#include "clang/Tooling/CommonOptionsParser.h"
-#include "clang/Tooling/Refactoring.h"
#include "clang/Tooling/Tooling.h"
+#include "Transforms.h"
+#include "Transform.h"
namespace cl = llvm::cl;
using namespace clang::tooling;
+static cl::opt<RiskLevel>
+MaxRiskLevel("risk", cl::desc("Select a maximum risk level:"),
+ cl::values(
+ clEnumValN(RL_Safe, "safe", "Only safe transformations"),
+ clEnumValN(RL_Reasonable, "reasonable",
+ "Enable transformations that might change "
+ "semantics (default)"),
+ clEnumValN(RL_Risky, "risky",
+ "Enable transformations that are likely to "
+ "change semantics"),
+ clEnumValEnd),
+ cl::init(RL_Reasonable));
int main(int argc, const char **argv) {
+ Transforms TransformManager;
+
+ TransformManager.createTransformOpts();
+
+ // This causes options to be parsed.
CommonOptionsParser OptionsParser(argc, argv);
- // TODO: Create transforms requested by command-line.
+ TransformManager.createSelectedTransforms();
+
+ if (TransformManager.begin() == TransformManager.end()) {
+ llvm::errs() << "No selected transforms\n";
+ return 1;
+ }
+
+ // Initial syntax check.
ClangTool SyntaxTool(OptionsParser.getCompilations(),
OptionsParser.getSourcePathList());
@@ -51,7 +74,23 @@
return 1;
}
- // TODO: Apply transforms
+ // Apply transforms.
+ for (Transforms::const_iterator I = TransformManager.begin(),
+ E = TransformManager.end(); I != E; ++I) {
+ if ((*I)->apply(MaxRiskLevel, OptionsParser.getCompilations(),
+ OptionsParser.getSourcePathList()) != 0) {
+ return 1;
+ }
+ }
+
+ // Final Syntax check.
+ ClangTool EndSyntaxTool(OptionsParser.getCompilations(),
+ OptionsParser.getSourcePathList());
+ if (EndSyntaxTool.run(
+ newFrontendActionFactory<clang::SyntaxOnlyAction>()) != 0) {
+ // FIXME: Revert changes made to files that fail the syntax test.
+ return 1;
+ }
return 0;
}