)]}'
{
  "commit": "e4a1b5f36e71c8c382bdd531867c5f6eb3f7deac",
  "tree": "5ed6131d9d0abadc4e4726509c3c01cdf264600d",
  "parents": [
    "83f390859e186d22af8aa32135d7993079ed4666"
  ],
  "author": {
    "name": "Sirraide",
    "email": "aeternalmail@gmail.com",
    "time": "Tue Sep 02 18:37:19 2025 +0200"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Tue Sep 02 16:37:19 2025 +0000"
  },
  "message": "[Clang] [C2y] Implement N3355 ‘Named Loops’ (#152870)\n\nThis implements support for [named\nloops](https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3355.htm) for\nC2y. \n\nWhen parsing a `LabelStmt`, we create the `LabeDecl` early before we parse \nthe substatement; this label is then passed down to `ParseWhileStatement()` \nand friends, which then store it in the loop’s (or switch statement’s) `Scope`; \nwhen we encounter a `break/continue` statement, we perform a lookup for \nthe label (and error if it doesn’t exist), and then walk the scope stack and \ncheck if there is a scope whose preceding label is the target label, which \nidentifies the jump target.\n\nThe feature is only supported in C2y mode, though a cc1-only option\nexists for testing (`-fnamed-loops`), which is mostly intended to try\nand make sure that we don’t have to refactor this entire implementation\nwhen/if we start supporting it in C++.\n\n---------\n\nCo-authored-by: Balazs Benics \u003cbenicsbalazs@gmail.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a253a630a48cc6e818aae1fde31160ac4758800a",
      "old_mode": 33188,
      "old_path": "clang-tools-extra/clangd/XRefs.cpp",
      "new_id": "e1c50f906de083032d517e4893302ad2cdeb164c",
      "new_mode": 33188,
      "new_path": "clang-tools-extra/clangd/XRefs.cpp"
    },
    {
      "type": "modify",
      "old_id": "c0c2766f76b4b3489158aceab83c497ee5864b6e",
      "old_mode": 33188,
      "old_path": "clang/docs/ReleaseNotes.rst",
      "new_id": "dd53b4d46f3cc7c7955b2d23b7e5b24833ddf330",
      "new_mode": 33188,
      "new_path": "clang/docs/ReleaseNotes.rst"
    },
    {
      "type": "modify",
      "old_id": "8640780206dbaab10c71fd1f67017fda279f70e0",
      "old_mode": 33188,
      "old_path": "clang/include/clang/AST/JSONNodeDumper.h",
      "new_id": "427a9c51ece1b3a4d89965f2b223c8f7835308ca",
      "new_mode": 33188,
      "new_path": "clang/include/clang/AST/JSONNodeDumper.h"
    },
    {
      "type": "modify",
      "old_id": "a5b0d5053003f98d96e984a7e987bab3ce0db655",
      "old_mode": 33188,
      "old_path": "clang/include/clang/AST/Stmt.h",
      "new_id": "76942f1a84f9a389ad537ff19022926e82b3c241",
      "new_mode": 33188,
      "new_path": "clang/include/clang/AST/Stmt.h"
    },
    {
      "type": "modify",
      "old_id": "6d2795111685aed945379d1031013982fd9d7423",
      "old_mode": 33188,
      "old_path": "clang/include/clang/AST/TextNodeDumper.h",
      "new_id": "88ecd526e3d7efb63b5d55d58848be4d6064a769",
      "new_mode": 33188,
      "new_path": "clang/include/clang/AST/TextNodeDumper.h"
    },
    {
      "type": "modify",
      "old_id": "ff506fb258b647781bd03c03b8a923b3edd0c442",
      "old_mode": 33188,
      "old_path": "clang/include/clang/Basic/DiagnosticParseKinds.td",
      "new_id": "bc7a6e231d93ccf5e9fc910ab6f24771676646a9",
      "new_mode": 33188,
      "new_path": "clang/include/clang/Basic/DiagnosticParseKinds.td"
    },
    {
      "type": "modify",
      "old_id": "c934fed2c746297eea8ad3fd86acaa028a02df7e",
      "old_mode": 33188,
      "old_path": "clang/include/clang/Basic/DiagnosticSemaKinds.td",
      "new_id": "0f3aa9aea215f49edced13e7213dda4bf23ba26d",
      "new_mode": 33188,
      "new_path": "clang/include/clang/Basic/DiagnosticSemaKinds.td"
    },
    {
      "type": "modify",
      "old_id": "e0a5351143dfd41e8b342b0c9ba5682a74294e4a",
      "old_mode": 33188,
      "old_path": "clang/include/clang/Basic/LangOptions.def",
      "new_id": "84f5ab3443a5960a1f15633143e5f483bcfcd17f",
      "new_mode": 33188,
      "new_path": "clang/include/clang/Basic/LangOptions.def"
    },
    {
      "type": "modify",
      "old_id": "c9c173f5c74696de536cbb5188121c073d8ae5b5",
      "old_mode": 33188,
      "old_path": "clang/include/clang/Basic/StmtNodes.td",
      "new_id": "046ef4f30e232a1ab2a1e81828ce135be937623d",
      "new_mode": 33188,
      "new_path": "clang/include/clang/Basic/StmtNodes.td"
    },
    {
      "type": "modify",
      "old_id": "f507968d30670e4236a164a8008097e57e59b6cf",
      "old_mode": 33188,
      "old_path": "clang/include/clang/Driver/Options.td",
      "new_id": "902a28d60b349d41dc3e401b29bdc7cf204aabd3",
      "new_mode": 33188,
      "new_path": "clang/include/clang/Driver/Options.td"
    },
    {
      "type": "modify",
      "old_id": "e9437e6d463665656f90ed6b750c370d3ed3a0b7",
      "old_mode": 33188,
      "old_path": "clang/include/clang/Parse/Parser.h",
      "new_id": "a9a87fb586fc287734b4eed9c7d57c0348a4e33f",
      "new_mode": 33188,
      "new_path": "clang/include/clang/Parse/Parser.h"
    },
    {
      "type": "modify",
      "old_id": "757f3dcc3fe8d02cdc2c8b674ff095fa5490551f",
      "old_mode": 33188,
      "old_path": "clang/include/clang/Sema/Scope.h",
      "new_id": "0d1c0ff6a1e910fb2c5627ce5fb783ecb028db7b",
      "new_mode": 33188,
      "new_path": "clang/include/clang/Sema/Scope.h"
    },
    {
      "type": "modify",
      "old_id": "c3fb57774c8dc407bb0e801c9a1bac90c1b65e43",
      "old_mode": 33188,
      "old_path": "clang/include/clang/Sema/Sema.h",
      "new_id": "aa035a1555950b8390876237d6f00b9fd242ce74",
      "new_mode": 33188,
      "new_path": "clang/include/clang/Sema/Sema.h"
    },
    {
      "type": "modify",
      "old_id": "6299efaf6bbfc928a586a51dd288960c5d165f21",
      "old_mode": 33188,
      "old_path": "clang/lib/AST/ASTImporter.cpp",
      "new_id": "0899e86c2e25d00924bb5b69da3d54ea0da65ccb",
      "new_mode": 33188,
      "new_path": "clang/lib/AST/ASTImporter.cpp"
    },
    {
      "type": "modify",
      "old_id": "b4f1e76187e251ab68b677d7923312206756ce42",
      "old_mode": 33188,
      "old_path": "clang/lib/AST/ExprConstant.cpp",
      "new_id": "798e19f38f0934b2246be6da94c854225fbd403d",
      "new_mode": 33188,
      "new_path": "clang/lib/AST/ExprConstant.cpp"
    },
    {
      "type": "modify",
      "old_id": "ca8e2af284c2bbe4ad56b413607c37bb733ae4ab",
      "old_mode": 33188,
      "old_path": "clang/lib/AST/JSONNodeDumper.cpp",
      "new_id": "2f4aebd0845ddf19faa8678e0a3762164906207c",
      "new_mode": 33188,
      "new_path": "clang/lib/AST/JSONNodeDumper.cpp"
    },
    {
      "type": "modify",
      "old_id": "4fc4a99ad2405a6066654d0ac7f34f80e7142342",
      "old_mode": 33188,
      "old_path": "clang/lib/AST/Stmt.cpp",
      "new_id": "9ae8aea3ab37a2afa03b4e5b686fa16df9c67860",
      "new_mode": 33188,
      "new_path": "clang/lib/AST/Stmt.cpp"
    },
    {
      "type": "modify",
      "old_id": "afccba8778fd220aebdaa2a69ddca6f743b115fe",
      "old_mode": 33188,
      "old_path": "clang/lib/AST/StmtPrinter.cpp",
      "new_id": "00303005211281dec9e4c275200e1d464839ffe0",
      "new_mode": 33188,
      "new_path": "clang/lib/AST/StmtPrinter.cpp"
    },
    {
      "type": "modify",
      "old_id": "9dca5cf088a857035e6ce328c40099af209c2520",
      "old_mode": 33188,
      "old_path": "clang/lib/AST/TextNodeDumper.cpp",
      "new_id": "8c59dbd345439eccce1fe4d872f69ec93b2a2257",
      "new_mode": 33188,
      "new_path": "clang/lib/AST/TextNodeDumper.cpp"
    },
    {
      "type": "modify",
      "old_id": "9c14a25699f89b2bbf0cdf7f5175323be4ad0a68",
      "old_mode": 33188,
      "old_path": "clang/lib/Basic/LangOptions.cpp",
      "new_id": "f034514466d3fa37e90d5c10bbb78c3f13dc2231",
      "new_mode": 33188,
      "new_path": "clang/lib/Basic/LangOptions.cpp"
    },
    {
      "type": "modify",
      "old_id": "b01d5471a98360b0a75a03bc2fdda4d328adc1d0",
      "old_mode": 33188,
      "old_path": "clang/lib/CodeGen/CGObjC.cpp",
      "new_id": "10aad2e26938d9a951ebbeb08fd008a0a66d7f90",
      "new_mode": 33188,
      "new_path": "clang/lib/CodeGen/CGObjC.cpp"
    },
    {
      "type": "modify",
      "old_id": "031ef73214e763b43788d837d65efe7ce2ae3d4e",
      "old_mode": 33188,
      "old_path": "clang/lib/CodeGen/CGStmt.cpp",
      "new_id": "aeff73d525c10c3553b4efe3fa7df59ec308909d",
      "new_mode": 33188,
      "new_path": "clang/lib/CodeGen/CGStmt.cpp"
    },
    {
      "type": "modify",
      "old_id": "1074ee5d34fde3d93f526bd1193eab9398f4ddaa",
      "old_mode": 33188,
      "old_path": "clang/lib/CodeGen/CGStmtOpenMP.cpp",
      "new_id": "2708fc0470f5b48ffe772640c3aaf9d19c5b1fc5",
      "new_mode": 33188,
      "new_path": "clang/lib/CodeGen/CGStmtOpenMP.cpp"
    },
    {
      "type": "modify",
      "old_id": "c02ac18ec0198dec30a6d01e424f73c906520eaa",
      "old_mode": 33188,
      "old_path": "clang/lib/CodeGen/CodeGenFunction.h",
      "new_id": "123cb4f51f82816461c8ee25f51b7789667c061b",
      "new_mode": 33188,
      "new_path": "clang/lib/CodeGen/CodeGenFunction.h"
    },
    {
      "type": "modify",
      "old_id": "29f9cf3a7f0e32c5e1781c2da4bab9a989f00361",
      "old_mode": 33188,
      "old_path": "clang/lib/Frontend/CompilerInvocation.cpp",
      "new_id": "aadda694a0854382ebe9f7a0d7f8df0e6b6964c7",
      "new_mode": 33188,
      "new_path": "clang/lib/Frontend/CompilerInvocation.cpp"
    },
    {
      "type": "modify",
      "old_id": "bf1978c22ee9fae0e81808446d5f0a3ebd2cc7d3",
      "old_mode": 33188,
      "old_path": "clang/lib/Parse/ParseStmt.cpp",
      "new_id": "62361c066a3f3c8b3895be14dbc4bc335bf51be0",
      "new_mode": 33188,
      "new_path": "clang/lib/Parse/ParseStmt.cpp"
    },
    {
      "type": "modify",
      "old_id": "ab04fe554be82e55015bbc1f02966b313a8b6165",
      "old_mode": 33188,
      "old_path": "clang/lib/Sema/Scope.cpp",
      "new_id": "e66cce255230bb53eee06dd26daa179ed51fd29a",
      "new_mode": 33188,
      "new_path": "clang/lib/Sema/Scope.cpp"
    },
    {
      "type": "modify",
      "old_id": "86ffae9363bebd4d374d1c713fd849280520d75d",
      "old_mode": 33188,
      "old_path": "clang/lib/Sema/SemaLookup.cpp",
      "new_id": "54918c560b65530044ebdebe12432d9ea054fda5",
      "new_mode": 33188,
      "new_path": "clang/lib/Sema/SemaLookup.cpp"
    },
    {
      "type": "modify",
      "old_id": "5625fb359807ab235c8c230c1b388a92e56ee997",
      "old_mode": 33188,
      "old_path": "clang/lib/Sema/SemaStmt.cpp",
      "new_id": "ae0bb616beb82a98d984cfb6bc7ecffccdac4f83",
      "new_mode": 33188,
      "new_path": "clang/lib/Sema/SemaStmt.cpp"
    },
    {
      "type": "modify",
      "old_id": "aa1bb3232d6faca70a07c25ede77e224e791ba68",
      "old_mode": 33188,
      "old_path": "clang/lib/Sema/TreeTransform.h",
      "new_id": "fbadb8d6881a594752dcb862a2ad5c5ed39f4e1b",
      "new_mode": 33188,
      "new_path": "clang/lib/Sema/TreeTransform.h"
    },
    {
      "type": "modify",
      "old_id": "3f37dfbc3dea92173e05dde1b936b093627e12d8",
      "old_mode": 33188,
      "old_path": "clang/lib/Serialization/ASTReaderStmt.cpp",
      "new_id": "76fdd4024b0b7b788e601cd4f32b55a0eae682fd",
      "new_mode": 33188,
      "new_path": "clang/lib/Serialization/ASTReaderStmt.cpp"
    },
    {
      "type": "modify",
      "old_id": "301ed9b23c2064cc868cfe440d398bfe6b46e758",
      "old_mode": 33188,
      "old_path": "clang/lib/Serialization/ASTWriterStmt.cpp",
      "new_id": "e36d83fe4559b53ea99ddbe9a0f68ce8eda86208",
      "new_mode": 33188,
      "new_path": "clang/lib/Serialization/ASTWriterStmt.cpp"
    },
    {
      "type": "modify",
      "old_id": "546161cee33f490f727d414c6d5df20246cc0aab",
      "old_mode": 33188,
      "old_path": "clang/lib/Tooling/Syntax/BuildTree.cpp",
      "new_id": "b75f8ff6defeecc445b27648ad21de4008b80140",
      "new_mode": 33188,
      "new_path": "clang/lib/Tooling/Syntax/BuildTree.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "19f8ff300a1873fb2a257d046fbd7e7cbae1f999",
      "new_mode": 33188,
      "new_path": "clang/test/AST/ast-dump-labeled-break-continue-json.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a1ec812017557f45eb0eecdd18e0cf01098e235a",
      "new_mode": 33188,
      "new_path": "clang/test/AST/ast-dump-labeled-break-continue.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "163bb759aa59e7fccd7fb2c5c5517ab6f86e8b2c",
      "new_mode": 33188,
      "new_path": "clang/test/AST/ast-print-labeled-break-continue.c"
    },
    {
      "type": "modify",
      "old_id": "e21f6109dbd597d066b0aecc8e77d7c2c58bfb73",
      "old_mode": 33188,
      "old_path": "clang/test/Analysis/cfg.c",
      "new_id": "0db82ef2f3d70049a5aacb0e65f5f5e2560ce649",
      "new_mode": 33188,
      "new_path": "clang/test/Analysis/cfg.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f307a1bd79ab8c6570c4bc7f1a425968e34fbf0b",
      "new_mode": 33188,
      "new_path": "clang/test/CodeGen/labeled-break-continue.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4bdb5369aa8f130d641ceae81bcf47db9e715930",
      "new_mode": 33188,
      "new_path": "clang/test/CodeGenCXX/labeled-break-continue.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e9979fe437b616739d61132c20faaf8ed0bd30b3",
      "new_mode": 33188,
      "new_path": "clang/test/CodeGenObjC/labeled-break-continue.m"
    },
    {
      "type": "modify",
      "old_id": "e62ec07acc04936915481f2d8e7d4dbd3cd546ba",
      "old_mode": 33188,
      "old_path": "clang/test/OpenMP/for_loop_messages.cpp",
      "new_id": "5f6f9c9a3fbc91f6901b214f4aff915f70974fde",
      "new_mode": 33188,
      "new_path": "clang/test/OpenMP/for_loop_messages.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "81935884023ac8e092dd0eb18d66aaf54e516d05",
      "new_mode": 33188,
      "new_path": "clang/test/Parser/labeled-break-continue.c"
    },
    {
      "type": "modify",
      "old_id": "9bfd914c013c15ebb21c74583214c988a89462b2",
      "old_mode": 33188,
      "old_path": "clang/test/Sema/__try.c",
      "new_id": "06360cb0a5dcf0cf06059f229627dee1cd916825",
      "new_mode": 33188,
      "new_path": "clang/test/Sema/__try.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "78f81c484c3d50bf5e98d634f52878855339faa4",
      "new_mode": 33188,
      "new_path": "clang/test/Sema/labeled-break-continue.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "bec6c582a1f0dcbbc5f0898dc2b9b3c548b73de9",
      "new_mode": 33188,
      "new_path": "clang/test/SemaCXX/labeled-break-continue-constexpr.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3d34211ed745a992226ee6a03e911c74009b6c6a",
      "new_mode": 33188,
      "new_path": "clang/test/SemaCXX/labeled-break-continue.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2791474a579b7e12785412a416ee5e44ebaab8a1",
      "new_mode": 33188,
      "new_path": "clang/test/SemaObjC/labeled-break-continue.m"
    },
    {
      "type": "modify",
      "old_id": "37126d8f2200e7050fc37c935c7a3dbba3349157",
      "old_mode": 33188,
      "old_path": "clang/test/SemaOpenACC/no-branch-in-out.c",
      "new_id": "370722b52ab19d0fe023d80a6124435396e1b2da",
      "new_mode": 33188,
      "new_path": "clang/test/SemaOpenACC/no-branch-in-out.c"
    },
    {
      "type": "modify",
      "old_id": "5b31f97e7a2e504bbe6343989e6ec53a9ac2d395",
      "old_mode": 33188,
      "old_path": "clang/www/c_status.html",
      "new_id": "f65c34cc6402220fe82e53d9eec28d4310ac2b36",
      "new_mode": 33188,
      "new_path": "clang/www/c_status.html"
    }
  ]
}
