From 9ad7d125298152f88f73d64dbaf4ad6a013a65ca Mon Sep 17 00:00:00 2001 From: Lars Klein Date: Mon, 11 Nov 2019 22:53:28 +0100 Subject: [PATCH] [Issue #70] Initial version detecting release on std::unique_ptr --- clang/lib/Analysis/LifetimePsetBuilder.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/clang/lib/Analysis/LifetimePsetBuilder.cpp b/clang/lib/Analysis/LifetimePsetBuilder.cpp index 4c7104c013389..80205cccac1f5 100644 --- a/clang/lib/Analysis/LifetimePsetBuilder.cpp +++ b/clang/lib/Analysis/LifetimePsetBuilder.cpp @@ -633,6 +633,16 @@ class PSetsBuilder : public ConstStmtVisitor { if (!Callee) return; + if (auto MCE = dyn_cast(CallE)) { + const CXXRecordDecl *RD = MCE->getRecordDecl(); + StringRef ClassName = RD->getName(); + if (RD->isInStdNamespace() && ClassName.endswith("unique_ptr") && + Callee->getName() == "release") { + // TODO: Print warning/note to suggest to not use release on std::unique_ptr + return; + } + } + /// Special case for assignment of Pointer into Pointer: copy pset if (auto *OC = dyn_cast(CallE)) { if (OC->getOperator() == OO_Equal && OC->getNumArgs() == 2 &&