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;
         }

Reply via email to