https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71363

            Bug ID: 71363
           Summary: Issue when sizeof(double) = sizeof(long double)
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libfortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: paul.mustiere at gmail dot com
  Target Milestone: ---

Hello,

I am building the GNU toolchain for Android with support for Fortran, and
encountered an issue when targeting x86 for the runtime library.

Note: I'm using the toolchain sources provided by Google, but as far as I can
tell the Fortran part is simply 4.9 since they are not trying to build with
Fortran.

In intrisics/cshift0.c, I get a 'duplicate case value'
(http://paste.ubuntu.com/16861425/). As far as I can tell:

- GFC_DTYPE_REAL_16 is defined (but not GFC_DTYPE_REAL_10), hence GFC_REAL_16
is defined as long double.
- sizeof(long double) = sizeof(double) = 8, which causes the duplicate case.

I find a workaround which consists of detecting both sizes in mk-kinds-h.sh and
checking that they are not equal before defining GFC_REAL_16. The rest of the
toolchain compiles fine, but I am not sure it's ideal.
Also, I'm curious as to why Fortran seems to be fine with real (kind=16) but C
doesn't seem to be able to hold variables that big.

I know I'm not using the regular GNU toolchain but any help is appreciated.

Cheers,
Paul Mustiere

Reply via email to