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: [email protected] - phone: +31 346 214290
Saturnushof 14, 3738 XG Maartensdijk, The Netherlands