loplugin useuniqueptr improvement
passing owning pointers to constructors Change-Id: I4e64cabbf449393b77162a845b3138be415e2dc9 Reviewed-on: https://gerrit.libreoffice.org/59346 Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Tested-by: Noel Grandin <noel.grandin@collabora.co.uk>
This commit is contained in:
@@ -124,6 +124,8 @@ public:
|
||||
bool VisitCompoundStmt(const CompoundStmt* );
|
||||
bool VisitCXXDeleteExpr(const CXXDeleteExpr* );
|
||||
bool TraverseFunctionDecl(FunctionDecl* );
|
||||
bool TraverseConstructorInitializer(CXXCtorInitializer*);
|
||||
|
||||
private:
|
||||
void CheckCompoundStmt(const CXXMethodDecl*, const CompoundStmt* );
|
||||
void CheckForUnconditionalDelete(const CXXMethodDecl*, const CompoundStmt* );
|
||||
@@ -532,6 +534,28 @@ bool UseUniquePtr::VisitCXXDeleteExpr(const CXXDeleteExpr* deleteExpr)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool UseUniquePtr::TraverseConstructorInitializer(CXXCtorInitializer * ctorInit)
|
||||
{
|
||||
if (!ctorInit->getSourceLocation().isValid() || ignoreLocation(ctorInit->getSourceLocation()))
|
||||
return true;
|
||||
if (!ctorInit->getMember())
|
||||
return true;
|
||||
if (!loplugin::TypeCheck(ctorInit->getMember()->getType()).Class("unique_ptr").StdNamespace())
|
||||
return true;
|
||||
auto constructExpr = dyn_cast<CXXConstructExpr>(ctorInit->getInit());
|
||||
if (!constructExpr)
|
||||
return true;
|
||||
auto init = constructExpr->getArg(0)->IgnoreImpCasts();
|
||||
if (!isa<DeclRefExpr>(init))
|
||||
return true;
|
||||
report(
|
||||
DiagnosticsEngine::Warning,
|
||||
"should be passing via std::unique_ptr param",
|
||||
ctorInit->getSourceLocation())
|
||||
<< ctorInit->getSourceRange();
|
||||
return RecursiveASTVisitor<UseUniquePtr>::TraverseConstructorInitializer(ctorInit);
|
||||
}
|
||||
|
||||
loplugin::Plugin::Registration< UseUniquePtr > X("useuniqueptr", false);
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user