)]}'
{
  "commit": "37156835e3d725b6d750f000be33ba3814bb2310",
  "tree": "56d71c06fb4c7cba0f335d85bc051c7b7f787727",
  "parents": [
    "0e146208e5a4a6aa5cd7e52d93882eca71d8e50c"
  ],
  "author": {
    "name": "Al Viro",
    "email": "viro@zeniv.linux.org.uk",
    "time": "Thu Dec 18 00:01:19 2025 -0500"
  },
  "committer": {
    "name": "Al Viro",
    "email": "viro@zeniv.linux.org.uk",
    "time": "Thu Dec 18 02:38:24 2025 -0500"
  },
  "message": "lift handling of -\u003eimmutable into dup_token()\n\nWe need to make sure that any struct string with more than one token\nrefering to it will have -\u003eimmutable set; that\u0027s what de1fa7e60 (\"Make\nmacro expanded string immutable\") tried to achieve.  Unfortunately, it\nwas not enough - constructing an example where an unexpanded argument gets\nseveral copies is very easy (see the testcase in this commit).\n\nA better place for dealing with that is dup_token() - that\u0027s guaranteed\nto catch all such tokens and with sane code generation (\u003d\u003d with compiler\nmade certain that *streampos can\u0027t be altered by stores to alloc-\u003epos)\nit\u0027s quite cheap; we already have alloc-\u003epos in registers and checking\nif the lower 6 bits happen to be 001000 or 001001 (TOKEN_STRING and\nTOKEN_WIDE_STRING resp.) doesn\u0027t take much.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "be4e9d77ec0c6e43ff4dc221a58052c57ec3bd65",
      "old_mode": 33188,
      "old_path": "pre-process.c",
      "new_id": "4e322855d600fd85862e1d24d69194c010385ab5",
      "new_mode": 33188,
      "new_path": "pre-process.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9142ad0ee835afd903e25fb12d72fd1f5e073df3",
      "new_mode": 33188,
      "new_path": "validation/preprocessor/double-escapes.c"
    }
  ]
}
