compilerplugins/clang/writeonlyvars.cxx | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-)
New commits: commit 04a2c81e734fbaa3f6fafa44a1702213a33713bf Author: Noel Grandin <[email protected]> AuthorDate: Wed Jan 7 12:05:38 2026 +0200 Commit: Noel Grandin <[email protected]> CommitDate: Wed Jan 7 19:28:54 2026 +0100 loplugin:writeonlyvars update for new AST nodes in newer versions of clang Change-Id: Ib0e08f8bac4dd2b350e2652de36c323d9b88f2b1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196676 Tested-by: Jenkins Reviewed-by: Noel Grandin <[email protected]> diff --git a/compilerplugins/clang/writeonlyvars.cxx b/compilerplugins/clang/writeonlyvars.cxx index a9b62e00f02c..23c7415a0bb6 100644 --- a/compilerplugins/clang/writeonlyvars.cxx +++ b/compilerplugins/clang/writeonlyvars.cxx @@ -533,9 +533,10 @@ bool WriteOnlyVars::VisitVarDecl(const VarDecl* varDecl) if (tc.Typedef("BitmapScopedWriteAccess")) return true; std::string typeName = varDecl->getType().getAsString(); - if (contains(typeName, "Guard") || contains(typeName, "Reader") || contains(typeName, "Stream") - || contains(typeName, "Parser") || contains(typeName, "Codec") - || contains(typeName, "Exception")) + if (contains(typeName, "Guard") || contains(typeName, "_lock") || contains(typeName, "Reader") + || contains(typeName, "Stream") || contains(typeName, "Parser") + || contains(typeName, "Codec") || contains(typeName, "Exception") + || contains(typeName, "TypeSerializer")) return true; varDecl = varDecl->getCanonicalDecl(); if (!varDecl->getLocation().isValid() || ignoreLocation(varDecl)) @@ -746,7 +747,8 @@ void WriteOnlyVars::checkIfReadFrom(const VarDecl* varDecl, const Expr* memberEx || isa<DeclStmt>(parent) || isa<WhileStmt>(parent) || isa<CXXNewExpr>(parent) || isa<ForStmt>(parent) || isa<InitListExpr>(parent) || isa<CXXDependentScopeMemberExpr>(parent) || isa<UnresolvedMemberExpr>(parent) - || isa<MaterializeTemporaryExpr>(parent)) + || isa<MaterializeTemporaryExpr>(parent) || isa<CXXDefaultInitExpr>(parent) + || isa<DeclRefExpr>(parent)) // this could be a DeclRefExpr to a function template { bPotentiallyReadFrom = true; break; @@ -836,6 +838,12 @@ void WriteOnlyVars::checkIfWrittenTo(const VarDecl* varDecl, const Expr* memberE bPotentiallyWrittenTo = true; break; } + else if (isa<DeclRefExpr>(parent)) + { + // this could be a DeclRefExpr to a function template + bPotentiallyWrittenTo = true; + break; + } else if (isa<CastExpr>(parent) || isa<MemberExpr>(parent) || isa<ParenExpr>(parent) || isa<ParenListExpr>(parent) || isa<ArrayInitLoopExpr>(parent) || isa<ExprWithCleanups>(parent)) @@ -966,7 +974,7 @@ void WriteOnlyVars::checkIfWrittenTo(const VarDecl* varDecl, const Expr* memberE || isa<CXXForRangeStmt>(parent) || isa<CXXTypeidExpr>(parent) || isa<DefaultStmt>(parent) || isa<ConstantExpr>(parent) || isa<GCCAsmStmt>(parent) || isa<VAArgExpr>(parent) || isa<CXXDefaultArgExpr>(parent) - || isa<LambdaExpr>(parent)) + || isa<LambdaExpr>(parent) || isa<CXXDefaultInitExpr>(parent)) { break; }
