)]}'
{
  "commit": "7b60a368fb19b33f8676482a233d389cbc47b85e",
  "tree": "cf52976b08a4098d3d700ecaf59956592e4c2260",
  "parents": [
    "d22b7d0195dbe3ebe52fd71f43f42aac956d3e5e"
  ],
  "author": {
    "name": "Joshua Berne",
    "email": "berne@notadragon.com",
    "time": "Mon Sep 14 10:16:28 2026 -0400"
  },
  "committer": {
    "name": "Jason Merrill",
    "email": "jason@redhat.com",
    "time": "Mon Sep 14 13:22:57 2026 -0400"
  },
  "message": "c++: fix nested instances of modifiable_tracker [PR127282]\n\nPR c++/127282 - [[assume]]: a nested assumption\u0027s side effects are not\nrolled back during constant evaluation\n\nDuring constant evaluation of the predicate of an [[assume]] attribute a\npointer to a set of modifiable values is stored in the\nconstexpr_global_ctx.  The class modifiable_tracker populates this value\nwhen evaluation of the predicate starts and clears it when it is\ncomplete, which results in nullptr instead of the original set when an\n[[assume]] is evaluated during the evaluation of the predicate of\nanother assume.\n\nFix this by storing the previous value (nullptr in non-nested cases) and\nrestoring it upon destruction instead of clearing the global value.\n\n\tPR c++/127282\n\ngcc/cp/ChangeLog:\n\n\t* constexpr.cc (modifiable_tracker::modifiable_tracker): Save the\n\tcurrent global pointer to the modifiable set.\n\t(modifiable_tracker::~modifiable_tracker): Restore the original\n\tpointer to the modifiable set instead of clearing it.\n\ngcc/testsuite/ChangeLog:\n\n\t* g++.dg/cpp23/attr-assume10.C: Add a case with a nested assumption.\n\nSigned-off-by: Joshua Berne \u003cberne@notadragon.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7219c55c9ceba7469a68efc2e1e24da2e75403c2",
      "old_mode": 33188,
      "old_path": "gcc/cp/constexpr.cc",
      "new_id": "18d361c24325feeda692fa8e93db9cae06a8e762",
      "new_mode": 33188,
      "new_path": "gcc/cp/constexpr.cc"
    },
    {
      "type": "modify",
      "old_id": "475555ac415ddeb989eadf5701e8df3fc1cc66b5",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/g++.dg/cpp23/attr-assume10.C",
      "new_id": "3f4af3fae95eb9ffca125babb77716af775d2b92",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/g++.dg/cpp23/attr-assume10.C"
    }
  ]
}
