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

    <tr>
        <th>Summary</th>
        <td>
            [flang] c_long_double support
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          ivan-pi
      </td>
    </tr>
</table>

<pre>
    For some reason flang allows the use of `c_long_double` in some contexts, but not in others:

```
program check_c_types
    use, intrinsic :: iso_c_binding
    implicit none

#if WITH_INTERFACE
    interface
 function strtold( str, endptr ) result(d) bind(C, name="strtold" )
 !! <stdlib.h> :: long double strtold(const char *str, char **endptr)
 import
 character(kind=c_char,len=1),dimension(*),intent(in) :: str
 type(c_ptr), intent(inout) :: endptr
            real(c_long_double) :: d
 end function strtold
    end interface
#endif

    print *, "--- Floating Point Type Properties ---"
    print *

    ! Properties for C_LONG_DOUBLE
    ! Note: Some compilers/platforms may map this to the same as C_DOUBLE
    print *, "Type: C_LONG_DOUBLE"
    print *, "  Precision (digits): ", precision(0.0_c_long_double)
    print *, "  Range (exponent):   ", range(0.0_c_long_double)
    print *, "  Smallest Positive:  ", tiny(0.0_c_long_double)
    print *, "  Largest Positive: ", huge(0.0_c_long_double)
    print *, "  Size in bytes:      ", c_sizeof(0.0_c_long_double)
    print *, "  Kind value:         ", c_long_double

end program check_c_types
```

```
$ flang check_c_types.F90 && ./a.out
 --- Floating Point Type Properties ---

 Type: C_LONG_DOUBLE
   Precision (digits):  33
   Range (exponent): 4931
   Smallest Positive:   3.3621031431120935062626778173217526E-4932
 Largest Positive:    1.189731495357231765085759326628007E+4932
   Size in bytes:       16
   Kind value:          16
```

```
$ flang -DWITH_INTERFACE check_c_types.F90 && ./a.out
error: Semantic errors in check_c_types.F90
./check_c_types.F90:12:13: error: REAL(KIND=16) is not an enabled type for this target
              real(c_long_double) :: d
 ^^^^^^^^^^^^^^^^^^^^^^^
```

The issue surfaced when trying to compile json-fortran: https://github.com/jacobwilliams/json-fortran/issues/619
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJysVktv2zgQ_jX0ZWBDHFqvgw-uH7tFgzRos9ijQUm0zZYiBZJK6_76xUh267wW6WIDIZbIb755DylD0Aer1IKl71i6nsg-Hp1f6Adpp52eVK45LbbOQ3CtAq9kcBb2RtoDSGPctwDxqKAPCtweWJbUO-PsYde4vjKKZQloO4rWzkb1PQaGK6j6CNZF2nPxqHxgYsmS4cmS85MsO-8OXrZQH1X9dVfv4qlTgSVLACCFRKRt9NoGXQMxiCXo4Hb1rtK20fZwxuq2M7rWpNKqsxoUeg9_v7__c_f-9n7zabtcbS5oG5Xfy5qQsO9tHbWzEKKPzjQMC3ol1co2XfTAsASvQm8iw6KhL1LOsFgRyMpWMbFmiD8JkESImyFnyIGJVYiN0dXsyMTm4gcFEcYgXumunQ0R6qMkvcuzIZdPhsvRpjO_bjvnI70RQtZReYbFV7JOrOsdLTJcGWWZWHOSwVWjW2WDdpZhMTDSIgXEknfakntnA0l5sgTKCRm2O-sdc3LBuz5eiZytG8N8-fNKmoHgumx-yTQEV7Z5nomRhrauM8ZQKNvo_ZhmQnRe2zjGZwUMcTqdwtY4GbU9wJ2jzftTp-DOu075qFWA6XTKEJ_J_6SktF3B987Danfz8faP3frjX-9uNlewWxcV-fF5bIG204bKHbedkXHvfBuglSdoZQfxqANEN_RTkK0CGWD1mPGpL2Q4sT_W_oLpIxzgzqtaU4KBqlUfNPVjSRQkhSvoLgCGRTJLdk_z8irzJ2kPiljV987ZoQAGXrgwewL8LuvnVhqjQoQ7F3TUD4O3F8ao7el3CW-kPzzlO9Md-_9gn_6haIpVp6jC6O4vj-td0D-U2_8u6QdtG3iQplc_Ga9Jr1mGkqQeeG1WXs_Tp584Pw_yR0KzbZkAw4xhBjOGWzmjLk6W8MbGGbvk5cocPH69BkGIEfJaMc1LwUfEy4UBYiYy5Ingc8E5JqVIkwwzzPK84LlAnqeYbabzUgwt8lIxAACf8aLMBZ-XqUhzFDzP0qRI87QUmGVYJEm-YfjuwvJaFQDPxu2X8zluvyk_0_Xjk-ptCVPeOz_MHtVKG3UNw0ogS58RsGRJss_XxZIj_RPDBL9QftosbxgWH97frun0yGhi6zCc6dKCsrIyqhkOh2E6jqONoh2fjP-3HQAs3fwPz7No3x8V6BB6BaEfDpAGvh2VhehPVOPRXSY2fAnOTvfORy8tWXWMsRsuLbhluD3oeOyrWe1ahtsvsnbVN22Mli0N-keiuB300XrGy0mzEE0pSjlRC55nRVnO8zKdHBdYJ-m8mPMyTUrJpUDZqDJPq6JKs5rzZKIXmGCWcOScYybSWVXM67yUmCXFXPJizuaJaqU2M2Me2pnzh8mgeMHznM9xYmSlTLhc-fyCUNOqPwQ2T4wOMfySizqa4XI41CJL149HEIS-o3vGpPdm8S9hIb7zz7Tz7ouq43U0znY9LPCfAAAA__-DxB1r">