diff --git a/clang/lib/Analysis/LifetimePsetBuilder.cpp b/clang/lib/Analysis/LifetimePsetBuilder.cpp index 4c7104c013389c..80205cccac1f50 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 &&