)]}'
{
  "commit": "5dfa5387b115d9c848a99b96cb610ee9a4242fdf",
  "tree": "e07ec10e016aa950a14db917b0f4fbafdd272ff9",
  "parents": [
    "f9581d6dd5f8a70968ce86bb7ccc486d848b32e9"
  ],
  "author": {
    "name": "Utkarsh Saxena",
    "email": "usx@google.com",
    "time": "Thu Jan 08 16:59:40 2026 +0530"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu Jan 08 16:59:40 2026 +0530"
  },
  "message": "[LifetimeSafety] Add implicit tracking for STL functions (#170005)\n\nAdd support for tracking STL container methods and free functions in the\nlifetime safety analysis.\n\n- Added `VisitExprWithCleanups` to the `FactsGenerator` to properly\nhandle expressions with cleanup code\n- Moved `shouldTrackImplicitObjectArg` and `shouldTrackFirstArgument`\nfrom `CheckExprLifetime.cpp` to `LifetimeAnnotations.h/cpp` to make them\navailable to the lifetime safety analysis\n- Enhanced the lifetime analysis to track STL container methods that\nreturn pointers or references dependent on the container\u0027s lifetime\n(e.g., `begin()`, `data()`, `c_str()`)\n- Added support for tracking free functions like `std::begin`,\n`std::data`, and `std::any_cast` that return pointers or references\ndependent on their arguments\n\nFixes https://github.com/llvm/llvm-project/issues/162622",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "1a16fb82f9a841f4c9f633aecf80cbc668a8f03b",
      "old_mode": 33188,
      "old_path": "clang/include/clang/Analysis/Analyses/LifetimeSafety/LifetimeAnnotations.h",
      "new_id": "f96d412aa63d24250c2a38e5dd38823883f1a413",
      "new_mode": 33188,
      "new_path": "clang/include/clang/Analysis/Analyses/LifetimeSafety/LifetimeAnnotations.h"
    },
    {
      "type": "modify",
      "old_id": "546fe374910409bca2635f4c078c9f5913b2f905",
      "old_mode": 33188,
      "old_path": "clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp",
      "new_id": "f3993b7e7e261792cf9dbd1efd4843eee6aea9ed",
      "new_mode": 33188,
      "new_path": "clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp"
    },
    {
      "type": "modify",
      "old_id": "54e343fc2ee5e23c337c06d283e3e5e11e7a37ad",
      "old_mode": 33188,
      "old_path": "clang/lib/Analysis/LifetimeSafety/LifetimeAnnotations.cpp",
      "new_id": "2772fe20de19bc942f39d07624656f15911be35b",
      "new_mode": 33188,
      "new_path": "clang/lib/Analysis/LifetimeSafety/LifetimeAnnotations.cpp"
    },
    {
      "type": "modify",
      "old_id": "2c1deac03d24ba5b833bb902db676d2616726fd2",
      "old_mode": 33188,
      "old_path": "clang/lib/Analysis/LifetimeSafety/Origins.cpp",
      "new_id": "f7153f23cbfd58e7965738d24819492bc5c902ee",
      "new_mode": 33188,
      "new_path": "clang/lib/Analysis/LifetimeSafety/Origins.cpp"
    },
    {
      "type": "modify",
      "old_id": "c91ca751984c972c063ac1e1d842bfe8306ba295",
      "old_mode": 33188,
      "old_path": "clang/lib/Sema/CheckExprLifetime.cpp",
      "new_id": "9396b4d9d5ba774440d211e88da082d1ac5cf523",
      "new_mode": 33188,
      "new_path": "clang/lib/Sema/CheckExprLifetime.cpp"
    },
    {
      "type": "modify",
      "old_id": "f05a249c373c40472980fadd3dc3fc1d31f09c3e",
      "old_mode": 33188,
      "old_path": "clang/unittests/Analysis/LifetimeSafetyTest.cpp",
      "new_id": "b1f74a7a2c850dc8c0aea48ecc00eb6e925344a2",
      "new_mode": 33188,
      "new_path": "clang/unittests/Analysis/LifetimeSafetyTest.cpp"
    }
  ]
}
