loplugin:simplifyconstruct exclude std::unique_ptr with custom deleter

Change-Id: I8f4ba883747a2aace88786ef807fd7c338bef5da
This commit is contained in:
Noel Grandin
2018-09-13 13:31:41 +02:00
parent e06a123937
commit b74db41383
2 changed files with 20 additions and 3 deletions

View File

@@ -51,7 +51,7 @@ bool SimplifyConstruct::VisitCXXConstructExpr(CXXConstructExpr const* constructE
.Namespace("com") .Namespace("com")
.GlobalNamespace()) .GlobalNamespace())
return true; return true;
if (constructExpr->getNumArgs() > 0 if (constructExpr->getNumArgs() == 1
&& isa<CXXNullPtrLiteralExpr>(constructExpr->getArg(0)->IgnoreParenImpCasts())) && isa<CXXNullPtrLiteralExpr>(constructExpr->getArg(0)->IgnoreParenImpCasts()))
{ {
report(DiagnosticsEngine::Warning, report(DiagnosticsEngine::Warning,

View File

@@ -15,11 +15,11 @@ struct Foo
void acquire(); void acquire();
void release(); void release();
}; };
class Foo16 class Foo1
{ {
std::unique_ptr<int> m_pbar1; std::unique_ptr<int> m_pbar1;
rtl::Reference<Foo> m_pbar2; rtl::Reference<Foo> m_pbar2;
Foo16() Foo1()
: m_pbar1(nullptr) : m_pbar1(nullptr)
// expected-error@-1 {{no need to explicitly init this with nullptr, just use default constructor [loplugin:simplifyconstruct]}} // expected-error@-1 {{no need to explicitly init this with nullptr, just use default constructor [loplugin:simplifyconstruct]}}
, m_pbar2(nullptr) , 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: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */