)]}'
{
  "commit": "ced50aafb99a09be40385dd35b43f1ff97ac7284",
  "tree": "a7c78aceffce9d6c6abb6ab22cd3f0ccf29f2c37",
  "parents": [
    "36fac6fe14701a28cc42deb8ecc63c3420d7bad1"
  ],
  "author": {
    "name": "Akira Hatanaka",
    "email": "ahatanak@gmail.com",
    "time": "Thu May 14 15:03:45 2026 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu May 14 15:03:45 2026 -0700"
  },
  "message": "Allow ObjC writeback conversion in cleanup attribute type check (#195318)\n\nPrior to #164440, CheckAssignmentConstraints in the cleanup attribute\nhandler ran before ObjC lifetime qualifiers were inferred on the\nvariable. It compared against a type without \u0027__strong\u0027 and accepted\nboth \u0027T **\u0027 to \u0027T *__autoreleasing *\u0027 and \u0027T **\u0027 to \u0027T\n*__unsafe_unretained *\u0027. #164440 reversed the order, so the check now\nruns after \u0027__strong\u0027 is inferred and rejects both \u0027T *__strong *\u0027 to \u0027T\n*__autoreleasing *\u0027 and \u0027T *__strong *\u0027 to\n\u0027T *__unsafe_unretained *\u0027.\n\nFix the valid case by falling back to isObjCWritebackConversion when the\nassignment check fails. This re-allows the \u0027__strong\u0027 to\n\u0027__autoreleasing\u0027 writeback conversion while continuing to reject\n\u0027__strong\u0027 to \u0027__unsafe_unretained\u0027.\n\nrdar://175133715",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "364f4de077ca7bde2b648ecbd9d804dd770bc17e",
      "old_mode": 33188,
      "old_path": "clang/lib/Sema/SemaDeclAttr.cpp",
      "new_id": "c52b0f192454cdaf45b780cc7653968f3b6ac2dd",
      "new_mode": 33188,
      "new_path": "clang/lib/Sema/SemaDeclAttr.cpp"
    },
    {
      "type": "modify",
      "old_id": "9ee02bfab5a2a844de5434eddfbbafe0f23f4f46",
      "old_mode": 33188,
      "old_path": "clang/test/SemaObjC/attr-cleanup.m",
      "new_id": "9ba4ee157082fd6dff6447e61633ee5e8659b4f2",
      "new_mode": 33188,
      "new_path": "clang/test/SemaObjC/attr-cleanup.m"
    }
  ]
}
