diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2018-09-13 13:31:41 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2018-09-13 13:31:41 +0200 |
commit | b74db4138342f646fda061eac5d6759ecf2c366f (patch) | |
tree | 1aa3d0e941462c7da83500c3e4933c86db75d76b | |
parent | e06a1239371f14ef0ad84a4ddaa9309a601048da (diff) |
loplugin:simplifyconstruct exclude std::unique_ptr with custom deleter
Change-Id: I8f4ba883747a2aace88786ef807fd7c338bef5da
-rw-r--r-- | compilerplugins/clang/simplifyconstruct.cxx | 2 | ||||
-rw-r--r-- | compilerplugins/clang/test/simplifyconstruct.cxx | 21 |
2 files changed, 20 insertions, 3 deletions
diff --git a/compilerplugins/clang/simplifyconstruct.cxx b/compilerplugins/clang/simplifyconstruct.cxx index 2a80cdefe4b2..fd5ba5027d01 100644 --- a/compilerplugins/clang/simplifyconstruct.cxx +++ b/compilerplugins/clang/simplifyconstruct.cxx @@ -51,7 +51,7 @@ bool SimplifyConstruct::VisitCXXConstructExpr(CXXConstructExpr const* constructE .Namespace("com") .GlobalNamespace()) return true; - if (constructExpr->getNumArgs() > 0 + if (constructExpr->getNumArgs() == 1 && isa<CXXNullPtrLiteralExpr>(constructExpr->getArg(0)->IgnoreParenImpCasts())) { report(DiagnosticsEngine::Warning, diff --git a/compilerplugins/clang/test/simplifyconstruct.cxx b/compilerplugins/clang/test/simplifyconstruct.cxx index ce8a70aab272..3ff6ddf22c64 100644 --- a/compilerplugins/clang/test/simplifyconstruct.cxx +++ b/compilerplugins/clang/test/simplifyconstruct.cxx @@ -15,11 +15,11 @@ struct Foo void acquire(); void release(); }; -class Foo16 +class Foo1 { std::unique_ptr<int> m_pbar1; rtl::Reference<Foo> m_pbar2; - Foo16() + Foo1() : m_pbar1(nullptr) // expected-error@-1 {{no need to explicitly init this with nullptr, just use default constructor [loplugin:simplifyconstruct]}} , m_pbar2(nullptr) @@ -27,4 +27,21 @@ class Foo16 { } }; + +// no warning expected when using std::unique_ptr constructor with a custom deleter +struct ITypeLib +{ +}; +struct IUnknown +{ + void Release(); +}; +void func2() +{ + std::unique_ptr<IUnknown, void (*)(IUnknown * p)> aITypeLibGuard(nullptr, [](IUnknown* p) { + if (p) + p->Release(); + }); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ |