summaryrefslogtreecommitdiff
path: root/compilerplugins/clang/comparisonwithconstant.cxx
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2020-07-19 14:53:29 +0200
committerStephan Bergmann <sbergman@redhat.com>2020-07-19 23:05:57 +0200
commit5d546de67b44dec23ecfa5a6378e2968912f8253 (patch)
tree811691579249f4e70783f239cec9acc312e9785c /compilerplugins/clang/comparisonwithconstant.cxx
parent46bfb9da866c2e7bb37c7f5d8980f378c52f79f8 (diff)
Adapt to Clang 12 trunk RecursiveASTVisitor change
<https://github.com/llvm/llvm-project/commit/ 5689b38c6a4220cc5f6ba68a56486229b10071bf> "Removed a RecursiveASTVisitor feature to visit operator kinds with different methods". That change is incompatible in that before the change individual TraverseUnary* and TraverseBin* functions were called, while now TraverseUnaryOperator and TraverseBinaryOperator/TraverseCompoundAssignOperator are called for all the different operators. Fixed that with a few #if for the non-shared plugins, but that doesn't work for the shared plugin. So made the two affected plugins non- shared for now and left a better fix as a TODO. Change-Id: I5b87d329ae2c4c93bf605bb1ecc9641039f014a3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/99000 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'compilerplugins/clang/comparisonwithconstant.cxx')
-rw-r--r--compilerplugins/clang/comparisonwithconstant.cxx29
1 files changed, 14 insertions, 15 deletions
diff --git a/compilerplugins/clang/comparisonwithconstant.cxx b/compilerplugins/clang/comparisonwithconstant.cxx
index 6787be87424d..284e5567b65f 100644
--- a/compilerplugins/clang/comparisonwithconstant.cxx
+++ b/compilerplugins/clang/comparisonwithconstant.cxx
@@ -13,6 +13,8 @@
#include <fstream>
#include <set>
+#include "config_clang.h"
+
#include "compat.hxx"
#include "plugin.hxx"
@@ -33,29 +35,26 @@ public:
TraverseDecl(compiler.getASTContext().getTranslationUnitDecl());
}
- // Deliberately drop RecursiveASTVisitor::TraverseBinEQ's DataRecursionQueue
- // parameter; TraverseBinEQ must use stack instead of data recursion for any
+ // Deliberately drop RecursiveASTVisitor::TraverseBinaryOperator's DataRecursionQueue
+ // parameter; TraverseBinaryOperator must use stack instead of data recursion for any
// children's VisitBinaryOperator to see changes to occurrence_ by a parent
// VisitBinaryOperator:
- bool TraverseBinEQ(BinaryOperator * S)
+ bool TraverseBinaryOperator(BinaryOperator * S)
{
+ auto const op = S->getOpcode();
+ if (op != BO_EQ && op != BO_NE) {
+ return RecursiveASTVisitor::TraverseBinaryOperator(S);
+ }
auto const saved = occurrence_;
- auto const ret = RecursiveASTVisitor::TraverseBinEQ(S);
+ auto const ret = RecursiveASTVisitor::TraverseBinaryOperator(S);
occurrence_ = saved;
return ret;
}
- // Deliberately drop RecursiveASTVisitor::TraverseBinNE's DataRecursionQueue
- // parameter; TraverseBinNE must use stack instead of data recursion for any
- // children's VisitBinaryOperator to see changes to occurrence_ by a parent
- // VisitBinaryOperator:
- bool TraverseBinNE(BinaryOperator * S)
- {
- auto const saved = occurrence_;
- auto const ret = RecursiveASTVisitor::TraverseBinNE(S);
- occurrence_ = saved;
- return ret;
- }
+#if CLANG_VERSION <= 110000
+ bool TraverseBinEQ(BinaryOperator * expr) { return TraverseBinaryOperator(expr); }
+ bool TraverseBinNE(BinaryOperator * expr) { return TraverseBinaryOperator(expr); }
+#endif
bool VisitBinaryOperator(const BinaryOperator *);
private: