)]}'
{
  "commit": "ed5e6b87013485c7b16d825e0cbf556a1e7e3e19",
  "tree": "3ebb14e9b1c16b677f204c281dd235e469e666ef",
  "parents": [
    "52afb8dd112d52b620003998b5348b45b214e828"
  ],
  "author": {
    "name": "Peter Klausler",
    "email": "pklausler@nvidia.com",
    "time": "Tue Sep 30 10:36:52 2025 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Tue Sep 30 10:36:52 2025 -0700"
  },
  "message": "[flang] Catch calls to impure intrinsics from PURE subprograms (#160947)\n\nThe code in expression semantics that catches a call to an impure\nprocedure in a PURE context misses calls to impure intrinsics, since\ntheir designators have a SpecificIntrinsic rather than a Symbol. Replace\nthe current check with a new one that uses the characteristics of the\ncalled procedure, which works for both intrinsic and non-intrinsic\ncases.\n\nTesting this change revealed that an explicit INTRINSIC statement wasn\u0027t\ndoing the right thing for extension \"dual\" intrinsics that can be called\nas either a function or as a subroutine; the use of an INTRINSIC\nstatement would disallow its use as a subroutine. I\u0027ve fixed that here\nas well.\n\nFixes https://github.com/llvm/llvm-project/issues/157124.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "dbe1ba7fe7ec1b8a191e5dc0388f46fe08aaf754",
      "old_mode": 33188,
      "old_path": "flang/include/flang/Evaluate/intrinsics.h",
      "new_id": "fc1c8b2ba6ab71e6e1222eef33f2d13f01b787ee",
      "new_mode": 33188,
      "new_path": "flang/include/flang/Evaluate/intrinsics.h"
    },
    {
      "type": "modify",
      "old_id": "c7f174f7989dd034c6a3f993f6bceae6db586610",
      "old_mode": 33188,
      "old_path": "flang/lib/Evaluate/intrinsics.cpp",
      "new_id": "fe679da4ff98ba826b26cb406ced48d42a5b4709",
      "new_mode": 33188,
      "new_path": "flang/lib/Evaluate/intrinsics.cpp"
    },
    {
      "type": "modify",
      "old_id": "3f048ab6f7a4df81c0994643245d202b6c9fc7be",
      "old_mode": 33188,
      "old_path": "flang/lib/Semantics/expression.cpp",
      "new_id": "836500145e4a212cb20b86ff0114dc1755b5f378",
      "new_mode": 33188,
      "new_path": "flang/lib/Semantics/expression.cpp"
    },
    {
      "type": "modify",
      "old_id": "ef0b8cdfd827b7ce517d8160811388ae85082f00",
      "old_mode": 33188,
      "old_path": "flang/lib/Semantics/resolve-names.cpp",
      "new_id": "d1150a9eb67f49f7387225959e807a3c42da9b1f",
      "new_mode": 33188,
      "new_path": "flang/lib/Semantics/resolve-names.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "92326dc9e7b69064ff368e5bf7b55d0ec8da3a26",
      "new_mode": 33188,
      "new_path": "flang/test/Semantics/bug157124.f90"
    }
  ]
}
