[Libreoffice-commits] core.git: 2 commits - compilerplugins/clang
Noel Grandin
noel at peralex.com
Thu May 7 02:19:20 PDT 2015
compilerplugins/clang/vclwidgets.cxx | 25 +++++++++++++++++--------
1 file changed, 17 insertions(+), 8 deletions(-)
New commits:
commit 08967d36ba0da5bf85e52ff64f41732a12b37a2e
Author: Noel Grandin <noel at peralex.com>
Date: Thu May 7 11:18:25 2015 +0200
workaround for clang3.2 in vclwidgets clang plugin
Change-Id: I7ac67dd14d14a93fe163febe0f18df56dd613376
diff --git a/compilerplugins/clang/vclwidgets.cxx b/compilerplugins/clang/vclwidgets.cxx
index 2e7d4eb..a09f8db 100644
--- a/compilerplugins/clang/vclwidgets.cxx
+++ b/compilerplugins/clang/vclwidgets.cxx
@@ -186,16 +186,25 @@ bool VCLWidgets::VisitCXXDestructorDecl(const CXXDestructorDecl* pCXXDestructorD
}
// check that the destructor for a OutputDevice subclass does nothing except call into the disposeOnce() method
bool ok = false;
- if (pCompoundStatement && pCompoundStatement->size() == 1) {
- const CXXMemberCallExpr *pCallExpr = dyn_cast<CXXMemberCallExpr>(*pCompoundStatement->body_begin());
- if (pCallExpr) {
- if( const FunctionDecl* func = pCallExpr->getDirectCallee()) {
- if( func->getNumParams() == 0 && func->getIdentifier() != NULL
- && ( func->getName() == "disposeOnce" )) {
- ok = true;
+ if (pCompoundStatement) {
+ bool bFoundDisposeOnce = false;
+ int nNumExtraStatements = 0;
+ for(auto const * x : pCompoundStatement->body())
+ {
+ const CXXMemberCallExpr *pCallExpr = dyn_cast<CXXMemberCallExpr>(x);
+ if (pCallExpr) {
+ if( const FunctionDecl* func = pCallExpr->getDirectCallee()) {
+ if( func->getNumParams() == 0 && func->getIdentifier() != NULL
+ && ( func->getName() == "disposeOnce" )) {
+ bFoundDisposeOnce = true;
+ }
}
}
+ // checking for ParenExpr is a hacky way to ignore assert statements in older versions of clang (i.e. <= 3.2)
+ if (!pCallExpr && !dyn_cast<ParenExpr>(x))
+ nNumExtraStatements++;
}
+ ok = bFoundDisposeOnce && nNumExtraStatements == 0;
}
if (!ok) {
SourceLocation spellingLocation = compiler.getSourceManager().getSpellingLoc(
commit 4eeaaf84d4251d77a86155609e21f86add086f3f
Author: Noel Grandin <noel at peralex.com>
Date: Thu May 7 11:05:02 2015 +0200
fix comment
Change-Id: Ifa59bdc4bfd80fe3100ba5f1ac8119ad990e3936
diff --git a/compilerplugins/clang/vclwidgets.cxx b/compilerplugins/clang/vclwidgets.cxx
index 77a8476..2e7d4eb 100644
--- a/compilerplugins/clang/vclwidgets.cxx
+++ b/compilerplugins/clang/vclwidgets.cxx
@@ -184,7 +184,7 @@ bool VCLWidgets::VisitCXXDestructorDecl(const CXXDestructorDecl* pCXXDestructorD
<< pCXXDestructorDecl->getSourceRange();
return true;
}
- // check that the destructor for a OutputDevice subclass does nothing except call into the dispose() method
+ // check that the destructor for a OutputDevice subclass does nothing except call into the disposeOnce() method
bool ok = false;
if (pCompoundStatement && pCompoundStatement->size() == 1) {
const CXXMemberCallExpr *pCallExpr = dyn_cast<CXXMemberCallExpr>(*pCompoundStatement->body_begin());
More information about the Libreoffice-commits
mailing list