)]}'
{
  "commit": "1e7772abcbe1ccf3fd6f2bdf5216f3dabeb55c94",
  "tree": "9f401f6833d487adf27b5c3249e68ad8f9d214c3",
  "parents": [
    "af87214b849ba064dbe6dc13972b29cc49662fd2"
  ],
  "author": {
    "name": "Krzysztof Parzyszek",
    "email": "Krzysztof.Parzyszek@amd.com",
    "time": "Wed Aug 13 15:53:59 2025 -0500"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed Aug 13 15:53:59 2025 -0500"
  },
  "message": "[flang][OpenMP] Reassociate ATOMIC update expressions (#153488)\n\nAn atomic update expression of form\n  x \u003d x + a + b\nis technically illegal, since the right-hand side is parsed as (x+a)+b,\nand the atomic variable x should be an argument to the top-level +. When\nthe type of x is integer, the result of (x+a)+b is guaranteed to be the\nsame as x+(a+b), so instead of reporting an error, the compiler can\ntreat (x+a)+b as x+(a+b).\n\nThis PR implements this kind of reassociation for integral types, and\nfor the two arithmetic associative/commutative operators: + and *.\n\nReinstate PR153098 one more time with fixes for the issues that came up:\n- unused variable \"lsrc\",\n- use of ‘outer1’ before deduction of ‘auto’.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "0c0e6158485e9d5298168eef6f9170dceb852b02",
      "old_mode": 33188,
      "old_path": "flang/lib/Semantics/check-omp-atomic.cpp",
      "new_id": "62bb2fdc6048e8f9d356c171c30c89cb3068b276",
      "new_mode": 33188,
      "new_path": "flang/lib/Semantics/check-omp-atomic.cpp"
    },
    {
      "type": "modify",
      "old_id": "6b33ca6ab583f923cf6ae9d178225c11412bb687",
      "old_mode": 33188,
      "old_path": "flang/lib/Semantics/check-omp-structure.h",
      "new_id": "a973aee28d0e2326b7222d2985be2c1429719918",
      "new_mode": 33188,
      "new_path": "flang/lib/Semantics/check-omp-structure.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "96ebb56b8d6ca53c9cf5c93227a730265ff7b3f5",
      "new_mode": 33188,
      "new_path": "flang/test/Lower/OpenMP/atomic-update-reassoc.f90"
    },
    {
      "type": "modify",
      "old_id": "3c027924a142367f7acf99fa79ad71797a0cc4d4",
      "old_mode": 33188,
      "old_path": "flang/test/Semantics/OpenMP/atomic-update-only.f90",
      "new_id": "8ae261c463b000003a28b602cd4db513ae41ecdd",
      "new_mode": 33188,
      "new_path": "flang/test/Semantics/OpenMP/atomic-update-only.f90"
    },
    {
      "type": "modify",
      "old_id": "8f8af312454045ece9cf5783fbc8f96cdfc41496",
      "old_mode": 33188,
      "old_path": "flang/test/Semantics/OpenMP/atomic04.f90",
      "new_id": "002e06be68656c2b52ced476db75fc71b40834f2",
      "new_mode": 33188,
      "new_path": "flang/test/Semantics/OpenMP/atomic04.f90"
    }
  ]
}
