aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCristian Adam <cristian.adam@gmail.com>2024-02-12 15:42:57 +0100
committerCristian Adam <cristian.adam@qt.io>2024-02-12 15:05:36 +0000
commit59ca3101ceca8bf3ab0872e943c4588ff550ac0f (patch)
tree18a2c51cfa83402ffb3edfcdb0dc07e7b88bc591
parent641850bfe401d87c8d4277e3296838ecfdc4d633 (diff)
Fix compiler error with LLVM 18
Change-Id: Iae75ad46a90a8c0cddf4ab986bb922ce18ffc2af Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
-rw-r--r--src/FunctionUtils.h11
-rw-r--r--src/checks/level2/virtual-call-ctor.cpp3
2 files changed, 12 insertions, 2 deletions
diff --git a/src/FunctionUtils.h b/src/FunctionUtils.h
index 37504b0b..a0db9128 100644
--- a/src/FunctionUtils.h
+++ b/src/FunctionUtils.h
@@ -96,6 +96,15 @@ inline bool parametersMatch(const clang::FunctionDecl *f1, const clang::Function
return true;
}
+inline bool isPureVirtual(const clang::CXXMethodDecl *decl)
+{
+#if LLVM_VERSION_MAJOR >= 18
+ return decl->isPureVirtual();
+#else
+ return decl->isPure();
+#endif
+}
+
/**
* Returns true if a class contains a method with a specific signature.
* (method->getParent() doesn't need to equal record)
@@ -107,7 +116,7 @@ inline bool classImplementsMethod(const clang::CXXRecordDecl *record, const clan
llvm::StringRef methodName = clazy::name(method);
for (auto m : record->methods()) {
- if (!m->isPure() && clazy::name(m) == methodName && parametersMatch(m, method))
+ if (!clazy::isPureVirtual(m) && clazy::name(m) == methodName && parametersMatch(m, method))
return true;
}
diff --git a/src/checks/level2/virtual-call-ctor.cpp b/src/checks/level2/virtual-call-ctor.cpp
index e6af81c8..6bc2b349 100644
--- a/src/checks/level2/virtual-call-ctor.cpp
+++ b/src/checks/level2/virtual-call-ctor.cpp
@@ -23,6 +23,7 @@
*/
#include "virtual-call-ctor.h"
+#include "FunctionUtils.h"
#include "HierarchyUtils.h"
#include "SourceCompatibilityHelpers.h"
#include "clazy_stl.h"
@@ -115,7 +116,7 @@ SourceLocation VirtualCallCtor::containsVirtualCall(clang::CXXRecordDecl *classD
continue;
if (memberDecl->getParent() == classDecl) {
- if (memberDecl->isPure()) {
+ if (clazy::isPureVirtual(memberDecl)) {
return clazy::getLocStart(callExpr);
} else {
if (containsVirtualCall(classDecl, memberDecl->getBody(), processedStmts).isValid())