summaryrefslogtreecommitdiff
path: root/compilerplugins/clang
diff options
context:
space:
mode:
authorNoel Grandin <noel@peralex.com>2015-04-17 09:59:18 +0200
committerNoel Grandin <noel@peralex.com>2015-04-17 10:25:47 +0200
commite0686cb7564eb2eeab62ac35a2a36da8f83ed90a (patch)
treea9eb95ed2488573c7970798dd08533b9dff76b56 /compilerplugins/clang
parent5cc560f6c27dc60764f644d6b5fb5ccb1b8072be (diff)
workaround ErrorContextImpl in vclwidget clang plugin
Change-Id: I6c0265f33a88169708d0812639169b665a95fc1f
Diffstat (limited to 'compilerplugins/clang')
-rw-r--r--compilerplugins/clang/vclwidgets.cxx17
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"))
{