[Libreoffice-commits] core.git: compilerplugins/clang

Stephan Bergmann sbergman at redhat.com
Thu Sep 28 16:35:26 UTC 2017


 compilerplugins/clang/vclwidgets.cxx |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

New commits:
commit 812ee8c53f9add746f67e4785831ad0d42937942
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Thu Sep 28 18:31:53 2017 +0200

    Look through derived-to-base ImpliciCast
    
    ...as happens on Windows when looking at
    
      maControlToPropertyMap.clear();
    
    in PrintDialog::dispose (vcl/source/window/printdlg.cxx), where std::map's clear
    happens to be declared at some base class std::_Tree.
    
    Change-Id: I41810514bca59af8b4f2812d9412ce6a8d43576c

diff --git a/compilerplugins/clang/vclwidgets.cxx b/compilerplugins/clang/vclwidgets.cxx
index c7695cfb5722..1a9589d2e40d 100644
--- a/compilerplugins/clang/vclwidgets.cxx
+++ b/compilerplugins/clang/vclwidgets.cxx
@@ -569,8 +569,8 @@ static void findDisposeAndClearStatements(std::set<const FieldDecl*>& aVclPtrFie
     const MemberExpr *pCalleeMemberExpr = dyn_cast<MemberExpr>(pCallExpr->getCallee());
 
     if (!pCalleeMemberExpr->getBase()) return;
-    if (!isa<MemberExpr>(pCalleeMemberExpr->getBase())) return;
-    const MemberExpr *pCalleeMemberExprBase = dyn_cast<MemberExpr>(pCalleeMemberExpr->getBase());
+    const MemberExpr *pCalleeMemberExprBase = dyn_cast<MemberExpr>(pCalleeMemberExpr->getBase()->IgnoreImpCasts());
+    if (pCalleeMemberExprBase == nullptr) return;
 
     const FieldDecl* xxx = dyn_cast_or_null<FieldDecl>(pCalleeMemberExprBase->getMemberDecl());
     if (xxx)


More information about the Libreoffice-commits mailing list