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 [...]
nint_error.f90
Description: Binary data
nint_error.s
Description: Binary data