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

    <tr>
        <th>Summary</th>
        <td>
            [flang] `c_f_pointer` erroneous warning
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          everythingfunctional
      </td>
    </tr>
</table>

<pre>
    When compiling something like the following code:

```fortran
program main
    use iso_c_binding

    implicit none

    type :: a
        integer, pointer :: b
    end type

    type(a), target :: c
    type(a), pointer :: d

    call c_f_pointer(cptr = c_loc(c), fptr = d)
end program
```

flang reports an error like the following:

```text
./example.f90:13:46: warning: FPTR= argument to C_F_POINTER() should not have a derived type that is not BIND(C)
 call c_f_pointer(cptr = c_loc(c), fptr = d)
```

However the standard does not make this requirement, i.e.

> 18.2.3.3 C_F_POINTER (CPTR, FPTR [, SHAPE, LOWER])
> ...
> CPTR shall be a scalar of type C_PTR ... Its value shall be
> ...
> * the result of a reference to C_LOC with a noninteroperable argument
> ...
> FPTR shall be a pointer, shall not have a deferred type parameter, and shall not be a coindexed object. ...

In fact, an example in the standard makes clear that this use case is valid

```fortran
Type t
  Real, Allocatable :: v(:,:)
End Type
Type(t), Target :: x(0:2)
Type(C_ptr) :: xloc
xloc = C_Loc (x)
...
Type(t), Pointer :: y(:)
Call C_F_Pointer (xloc, y, [3], [0])
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVU9vq7oT_TTOZnQRGELJIotckuhWqm6r_iLdZeSYAfx7xubZJm2__ZMNpEnU6i2eFBEzPnM8PvMHZq1oFOKaLH-S5XbBBtdqs8Yzmg_XCtXUg-JOaMXk4qSrj_WfFhVw3fVCCtWA1R0GHEjxF4JrEWotpX7zJq4rJOmGxFsSz888Hn-1Ns4wNVp7oxvDOuiYmCwAAINFEFYf-fEkVCVUc03kAaLrpeDCgdIK7zfdR4_gT083wD7NwU85bNAQWkKv_YuZgadPIKoqcHzFS2jBCF15AsdMg27259_i7g6q7mk5kxL4sT5OQEIL3juP3wI_Ss29YeKq543KGwKFj3ZS8U7o64NqyVQDBnttnAWmAI3R5ovUfZc1h-9uNEWE7vGddb3EqF7FJN0kKUk3We5v98aMGllg_3J49aEy0wwdKgdOQ3ncH1-eH38fdq-EFoSuwLZ6kBUo7aBlZwQGFRpxxjEF4FrmQNiw__Px95bQorxc_b9K96VSv_Sb74GginVMVcxUUGkcY-hYEExYMPj3IAz6m3l6EWF0I1y6g6SIaJRG6fW1wd_AK0PLoBD49qMl_O_X5mXnF0_Pf3avZLn9jDLdQRRFny_eHWzr737yglnOJDOg61Gy8uj3oyiCR2fhzOSAF_Q3jIRuwn0N2kE6z8TAYI0GFccxb0_PJbwJ1wLzPRfU1j0adpJ4yfA37Pu7eC_JKifrTfJrNGbOfs8M63DCMlVd4QMT10JV-I4V6NP_kbvo6uDwfFRQM-5Gd5iqFoS6za5PqgUukZmx4EKC_RDiLEwir6Ko_n2aHULJzq39ikz6kzdSas5ckGoaAmdf_emG0DI8p0zvVAWHy-A5jGPETfV7uBk374QWvvXoxXmCl8feGd9YM9B3QQD4VWiA8vjkV7R4vzhfZLs79OV2dn3MYU9upc9GKO4ZR4twIC09tvTFnYZaDsv4pqxnBRfVOq1W6YotcJ08pHFBaZJki3ad5lnxcFrxvHhY5XmcYZKyLC1Yxmme53m6EGsa0yxJ4mWyXC6TLMKMZmlG83rFshPSnGQxdkzISMpzF2nTLIS1A66TZBkndCHZCaUNH0BKw4QklPpvoVl7hx-nobEki6Wwzn5SOOFk-GqOHsstkDy-HkJ5HKarQj3YeSAuBiPXrXO9DfrtCd03wrXDKeK6I3Tv2ae_H73RvpgJ3YdoLaH7KeDzmv4TAAD__4aSQsQ">