[clang-tools-extra] bec8fff - [clang-tidy] Add support for member pointers in cppcoreguidelines-init-variables (#180973)

via cfe-commits cfe-commits at lists.llvm.org
Thu Feb 12 08:13:50 PST 2026


Author: mitchell
Date: 2026-02-13T00:13:45+08:00
New Revision: bec8fff25116fc63764e260cdbc815ee1ffca3a3

URL: https://github.com/llvm/llvm-project/commit/bec8fff25116fc63764e260cdbc815ee1ffca3a3
DIFF: https://github.com/llvm/llvm-project/commit/bec8fff25116fc63764e260cdbc815ee1ffca3a3.diff

LOG: [clang-tidy] Add support for member pointers in cppcoreguidelines-init-variables (#180973)

Closes #180894

Added: 
    

Modified: 
    clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp
    clang-tools-extra/docs/ReleaseNotes.rst
    clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/init-variables.cpp

Removed: 
    


################################################################################
diff  --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp b/clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp
index 93b5b96926865..770d1c8e55fef 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp
@@ -95,7 +95,7 @@ void InitVariablesCheck::check(const MatchFinder::MatchResult &Result) {
   else if (TypePtr->isFloatingType()) {
     InitializationString = " = NAN";
     AddMathInclude = true;
-  } else if (TypePtr->isAnyPointerType()) {
+  } else if (TypePtr->isAnyPointerType() || TypePtr->isMemberPointerType()) {
     if (getLangOpts().CPlusPlus11)
       InitializationString = " = nullptr";
     else

diff  --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index 0b96fb19f7728..e7437e62ee77d 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -169,6 +169,10 @@ Changes in existing checks
   the invalidating function in the warning message when a custom invalidation
   function is used (via the `InvalidationFunctions` option).
 
+- Improved :doc:`cppcoreguidelines-init-variables
+  <clang-tidy/checks/cppcoreguidelines/init-variables>` check by ensuring that
+  member pointers are correctly flagged as uninitialized.
+
 - Improved :doc:`cppcoreguidelines-pro-type-vararg
   <clang-tidy/checks/cppcoreguidelines/pro-type-vararg>` check by no longer
   warning on builtins with custom type checking (e.g., type-generic builtins

diff  --git a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/init-variables.cpp b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/init-variables.cpp
index 8a8973a032bf2..e4a68fea59b52 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/init-variables.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/init-variables.cpp
@@ -168,3 +168,36 @@ namespace gh161978 {
     // CHECK-FIXES: bool (*fp5)(int, int) = nullptr, (*fp6)(int, int) = nullptr;
   }
 }
+
+void gh180894() {
+  struct S {
+    int x;
+  };
+
+  int S::* mp;
+  // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: variable 'mp' is not initialized [cppcoreguidelines-init-variables]
+  // CHECK-FIXES: int S::* mp = nullptr;
+
+  int S::* mp1 = nullptr, S::* mp2;
+  // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: variable 'mp2' is not initialized [cppcoreguidelines-init-variables]
+  // CHECK-FIXES: int S::* mp1 = nullptr, S::* mp2 = nullptr;
+
+  int S::* mp3, S::* mp4 = &S::x;
+  // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: variable 'mp3' is not initialized [cppcoreguidelines-init-variables]
+  // CHECK-FIXES: int S::* mp3 = nullptr, S::* mp4 = &S::x;
+
+  using MemPtr = int S::*;
+  MemPtr mp5;
+  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: variable 'mp5' is not initialized [cppcoreguidelines-init-variables]
+  // CHECK-FIXES: MemPtr mp5 = nullptr;
+
+  struct S1 {
+    int x;
+    int y;
+  };
+
+  int S::* mp6, S1::* mp7;
+  // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: variable 'mp6' is not initialized [cppcoreguidelines-init-variables]
+  // CHECK-MESSAGES: :[[@LINE-2]]:23: warning: variable 'mp7' is not initialized [cppcoreguidelines-init-variables]
+  // CHECK-FIXES: int S::* mp6 = nullptr, S1::* mp7 = nullptr;
+}


        


More information about the cfe-commits mailing list