)]}'
{
  "commit": "326d749a368a842e71fd0d4cd7bb97c6d9f52f3e",
  "tree": "4e28192cb41d62f14cda501e7ace7dda4efba021",
  "parents": [
    "bd77e9acf0e86a46379e1780dd58a787a7ee78f5"
  ],
  "author": {
    "name": "v1nh1shungry",
    "email": "v1nh1shungry@outlook.com",
    "time": "Sun Aug 17 17:42:38 2025 +0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Sun Aug 17 11:42:38 2025 +0200"
  },
  "message": "[clang-tidy] Fix `cppcoreguidelines-prefer-member-initializer` false positive for inherited members (#153941)\n\n```cpp\nstruct Base {\n  int m;\n};\n\ntemplate \u003cclass T\u003e\nstruct Derived : Base {\n  Derived() { m \u003d 0; }\n};\n```\n\nwould previously generate the following output:\n\n```\n\u003csource\u003e:7:15: warning: \u0027m\u0027 should be initialized in a member initializer of the constructor [cppcoreguidelines-prefer-member-initializer]\n    7 |   Derived() { m \u003d 0; }\n      |               ^~~~~~\n      |             : m(0)\n```\n\nThis patch fixes this false positive.\n\nNote that before this patch the checker won\u0027t give false positive for\n\n```cpp\nstruct Derived : Base {\n  Derived() { m \u003d 0; }\n};\n```\n\nand the constructor\u0027s AST is\n\n```\n`-CXXConstructorDecl 0x557df03d1fb0 \u003cline:7:3, col:22\u003e col:3 Derived \u0027void ()\u0027 implicit-inline\n    |-CXXCtorInitializer \u0027Base\u0027\n    | `-CXXConstructExpr 0x557df03d2748 \u003ccol:3\u003e \u0027Base\u0027 \u0027void () noexcept\u0027\n    `-CompoundStmt 0x557df03d2898 \u003ccol:13, col:22\u003e\n      `-BinaryOperator 0x557df03d2878 \u003ccol:15, col:19\u003e \u0027int\u0027 lvalue \u0027\u003d\u0027\n        |-MemberExpr 0x557df03d2828 \u003ccol:15\u003e \u0027int\u0027 lvalue -\u003em 0x557df03d1c40\n        | `-ImplicitCastExpr 0x557df03d2808 \u003ccol:15\u003e \u0027Base *\u0027 \u003cUncheckedDerivedToBase (Base)\u003e\n        |   `-CXXThisExpr 0x557df03d27f8 \u003ccol:15\u003e \u0027Derived *\u0027 implicit this\n        `-IntegerLiteral 0x557df03d2858 \u003ccol:19\u003e \u0027int\u0027 0\n```\n\nso `isAssignmentToMemberOf` would return empty due to\n\n\nhttps://github.com/llvm/llvm-project/blob/f0967fca04c880e9aabd5be043a85127faabb4c6/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp#L118-L119\n\nFixes #104400",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "593a4f85d13091d58cd63c170172bdeb59e254ef",
      "old_mode": 33188,
      "old_path": "clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp",
      "new_id": "79cd4bbcc9a6021db399903761c152e3166ee655",
      "new_mode": 33188,
      "new_path": "clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp"
    },
    {
      "type": "modify",
      "old_id": "36703dd32c03c5e7f778063375167173e0173f0c",
      "old_mode": 33188,
      "old_path": "clang-tools-extra/docs/ReleaseNotes.rst",
      "new_id": "fd81b0d47e82b361d387160b48950e60c7743ba6",
      "new_mode": 33188,
      "new_path": "clang-tools-extra/docs/ReleaseNotes.rst"
    },
    {
      "type": "modify",
      "old_id": "7d6164946fc3d8bbd5881381c3d5fdb282a18edb",
      "old_mode": 33188,
      "old_path": "clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/prefer-member-initializer.cpp",
      "new_id": "e8d7db17f3c60ab07123cc74189ebfd803a776ea",
      "new_mode": 33188,
      "new_path": "clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/prefer-member-initializer.cpp"
    }
  ]
}
