summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEdwin Vane <edwin.vane@intel.com>2013-04-05 19:18:13 +0000
committerEdwin Vane <edwin.vane@intel.com>2013-04-05 19:18:13 +0000
commit6b191b0195f1c2cf1b048662d0777ae8456070fc (patch)
treefc4317cd3a478a36f1d73bb4a35d97561af048a5
parent97a10e9f0461cf8e8e71f8b02dd354b446d8d2f1 (diff)
downloadbcm5719-llvm-6b191b0195f1c2cf1b048662d0777ae8456070fc.tar.gz
bcm5719-llvm-6b191b0195f1c2cf1b048662d0777ae8456070fc.zip
Fix symbol dependency errors introduced with libmigrateCore
With cpp11-migrate core functionality moved to a separate library (for enabling unit tests) this library contained code that referenced symbols that are still in the main binary. On some platforms, the shared library build broke as a result. This revision fixes the dependency problem and is safe for the eventual lib-ification of the transforms as well. llvm-svn: 178901
-rw-r--r--clang-tools-extra/cpp11-migrate/Core/Transforms.cpp34
-rw-r--r--clang-tools-extra/cpp11-migrate/Core/Transforms.h13
-rw-r--r--clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp14
3 files changed, 29 insertions, 32 deletions
diff --git a/clang-tools-extra/cpp11-migrate/Core/Transforms.cpp b/clang-tools-extra/cpp11-migrate/Core/Transforms.cpp
index 720d3880964..d7eae694870 100644
--- a/clang-tools-extra/cpp11-migrate/Core/Transforms.cpp
+++ b/clang-tools-extra/cpp11-migrate/Core/Transforms.cpp
@@ -13,17 +13,10 @@
//===----------------------------------------------------------------------===//
#include "Core/Transforms.h"
-#include "LoopConvert/LoopConvert.h"
-#include "UseNullptr/UseNullptr.h"
-#include "UseAuto/UseAuto.h"
+#include "Core/Transform.h"
namespace cl = llvm::cl;
-template <typename T>
-Transform *ConstructTransform() {
- return new T();
-}
-
Transforms::~Transforms() {
for (std::vector<Transform*>::iterator I = ChosenTransforms.begin(),
E = ChosenTransforms.end(); I != E; ++I) {
@@ -35,26 +28,11 @@ Transforms::~Transforms() {
}
}
-void Transforms::createTransformOpts() {
- Options.push_back(
- OptionVec::value_type(
- new cl::opt<bool>("loop-convert",
- cl::desc("Make use of range-based for loops where possible")),
- &ConstructTransform<LoopConvertTransform>));
-
- Options.push_back(
- OptionVec::value_type(
- new cl::opt<bool>("use-nullptr",
- cl::desc("Make use of nullptr keyword where possible")),
- &ConstructTransform<UseNullptrTransform>));
-
- Options.push_back(
- OptionVec::value_type(
- new cl::opt<bool>("use-auto",
- cl::desc("Use of 'auto' type specifier")),
- &ConstructTransform<UseAutoTransform>));
-
- // Add more transform options here.
+void Transforms::registerTransform(llvm::StringRef OptName,
+ llvm::StringRef Description,
+ TransformCreator Creator) {
+ Options.push_back(OptionVec::value_type(
+ new cl::opt<bool>(OptName.data(), cl::desc(Description.data())), Creator));
}
void Transforms::createSelectedTransforms() {
diff --git a/clang-tools-extra/cpp11-migrate/Core/Transforms.h b/clang-tools-extra/cpp11-migrate/Core/Transforms.h
index e660ccf9207..67e38b025c8 100644
--- a/clang-tools-extra/cpp11-migrate/Core/Transforms.h
+++ b/clang-tools-extra/cpp11-migrate/Core/Transforms.h
@@ -17,6 +17,7 @@
#define LLVM_TOOLS_CLANG_TOOLS_EXTRA_CPP11_MIGRATE_TRANSFORMS_H
#include "llvm/Support/CommandLine.h"
+#include "llvm/ADT/StringRef.h"
#include <vector>
// Forward declarations
@@ -28,6 +29,10 @@ class Option;
class Transform;
typedef Transform *(*TransformCreator)();
+template <typename T>
+Transform *ConstructTransform() {
+ return new T();
+}
/// \brief Class encapsulating the creation of command line bool options
/// for each transform and instantiating transforms chosen by the user.
@@ -40,10 +45,12 @@ public:
~Transforms();
- /// \brief Create command line options using LLVM's command line library.
+ /// \brief Registers a transform causing the transform to be made available
+ /// on the command line.
///
- /// Be sure to call *before* parsing options.
- void createTransformOpts();
+ /// Be sure to register all transforms *before* parsing command line options.
+ void registerTransform(llvm::StringRef OptName, llvm::StringRef Description,
+ TransformCreator Creator);
/// \brief Instantiate all transforms that were selected on the command line.
///
diff --git a/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp b/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp
index d8789466189..bddfe31c846 100644
--- a/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp
+++ b/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp
@@ -17,6 +17,9 @@
#include "Core/Transforms.h"
#include "Core/Transform.h"
+#include "LoopConvert/LoopConvert.h"
+#include "UseNullptr/UseNullptr.h"
+#include "UseAuto/UseAuto.h"
#include "clang/Frontend/FrontendActions.h"
#include "clang/Tooling/CommonOptionsParser.h"
#include "clang/Tooling/Tooling.h"
@@ -59,7 +62,16 @@ int main(int argc, const char **argv) {
llvm::sys::PrintStackTraceOnErrorSignal();
Transforms TransformManager;
- TransformManager.createTransformOpts();
+ TransformManager.registerTransform(
+ "loop-convert", "Make use of range-based for loops where possible",
+ &ConstructTransform<LoopConvertTransform>);
+ TransformManager.registerTransform(
+ "use-nullptr", "Make use of nullptr keyword where possible",
+ &ConstructTransform<UseNullptrTransform>);
+ TransformManager.registerTransform(
+ "use-auto", "Use of 'auto' type specifier",
+ &ConstructTransform<UseAutoTransform>);
+ // Add more transform options here.
// This causes options to be parsed.
CommonOptionsParser OptionsParser(argc, argv);
OpenPOWER on IntegriCloud