Thanks.

An internal compiler error is always a problem with the compiler itself.

I submitted this to our bug tracker (Bugzilla) as Problem Report 96712 on your behalf.

Follow it by looking at

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

Kind regards,
Toon.

On 8/19/20 4:22 PM, Bernd Eggen via Gcc wrote:

Hello,

I've come across an internal compiler error (in GFortran), concerning the
function NINT(), I attach a very simple source code that illustrates the
error.  Essentially I am working with 16-byte integers, and there seems no
way to ensure that NINT() returns the correct precision integer. [I am also
testing this on an Ubuntu-64 installation, see separate email.]

I tried a number of things, to no avail:


    1.   m=nint(y) ! this gives at best an 8 byte integer return and or
    larger numbers is negative,
    2.   m=nint(y,i16) ! this is the attached version, which generates
    compiler error
    3.   m=nint(y,kind=i16) ! also generates error
    4.   integer(kind=16) :: nint; ... m=nint(y) ! does not change return
    type
    5.   trying to compile with "-fdefault-integer-16" # option does not
    exist

Interestingly, in the related function, IDNINT() the "KIND" optional
argument does not even seem to be implemented

Please include all of the following items, the first three of which can be
obtained from the output of gcc -v:

    - the exact version of GCC;
    - the system type; *(Cygwin 64 on top of Windows 10)*
    - the options given when GCC was configured/built;

    -> *cygcheck -c cygwin*
    Cygwin Package Information
    Package              Version        Status
    cygwin               *3.1.6-1*        OK

    -> gcc -v
    Using built-in specs.
    COLLECT_GCC=gcc
    COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/lto-wrapper.exe
    Target: x86_64-pc-cygwin
    Configured with:
    /cygdrive/i/szsz/tmpp/gcc/gcc-9.3.0-2.x86_64/src/gcc-9.3.0/configure
    --srcdir=/cygdrive/i/szsz/tmpp/gcc/gcc-9.3.0-2.x86_64/src/gcc-9.3.0
    --prefix=/usr --exec-prefix=/usr --localstatedir=/var --sysconfdir=/etc
    --docdir=/usr/share/doc/gcc --htmldir=/usr/share/doc/gcc/html -C
    --build=x86_64-pc-cygwin --host=x86_64-pc-cygwin --target=x86_64-pc-cygwin
    --without-libiconv-prefix --without-libintl-prefix --libexecdir=/usr/lib
    --enable-shared --enable-shared-libgcc --enable-static
    --enable-version-specific-runtime-libs --enable-bootstrap
    --enable-__cxa_atexit --with-dwarf2 --with-tune=generic
    --enable-languages=c,c++,fortran,lto,objc,obj-c++ --enable-graphite
    --enable-threads=posix --enable-libatomic --enable-libgomp
    --enable-libquadmath --enable-libquadmath-support --disable-libssp
    --enable-libada --disable-symvers --with-gnu-ld --with-gnu-as
    --with-cloog-include=/usr/include/cloog-isl --without-libiconv-prefix
    --without-libintl-prefix --with-system-zlib --enable-linker-build-id
    --with-default-libstdcxx-abi=gcc4-compatible
    --enable-libstdcxx-filesystem-ts
    Thread model: posix
    gcc version 9.3.0 (GCC)

    and for Gfortran:

    -> gfortran --version
    GNU Fortran (GCC) *9.3.0*
    Copyright (C) 2019 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is
    NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
    PURPOSE.

    -> gfortran -v
    Using built-in specs.
    COLLECT_GCC=gfortran
    COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/lto-wrapper.exe
    Target: x86_64-pc-cygwin
    Configured with:
    /cygdrive/i/szsz/tmpp/gcc/gcc-9.3.0-2.x86_64/src/gcc-9.3.0/configure
    --srcdir=/cygdrive/i/szsz/tmpp/gcc/gcc-9.3.0-2.x86_64/src/gcc-9.3.0
    --prefix=/usr --exec-prefix=/usr --localstatedir=/var --sysconfdir=/etc
    --docdir=/usr/share/doc/gcc --htmldir=/usr/share/doc/gcc/html -C
    --build=x86_64-pc-cygwin --host=x86_64-pc-cygwin --target=x86_64-pc-cygwin
    --without-libiconv-prefix --without-libintl-prefix --libexecdir=/usr/lib
    --enable-shared --enable-shared-libgcc --enable-static
    --enable-version-specific-runtime-libs --enable-bootstrap
    --enable-__cxa_atexit --with-dwarf2 --with-tune=generic
    --enable-languages=c,c++,fortran,lto,objc,obj-c++ --enable-graphite
    --enable-threads=posix --enable-libatomic --enable-libgomp
    --enable-libquadmath --enable-libquadmath-support --disable-libssp
    --enable-libada --disable-symvers --with-gnu-ld --with-gnu-as
    --with-cloog-include=/usr/include/cloog-isl --without-libiconv-prefix
    --without-libintl-prefix --with-system-zlib --enable-linker-build-id
    --with-default-libstdcxx-abi=gcc4-compatible
    --enable-libstdcxx-filesystem-ts
    Thread model: posix
    gcc version 9.3.0 (GCC)


    - the complete command line that triggers the bug; *see below*
    - the compiler output (error messages, warnings, etc.); *see below* and
    - the *preprocessed* file (*.i*) that triggers the bug, generated by
    adding -save-temps to the complete compilation command, or, in the case
    of a bug report for the GNAT front end, a complete set of source files (see
    below).

-> gfortran -save-temps -o nint_error.e *nint_error.f90*
nint_error.f90:17:0:

    17 |      m=nint(y,i16)
       |
internal compiler error: in build_round_expr, at
fortran/trans-intrinsic.c:396
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://gcc.gnu.org/bugs/> for instructions.

(and with IDNINT()):

-> gfortran -save-temps -o nint_error.e nint_error.f90
nint_error.f90:17:7:

    17 |      m=idnint(y,i16)
       |       1
Error: Too many arguments in call to ‘idnint’ at (1)

Thanks for looking into this, Bernd (Eggen)

PS Here a part of the output if omitting the "KIND" optional argument in
NINT():
-> ./nint_error.e | & more

i16= 16
1 1 1.0000000000000000 0
2 2 2.0000000000000000 1
3 4 4.0000000000000000 3
4 8 8.0000000000000000 7
[...]
31 1073741824 1073741824.0000000 1073741823
32 2147483648 2147483648.0000000 2147483647
33 4294967296 4294967296.0000000 *-1*


As you can see, after 2^31-1 = 2147483647 it goes wrong and yields -1

If increasing the integer by 1, it goes wrong thus:

[...]
2147483647 2147483647.0000000 2147483647
2147483648 2147483648.0000000 -2147483648
[...]



--
Toon Moene - e-mail: t...@moene.org - phone: +31 346 214290
Saturnushof 14, 3738 XG  Maartensdijk, The Netherlands

Reply via email to