diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2020-07-19 14:53:29 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2020-07-19 23:05:57 +0200 |
commit | 5d546de67b44dec23ecfa5a6378e2968912f8253 (patch) | |
tree | 811691579249f4e70783f239cec9acc312e9785c /compilerplugins/clang/fakebool.cxx | |
parent | 46bfb9da866c2e7bb37c7f5d8980f378c52f79f8 (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/fakebool.cxx')
-rw-r--r-- | compilerplugins/clang/fakebool.cxx | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/compilerplugins/clang/fakebool.cxx b/compilerplugins/clang/fakebool.cxx index f50116b8ee88..804f1d51afa1 100644 --- a/compilerplugins/clang/fakebool.cxx +++ b/compilerplugins/clang/fakebool.cxx @@ -184,7 +184,7 @@ public: virtual void run() override; - bool VisitUnaryAddrOf(UnaryOperator const * op); + bool VisitUnaryOperator(UnaryOperator * op); bool VisitCallExpr(CallExpr * expr); @@ -446,8 +446,11 @@ void FakeBool::run() { } } -bool FakeBool::VisitUnaryAddrOf(UnaryOperator const * op) { - FunctionAddress::VisitUnaryAddrOf(op); +bool FakeBool::VisitUnaryOperator(UnaryOperator * op) { + if (op->getOpcode() != UO_AddrOf) { + return FunctionAddress::VisitUnaryOperator(op); + } + FunctionAddress::VisitUnaryOperator(op); Expr const * e1 = op->getSubExpr()->IgnoreParenCasts(); if (isFakeBool(e1->getType()) != FBK_No) { if (DeclRefExpr const * e2 = dyn_cast<DeclRefExpr>(e1)) { |