diff options
author | Noel Grandin <noel@peralex.com> | 2015-04-17 09:59:18 +0200 |
---|---|---|
committer | Noel Grandin <noel@peralex.com> | 2015-04-17 10:25:47 +0200 |
commit | e0686cb7564eb2eeab62ac35a2a36da8f83ed90a (patch) | |
tree | a9eb95ed2488573c7970798dd08533b9dff76b56 /compilerplugins | |
parent | 5cc560f6c27dc60764f644d6b5fb5ccb1b8072be (diff) |
workaround ErrorContextImpl in vclwidget clang plugin
Change-Id: I6c0265f33a88169708d0812639169b665a95fc1f
Diffstat (limited to 'compilerplugins')
-rw-r--r-- | compilerplugins/clang/vclwidgets.cxx | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/compilerplugins/clang/vclwidgets.cxx b/compilerplugins/clang/vclwidgets.cxx index 2c171d0a6e82..e12e9572b385 100644 --- a/compilerplugins/clang/vclwidgets.cxx +++ b/compilerplugins/clang/vclwidgets.cxx @@ -265,13 +265,17 @@ bool VCLWidgets::VisitFieldDecl(const FieldDecl * fieldDecl) { if (fieldDecl->isBitField()) { return true; } + const CXXRecordDecl *pParentRecordDecl = dyn_cast<CXXRecordDecl>(fieldDecl->getParent()); if (containsWindowSubclass(fieldDecl->getType())) { - report( - DiagnosticsEngine::Warning, - "OutputDevice subclass declared as a pointer field, should be wrapped in VclPtr." + fieldDecl->getType().getAsString(), - fieldDecl->getLocation()) - << fieldDecl->getSourceRange(); - return true; + // have to ignore this for now, nasty reverse dependency from tools->vcl + if (!(pParentRecordDecl != nullptr && pParentRecordDecl->getQualifiedNameAsString() == "ErrorContextImpl")) { + report( + DiagnosticsEngine::Warning, + "OutputDevice subclass declared as a pointer field, should be wrapped in VclPtr." + fieldDecl->getType().getAsString(), + fieldDecl->getLocation()) + << fieldDecl->getSourceRange(); + return true; + } } const RecordType *recordType = fieldDecl->getType()->getAs<RecordType>(); if (recordType == nullptr) { @@ -292,7 +296,6 @@ bool VCLWidgets::VisitFieldDecl(const FieldDecl * fieldDecl) { } // If this field is a VclPtr field, then the class MUST have a dispose method - const CXXRecordDecl *pParentRecordDecl = dyn_cast<CXXRecordDecl>(fieldDecl->getParent()); if (pParentRecordDecl && isDerivedFromWindow(pParentRecordDecl) && startsWith(recordDecl->getQualifiedNameAsString(), "VclPtr")) { |