summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNico Weber <nicolasweber@gmx.de>2014-04-28 04:57:14 +0000
committerNico Weber <nicolasweber@gmx.de>2014-04-28 04:57:14 +0000
commit10bf95d61b7d545b14f79c28f9790ab47b9eaf41 (patch)
tree8808484c522475049b660bc9f11da157754e7c18
parenta41d48cac8d29187a5b1421646ed1250e57be434 (diff)
downloadbcm5719-llvm-10bf95d61b7d545b14f79c28f9790ab47b9eaf41.tar.gz
bcm5719-llvm-10bf95d61b7d545b14f79c28f9790ab47b9eaf41.zip
Follow-up to r207071: Let newFrontendActionFactory() return a unique_ptr.
This exposed a leak, fix that. llvm-svn: 207396
-rw-r--r--clang/include/clang/Tooling/Tooling.h18
-rw-r--r--clang/tools/clang-check/ClangCheck.cpp4
2 files changed, 12 insertions, 10 deletions
diff --git a/clang/include/clang/Tooling/Tooling.h b/clang/include/clang/Tooling/Tooling.h
index ece38fc7e74..a0d6cb789cf 100644
--- a/clang/include/clang/Tooling/Tooling.h
+++ b/clang/include/clang/Tooling/Tooling.h
@@ -97,7 +97,7 @@ public:
/// FrontendActionFactory *Factory =
/// newFrontendActionFactory<clang::SyntaxOnlyAction>();
template <typename T>
-FrontendActionFactory *newFrontendActionFactory();
+std::unique_ptr<FrontendActionFactory> newFrontendActionFactory();
/// \brief Callbacks called before and after each source file processed by a
/// FrontendAction created by the FrontedActionFactory returned by \c
@@ -126,10 +126,10 @@ public:
/// struct ProvidesASTConsumers {
/// clang::ASTConsumer *newASTConsumer();
/// } Factory;
-/// FrontendActionFactory *FactoryAdapter =
-/// newFrontendActionFactory(&Factory);
+/// std::unique_ptr<FrontendActionFactory> FactoryAdapter(
+/// newFrontendActionFactory(&Factory));
template <typename FactoryT>
-inline FrontendActionFactory *newFrontendActionFactory(
+inline std::unique_ptr<FrontendActionFactory> newFrontendActionFactory(
FactoryT *ConsumerFactory, SourceFileCallbacks *Callbacks = NULL);
/// \brief Runs (and deletes) the tool on 'Code' with the -fsyntax-only flag.
@@ -305,17 +305,18 @@ class ClangTool {
};
template <typename T>
-FrontendActionFactory *newFrontendActionFactory() {
+std::unique_ptr<FrontendActionFactory> newFrontendActionFactory() {
class SimpleFrontendActionFactory : public FrontendActionFactory {
public:
clang::FrontendAction *create() override { return new T; }
};
- return new SimpleFrontendActionFactory;
+ return std::unique_ptr<FrontendActionFactory>(
+ new SimpleFrontendActionFactory);
}
template <typename FactoryT>
-inline FrontendActionFactory *newFrontendActionFactory(
+inline std::unique_ptr<FrontendActionFactory> newFrontendActionFactory(
FactoryT *ConsumerFactory, SourceFileCallbacks *Callbacks) {
class FrontendActionFactoryAdapter : public FrontendActionFactory {
public:
@@ -362,7 +363,8 @@ inline FrontendActionFactory *newFrontendActionFactory(
SourceFileCallbacks *Callbacks;
};
- return new FrontendActionFactoryAdapter(ConsumerFactory, Callbacks);
+ return std::unique_ptr<FrontendActionFactory>(
+ new FrontendActionFactoryAdapter(ConsumerFactory, Callbacks));
}
/// \brief Returns the absolute path of \c File, by prepending it with
diff --git a/clang/tools/clang-check/ClangCheck.cpp b/clang/tools/clang-check/ClangCheck.cpp
index 4fc970c0d12..cc8d43cec22 100644
--- a/clang/tools/clang-check/ClangCheck.cpp
+++ b/clang/tools/clang-check/ClangCheck.cpp
@@ -215,7 +215,7 @@ int main(int argc, const char **argv) {
Analyze ? "--analyze" : "-fsyntax-only", InsertAdjuster::BEGIN));
clang_check::ClangCheckActionFactory CheckFactory;
- FrontendActionFactory *FrontendFactory;
+ std::unique_ptr<FrontendActionFactory> FrontendFactory;
// Choose the correct factory based on the selected mode.
if (Analyze)
@@ -225,5 +225,5 @@ int main(int argc, const char **argv) {
else
FrontendFactory = newFrontendActionFactory(&CheckFactory);
- return Tool.run(FrontendFactory);
+ return Tool.run(FrontendFactory.get());
}
OpenPOWER on IntegriCloud