)]}'
{
  "commit": "3cda32d5904118a0c8cd5afebc84365bf60c4262",
  "tree": "c07e5788de21ee1ec750b1eee6719c4be5e4fe0e",
  "parents": [
    "61218267a56cdef5182baa1cc1e6428d854ae697"
  ],
  "author": {
    "name": "Chuanqi Xu",
    "email": "yedeng.yd@linux.alibaba.com",
    "time": "Thu Nov 13 09:45:52 2025 +0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu Nov 13 09:45:52 2025 +0800"
  },
  "message": "[clang] [Serialization] No transitive change for MacroID and PreprocessedEntityID (#166346)\n\nSimilar to previous no transitive changes to decls, types, identifiers\nand source locations (\nhttps://github.com/llvm/llvm-project/pull/92083\nhttps://github.com/llvm/llvm-project/pull/92085\nhttps://github.com/llvm/llvm-project/pull/92511\nhttps://github.com/llvm/llvm-project/pull/86912\n)\n\nThis patch does the same thing for MacroID and PreprocessedEntityID.\n\n---\n\n### Some background\n\nPreviously we record different IDs linearly. That is, when writing a\nmodule, if we have 17 decls in imported modules, the ID of decls in the\nmodule will start from 18. This makes the contents of the BMI changes if\nthe we add/remove any decls, types, identifiers and source locations in\nthe imported modules.\n\nThis makes it hard for us to reduce recompilations with modules. We want\nto skip recompilations as we think the modules can help us to remove\nfake dependencies. This can be done by split the ID into \u003cModuleIndex,\nLocalIndex\u003e pairs.\nThis is ALREADY done for several different ID above. We call it\nnon-casacading changes\n(https://clang.llvm.org/docs/StandardCPlusPlusModules.html#experimental-non-cascading-changes).\nOur internal users have already used this feature and it works well for\nyears.\n\nNow we want to extend this to MacroID and PreprocessedEntityID. This is\nhelpful for us in the downstream as we allowed named modules to export\nmacros. But I believe this is also helpful for header-like modules if\nyou\u0027d like to explore the area.\n\nAnd also I think this is a nice cleanup too.\n\n---\n\nGiven the use of MacroID and PreprocessedEntityID are not as complicated\nas other IDs in the above series, I feel the patch itself should be\ngood. I hope the vendors can test the patch to make sure it won\u0027t affect\nexisting users.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "5d09d5536e5ab906ee60f01c5776a04b18f24352",
      "old_mode": 33188,
      "old_path": "clang/include/clang/Serialization/ASTBitCodes.h",
      "new_id": "d7d429eacd67a3f412b4b0a77b6cc44fe7bdb713",
      "new_mode": 33188,
      "new_path": "clang/include/clang/Serialization/ASTBitCodes.h"
    },
    {
      "type": "modify",
      "old_id": "4ca45a16408a68d9be641257f69306428582a8d6",
      "old_mode": 33188,
      "old_path": "clang/include/clang/Serialization/ASTReader.h",
      "new_id": "a27cfe8a9b307833b8a6a88257d415bc1b6b8b63",
      "new_mode": 33188,
      "new_path": "clang/include/clang/Serialization/ASTReader.h"
    },
    {
      "type": "modify",
      "old_id": "28c3e558640572f591a6023a27de116556f70a15",
      "old_mode": 33188,
      "old_path": "clang/include/clang/Serialization/ASTWriter.h",
      "new_id": "c77c98dffc39f5463a65e886751d3e4f4df35a00",
      "new_mode": 33188,
      "new_path": "clang/include/clang/Serialization/ASTWriter.h"
    },
    {
      "type": "modify",
      "old_id": "f20cb2f9f35ae8b8542e13a8485e1c64ad8cc219",
      "old_mode": 33188,
      "old_path": "clang/include/clang/Serialization/ModuleFile.h",
      "new_id": "783e2ba7a1f9486c230becfc2878077f144cf899",
      "new_mode": 33188,
      "new_path": "clang/include/clang/Serialization/ModuleFile.h"
    },
    {
      "type": "modify",
      "old_id": "634bf991b2aee070416156253922a6edb427d2d3",
      "old_mode": 33188,
      "old_path": "clang/lib/Serialization/ASTReader.cpp",
      "new_id": "55c52154c4113d035ea772fbd188bd241639cce2",
      "new_mode": 33188,
      "new_path": "clang/lib/Serialization/ASTReader.cpp"
    },
    {
      "type": "modify",
      "old_id": "e4618d60a8acb4c47306943e41f616967b6006f7",
      "old_mode": 33188,
      "old_path": "clang/lib/Serialization/ASTWriter.cpp",
      "new_id": "e8c0d3f2b4ee96e68c33cbf6bc1bd745d2f9f726",
      "new_mode": 33188,
      "new_path": "clang/lib/Serialization/ASTWriter.cpp"
    },
    {
      "type": "modify",
      "old_id": "4858cdbda55456dab773cdfcdf59d2537743495a",
      "old_mode": 33188,
      "old_path": "clang/lib/Serialization/ModuleFile.cpp",
      "new_id": "7f631eafcaf3508cd1669549a952f0e5278f420c",
      "new_mode": 33188,
      "new_path": "clang/lib/Serialization/ModuleFile.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "fced26490c27f4cbe1683ad1ef0a22b371818263",
      "new_mode": 33188,
      "new_path": "clang/test/Modules/no-transitive-macro-change.cpp"
    }
  ]
}
