[Bug libfortran/71363] Issue when sizeof(double) = sizeof(long double)

2016-09-21 Thread paul.mustiere at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71363

--- Comment #3 from Paul Mustiere  ---
In the script:
possible_real_kinds="4 8 10 16" i.e. it tries them all

In the for loop, when it tries to compile the dummy Fortran program to check
each kind=k existance, only 4, 8 & 16 exists.

kind=4 is defined as float,
kind=8 is defined as double,
kind=16 is defined as long double.

The issue being that long double = double in this case.

When kind=16 match in C is defined, there's the check:
16) if [ $long_double_kind -eq 10 ]; then

Could it be that kind=16 should be match to __float128,
and the check should be $long_double_kind -neq 16?

[Bug libfortran/71363] New: Issue when sizeof(double) = sizeof(long double)

2016-05-31 Thread paul.mustiere at gmail dot com
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