)]}'
{
  "commit": "c548c47476ee3f4578db2ca4f82e097a728b5bff",
  "tree": "40dbc05ee84220a3c8ca9bcb59592127efa6b3ea",
  "parents": [
    "01b0fe3104d633d67d33a963142a54cd500e6b3c"
  ],
  "author": {
    "name": "Oliver Hunt",
    "email": "oliver@apple.com",
    "time": "Wed Aug 06 09:52:34 2025 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed Aug 06 09:52:34 2025 -0700"
  },
  "message": "[clang] Fix crash in dynamic_cast final class optimization (#152076)\n\nThis corrects the codegen for the final class optimization to\ncorrect handle the case where there is no path to perform the\ncast, and also corrects the codegen to handle ptrauth protected\nvtable pointers.\n\nAs part of this fix we separate out the path computation as\nthat makes it easier to reason about the failure code paths\nand more importantly means we can know what the type of the\nthis object is during the cast.\n\nThe allows us to use the GetVTablePointer interface which\ncorrectly performs the authentication operations required when\npointer authentication is enabled. This still leaves incorrect\nauthentication behavior in the multiple inheritance case but\ncurrently the optimization is disabled entirely if pointer\nauthentication is enabled.\n\nFixes #137518",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "2a95d1e2736a3fbe958f57bff22613ccd9a934b3",
      "old_mode": 33188,
      "old_path": "clang/docs/ReleaseNotes.rst",
      "new_id": "0e9fcaa5fac6aa812ba80b4d8ad63b6267d83b77",
      "new_mode": 33188,
      "new_path": "clang/docs/ReleaseNotes.rst"
    },
    {
      "type": "modify",
      "old_id": "96fe04661944df9ca6c0a681bb02f944607ef8ce",
      "old_mode": 33188,
      "old_path": "clang/lib/CodeGen/CGCXXABI.h",
      "new_id": "2dd320dbda9767aaa15d301f110b59d62994cdd8",
      "new_mode": 33188,
      "new_path": "clang/lib/CodeGen/CGCXXABI.h"
    },
    {
      "type": "modify",
      "old_id": "fef1baf25d1d2d84119c5263ef723ed076e18657",
      "old_mode": 33188,
      "old_path": "clang/lib/CodeGen/CGExprCXX.cpp",
      "new_id": "49d5d8acbe331bc4a7215437c4761108e75ac0f0",
      "new_mode": 33188,
      "new_path": "clang/lib/CodeGen/CGExprCXX.cpp"
    },
    {
      "type": "modify",
      "old_id": "aae1481444067d046921e858132afd3914961585",
      "old_mode": 33188,
      "old_path": "clang/lib/CodeGen/ItaniumCXXABI.cpp",
      "new_id": "5ffc1edb9986f7bdaacd45ba3ba200b97fe789d7",
      "new_mode": 33188,
      "new_path": "clang/lib/CodeGen/ItaniumCXXABI.cpp"
    },
    {
      "type": "modify",
      "old_id": "700ffa4beffc119ab928d252bb3fa963830c7c77",
      "old_mode": 33188,
      "old_path": "clang/lib/CodeGen/MicrosoftCXXABI.cpp",
      "new_id": "e8d2451a7dd5c928c47286e0748d342940b8af49",
      "new_mode": 33188,
      "new_path": "clang/lib/CodeGen/MicrosoftCXXABI.cpp"
    },
    {
      "type": "modify",
      "old_id": "19c2a9bd0497e950d165a4dc538d00f98894da4c",
      "old_mode": 33188,
      "old_path": "clang/test/CodeGenCXX/dynamic-cast-exact-disabled.cpp",
      "new_id": "3156e1bb21b1e18fd26da04629af4a52189e491f",
      "new_mode": 33188,
      "new_path": "clang/test/CodeGenCXX/dynamic-cast-exact-disabled.cpp"
    },
    {
      "type": "modify",
      "old_id": "86e1965b4ba68bdf25f0b3cc050e3e34cdf36e4c",
      "old_mode": 33188,
      "old_path": "clang/test/CodeGenCXX/dynamic-cast-exact.cpp",
      "new_id": "588d80844a2fa12cbb6793094d2f39c26c9cae0d",
      "new_mode": 33188,
      "new_path": "clang/test/CodeGenCXX/dynamic-cast-exact.cpp"
    }
  ]
}
