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

    <tr>
        <th>Summary</th>
        <td>
            NUMERIC_STORAGE_SIZE should change to 64 when -fdefault-integer-8 and -fdefault-real-8 are set
        </td>
    </tr>

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

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

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

<pre>
    Fortran 16.10.2.23 and 19.5.3.2 say that when `INTEGER`, `REAL`, and `LOGICAL` are 64b and `COMPLEX` and `DOUBLE PRECISION` are 128b, `NUMERIC_STORAGE_SIZE` should be 64.

I applaud LLVM for implementing the other aspects of this correctly, unlike most Fortran compilers.  Intel Fortran is the only other compiler that supports this configuration at all, and it too fails to change `NUMERIC_STORAGE_SIZE` to 64 (I reported it this morning).

```
% /opt/llvm/latest/bin/flang-new fsizes.F90 -fdefault-integer-8 -fdefault-real-8 && ./a.out
 NUMERIC_STORAGE_SIZE= 32
 STORAGE_SIZE(LOGICAL)= 64
 STORAGE_SIZE(INTEGER)= 64
 STORAGE_SIZE(REAL)= 64
 STORAGE_SIZE(DOUBLE PRECISION)= 128
 STORAGE_SIZE(COMPLEX)= 128
```

```fortran
! fsizes.F90
program main
    use iso_fortran_env
    implicit none
    logical :: l
    integer :: i
    real :: r
    double precision :: d
    complex :: c
 print*,'NUMERIC_STORAGE_SIZE=',NUMERIC_STORAGE_SIZE
 print*,'STORAGE_SIZE(LOGICAL)=',STORAGE_SIZE(l)
 print*,'STORAGE_SIZE(INTEGER)=',STORAGE_SIZE(i)
 print*,'STORAGE_SIZE(REAL)=',STORAGE_SIZE(r)
 print*,'STORAGE_SIZE(DOUBLE PRECISION)=',STORAGE_SIZE(d)
 print*,'STORAGE_SIZE(COMPLEX)=',STORAGE_SIZE(c)
end program main
```

# LLVM Version
```
% /opt/llvm/latest/bin/flang-new --version
flang-new version 19.0.0git (https://github.com/llvm/llvm-project.git d1f585056f71bc63bd2e71d744051139809e5d8b)
Target: arm64-apple-darwin22.6.0
Thread model: posix
InstalledDir: /opt/llvm/latest/bin
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVk1v2zgQ_TX0ZWCBoj5sHXxwHbsw4DZFmhaLvQSUNJLYpUiBpNJmf_2CllTHiTbIYoEgBuc9vjFnnjnk1opaIW5I8oEkNwveu0abzQ-sqoa3rVblItfl0-agjTNcQZgGIQ1YwCLgqoQwC5IgChhY_gSu4Q5-NqiApPT4-X7_cX9HUkrYzgfu9tvTuPI7SUpPtx-Pu3MQuEFI43xCdrefvpz2f5yRIXJz--3DaQ9f7va749fj7edpU8jW-Zjg87dP-7vj7uHr_e3d9uP-4evxz72n2Ub3soTcZwgIvSF0O_w_Au86yfsSTqfvn6DSBkTbSWxROaFqcA2Cdg0a4LbDwlnQFbhGWCi0MVg4-eRT90qKvxBabR1MZSp02wmJxgYAR-VQ_kaEHXSVfBrFJ-5QP9t3nTbOTolUJerecCe0Au6ASzlVUDhwWkPFhbTgNBQNVzW-VQmnIY2BsPURDPosOKj4TK02SqiasOyqRr5jw9-wZAkQdtCdI-wg5WPrP7hD69e5UIQdKslVvVT4Eyor_kYbHDIKy6rEivfSLYVyWKNZrp_FDHK5XANhKWEpBIQdeKB7N6SE2dNENxCxkXAFsPVkK5Z5VhrPsyZ_vs06m_ZtyitnDvSQref5k7df0F4W-jpYDe6ZmhA-q-0Q64yuDW-h5WJkAQD0FkFY_TBuf0D1eAG910UhHCit8BKWuhYFl0CiLYm2IJ9tGFo3IeKC-AZOYXMJl7rPJUJnsBDWG3iklBeKN7_EXxNSjEhnhHKEbQnbEbb6FwcQtiJsNwvOqbxlk0HqBUN67B1KV1aaVRLvVLrYbVbGvFNm3pKzkuU7Ja9cO6tU_FZCVcJrP84bnEXD5fsdjXfI_790lsvH51IXYAz7kUUDWgvnL8LGuc5677EDYYdauKbPg0K3zxLJx3bZGf0DCxf4XWVYJeuEJmm1CvMijfKS4SosV3FMkzCMsjXNMCn9VBrLcc9Njc67m5s2jZd-6OCy5OanUIwFaTAe874xyEtodYnSszttxa9xUinruJRY3gjjoTercV3CRbmJyizK-AI34SpkYRyyMFw0myrJMl6yLF7zgqbIacrzDJMwzUpe0ThciA2jLKYxjUIap0kYxHS94mlFM56HiElOYootFzLw3yLQpl4Ia3vcrFfxKl1InqO053cFY-c2EMb8E8NszjXN-9qSmEphnb0oOOEkbuZ-09McH8fcMMvOr4254eIH5KsB4x8MFt2iN3Lz3zpP2OF8NkvY4Xy8fwIAAP__gzCriA">