)]}'
{
  "commit": "96bdfd02f4aa1ab62eb156f2ce84d0e86b2af2de",
  "tree": "d2c21e3b90e483c45d2361bdd0224b6eca2412c1",
  "parents": [
    "fb46dd58f144ce143238e4f9bc6d8c00edd96dcb"
  ],
  "author": {
    "name": "Jerry DeLisle",
    "email": "jvdelisle@gcc.gnu.org",
    "time": "Fri Jun 05 10:20:36 2026 -0700"
  },
  "committer": {
    "name": "Jerry DeLisle",
    "email": "jvdelisle@gcc.gnu.org",
    "time": "Wed Jun 10 09:41:07 2026 -0700"
  },
  "message": "fortran: ASSOCIATE with contained-function selector rejecting type-bound calls\n\nTwo issues prevented ASSOCIATE constructs whose selector is a call to a\ncontained function from subsequently calling type-bound procedures on the\nassociate name.\n\nWhen the selector is a contained function, resolving it\nat parse time (before CONTAINS is fully processed) prematurely set the\nfunction\u0027s attribute to FL_PROCEDURE/EXTERNAL, conflicting with its later\ndeclaration as an internal procedure and giving a spurious \"attribute\nconflict\" error.\n\nWhen the first access is a generic type-bound procedure name, no candidate\ntype was found, and the associate name got no type, giving \"no IMPLICIT type\".\nNow also search type-bound procedure names via gfc_find_typebound_proc; exclude vtable\ntypes to avoid false positives.\n\nAssisted by: Claude Sonnet 4.6\n\n\tPR fortran/125530\n\ngcc/fortran/ChangeLog:\n\n\t* match.cc (gfc_match_call): Route ASSOCIATE names followed by \u0027%\u0027\n\tto match_typebound_call without first resolving the selector, to\n\tavoid prematurely marking a contained-function selector as EXTERNAL.\n\t* symbol.cc (find_derived_types): Also search type-bound procedure\n\tnames via gfc_find_typebound_proc when inferring the type of an\n\tinferred-type ASSOCIATE name; exclude vtable types.\n\ngcc/testsuite/ChangeLog:\n\n\t* gfortran.dg/associate_contained_func_typebound.f90: New test.\n\t* gfortran.dg/associate_contained_func_typebound_2.f90: New\n\trun-time test exercising generic resolution and a module-scope\n\tselector.\n\n(cherry picked from commit 64fee7f4475c756fc17fa9e15aee7683e716ba8a)\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "e8f2cd8580cc3c31f376a689d744f1c14e71dda5",
      "old_mode": 33188,
      "old_path": "gcc/fortran/match.cc",
      "new_id": "24c872de4bbd0162a2e4d6ac6d030f191b30f7ba",
      "new_mode": 33188,
      "new_path": "gcc/fortran/match.cc"
    },
    {
      "type": "modify",
      "old_id": "d2e93755c537f49ca40deefc475941e8da37b2f9",
      "old_mode": 33188,
      "old_path": "gcc/fortran/symbol.cc",
      "new_id": "5a224be9884acc6b629a3ea21d88dd8831ead412",
      "new_mode": 33188,
      "new_path": "gcc/fortran/symbol.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f71447173491805383f87b441376e8f357873a1f",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gfortran.dg/associate_contained_func_typebound.f90"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "eaa85083011fdb7c7f2e0ba346a459cbc0b915ff",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gfortran.dg/associate_contained_func_typebound_2.f90"
    }
  ]
}
