compilerplugins/clang/makeshared.cxx | 13 +++++++++++++ 1 file changed, 13 insertions(+)
New commits: commit 4f294e6976287b936d59035c4fe74ce18d3f132c Author: Stephan Bergmann <sberg...@redhat.com> AuthorDate: Tue Aug 4 14:51:41 2020 +0200 Commit: Stephan Bergmann <sberg...@redhat.com> CommitDate: Tue Aug 4 18:47:10 2020 +0200 Avoid some unhelpful loplugin:makeshared ...like > canvas/source/directx/dx_impltools.cxx(137,31): error: rather use make_shared than constructing from 'Gdiplus::Graphics *' [loplugin:makeshared] > GraphicsSharedPtr pRet(Gdiplus::Graphics::FromImage(rBitmap.get())); > ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ on Windows, where those functions like FromImage are provided by Windows (so we can't help it that they are returning pointers) Change-Id: Iae5c4b20d64cc6b38ff66409519fbd25f6e509cd Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100095 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sberg...@redhat.com> diff --git a/compilerplugins/clang/makeshared.cxx b/compilerplugins/clang/makeshared.cxx index 9f12b6c3bd6b..9b512371d635 100644 --- a/compilerplugins/clang/makeshared.cxx +++ b/compilerplugins/clang/makeshared.cxx @@ -132,6 +132,19 @@ bool MakeShared::VisitCXXConstructExpr(CXXConstructExpr const* constructExpr) return true; else if (isa<CXXNullPtrLiteralExpr>(arg0)) return true; + else if (auto const call = dyn_cast<CallExpr>(arg0)) + { + if (auto const decl = call->getDirectCallee()) + { + // Don't warn about cases where e.g. the Bitmap* result of calling Windows' + // Bitmap::FromBITMAPINFO is wrapped in a shared_ptr: + if (decl->getReturnType()->isPointerType() + && compiler.getSourceManager().isInSystemHeader(decl->getLocation())) + { + return true; + } + } + } StringRef fn = getFilenameOfLocation( compiler.getSourceManager().getSpellingLoc(compat::getBeginLoc(constructExpr))); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits