<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/115673>115673</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [Flang] Incorrect execution result when procedure statement and generic statement are declared with a different procedure-name and a different generic-spec in two type-bound procedures
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            flang
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          ohno-fj
      </td>
    </tr>
</table>

<pre>
    ```
Version of flang-new : 20.0.0(74b56c7eb807e2ba54bd7a2bcfda5d0bceff1c0c)/AArch64
```

When `procedure` statement (`binding-name => procedure-name`) and `generic` statement (`generic-spec => binding-name-list`) are declared with a different `procedure-name` and a different `binding-name-list` in two `type-bound procedures (ty_21 and ty_4)`, the result is not correct.  
The expected value of the variable (`n`) is 21.

The following are the test program, Flang-new, Gfortran and ifx compilation/execution result.

sngg787n_22.f90:
```fortran
module m4
  type :: ty_21
   contains
     procedure, private,nopass :: p21=>proc_21
 generic                   :: gen_name=>p21
  end type ty_21
contains
  subroutine proc_21(c)
    character c
 write(1,*)21
  end subroutine proc_21
end module m4

module m6
  use m4
  type, extends(ty_21) :: ty_4
   contains
 generic                   :: gen_name=>p45
     procedure, private,nopass :: p21=>proc_42
     procedure, private,nopass :: p45=>proc_45
  end type ty_4
contains
  subroutine proc_45(h)
    complex(16) ::h
 write(1,*)80
  end subroutine proc_45
  subroutine proc_42(c)
 character c
    write(1,*)44
  end subroutine proc_42
end module m6

program main
  use m6
  type(ty_4) :: v
  call v%gen_name('1')
  rewind 1
  read(1,*) n
  if (n/=21) print *,100144,n
  write(6,*) "n = ", n
  print *,'pass'
 close(1,STATUS="DELETE")
end program main
```

```
$ flang-new sngg787n_22.f90; ./a.out
 100144 44
 n =  44
 pass
$
```

```
$ gfortran sngg787n_22.f90; ./a.out
 100144          44
 n =           44
 pass
$
```

```
$ ifx sngg787n_22.f90; ./a.out
 n =           21
 pass
$
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVk1v4zYQ_TX0ZWCDGn364IN3HRcFetu0PQYUNbK4kEmBpOzk3xeUJX_vdoM1gsQiNW8e37wMRzindppoxdIvLN3MRO8bY1em0WZef5-VpvpYsYyPP3zD-Pofsk4ZDaaGuhV6N9d0BBavAfmCLzjDIk_KNJM5lQXPCUuRJmWVCyxlXYm04qWkuo4klwyXDLfrtZVNlpzA73Kdfv_bkAaW8c4aSVVviWUcnBee9qQ9MCxYxkulKxXYiD0BizcsfoFzwLAaUHEJQlcBbEearJLPoMatuetITlDX8PNWOT-hWYKKZCssVXBUvgEBlaprsgPeFemJw0Dg7qVn6KA0-KMJ2_6jo3lpel1djuQCWf_xhtEA6D_ekqBnYPUVfENgyfWtB-VAGw_SWEvSLwBOmr42BPTekfRUwUG0PYWChriDsEqULY1i6PGgygFGi-uyBIjatK05Kr0bhAjhnpwPLHdW7AOV7eSR8PBHbay3Qg-UVf0O0uw71QqvjGa4pXeSffg-kr9J5_Rulxe5fkNc1EvO4vWdZUbs0-reVH1LsB99BRA0DDYNTh1kmzZAGu2F0u68ABeVA-nOqoPw4as2nXBuQukwOpkjvH0BHN0Dj58xbkf6bfDCKfjChIY6dnTN756c60treq80wZQWi-E_6cxeNsIK6cmCHBePVgX-RcTwK8M1w-Vt0iegw27YuxPyVt1sQundvdZBOXr3pCs3GTXY6FKB5EcF-KyASfp7lUvw0_FJeh2fPitg8mv1S1KGRXNbP7PvWnoP9coukjU_rGXBf1bLC7uHHby1zqNvAJ6kS5KfpsNH62TX1hlbA-yF0jfuyW7dU4wdbdL8MG1L0bZwYJiebYAFwzximF_JaOmodAXR5VlUN8eAc3ZVh1YX-g-LNyeXdlYNt8Ga4deI8yhJggemgEmT7ALGEHW4KsKX4Jzzu9dIDPPgokB0VLw1bhL32-v69e9vwVaIm5e_Xl5fBqjlRc5H5Z7elveLmFzd0w9N9AssGG7FwvR-JHU6L5zLfDrX5Xk4wgT9OR67qf3_Oo3z557P48ZvEAtX0S9wuk997qL_n3pWreJqGS_FjFZRHkdY8ChLZ82qivNEiLjmFRVlLpdRlNW5wDQjXsokLmZqhRyTKIo4xnyJ6aIqE55TXchlHKVJUbOE016odtG2h_3C2N1MOdfTKorSLI9nrSipdcOAhzg4IRgr3czsKgTMy37nWMLD1OEuEF75dpgKh_ubpRv4U48zBNxf03AMA9q5c17NU-Gan9r51epPZ6bbgelhWroZzsYR6el8NOttu2q871zoILhluN0p3_TlQpo9w2046vhn3lnznaRnuB2kcwy3o3qHFf4XAAD__0IwMzo">