Re: beta gfortran 14.x.y (using -march=native and intrinsic repeat) gives a signal SIGILL
Dear Paul / Jerry, - Mensaje original - > De: "Paul Richard Thomas" > Para: "Jerry D" > CC: "Jorge D'Elia" , "Gfortran List" , "Jorge D'Elia" > > Enviado: Viernes, 11 de Agosto 2023 13:55:43 > Asunto: Re: beta gfortran 14.x.y (using -march=native and intrinsic repeat) > gives a signal SIGILL > > I wonder why the development 14.0.0 doesn't exhibit this behaviour? > > Could you please rerun with the compile options -g -fdump-tree-original . > > The later should generate a file *.original with the content: > > void test () > { > character(kind=1) cc[1:32]; > > __builtin_memmove ((void *) , (void *) &" > "[1]{lb: 1 sz: 1}, 32); > { >struct __st_parameter_dt dt_parm.0; > >dt_parm.0.common.filename = &"test_repeat.f90"[1]{lb: 1 sz: 1}; >dt_parm.0.common.line = 7; >dt_parm.0.common.flags = 128; >dt_parm.0.common.unit = 6; >_gfortran_st_write (_parm.0); >{ > character(kind=1) str.1[38]; > character(kind=1) str.2[41]; > > _gfortran_concat_string (38, (character(kind=1)[1:] *) , > 6, &" cc : "[1]{lb: 1 sz: 1}, 32, ); > _gfortran_concat_string (41, (character(kind=1)[1:] *) , > 38, (character(kind=1)[1:] *) , 3, &"end"[1]{lb: 1 sz: 1}); > _gfortran_transfer_character_write (_parm.0, > (character(kind=1)[1:] *) , 41); >} >_gfortran_st_write_done (_parm.0); > } > } > > Note that repeat is reduced to the builtin memmove with 32 spaces going to cc. Ok, then using: $ gfortran --version GNU Fortran (GCC) 14.0.0 20230808 (experimental) $ gfortran -mtune=native -march=native -fcheck=all -std=f2018 -Wall -Werror -Wextra -g -fdump-tree-original -o test.exe test.f90 $ cat test.f90.005t.original __attribute__((fn spec (". "))) void test () { static logical(kind=4) is_recursive.0 = 0; character(kind=1) cc[1:32]; try { if (is_recursive.0) { _gfortran_runtime_error_at (&"At line 1 of file test.f90"[1]{lb: 1 sz: 1}, &"Recursive call to nonrecursive procedure \'test\'"[1]{lb: 1 sz: 1}); } is_recursive.0 = 1; __builtin_memmove ((void *) , (void *) &" "[1]{lb: 1 sz: 1}, 32); { struct __st_parameter_dt dt_parm.1; dt_parm.1.common.filename = &"test.f90"[1]{lb: 1 sz: 1}; dt_parm.1.common.line = 7; dt_parm.1.common.flags = 128; dt_parm.1.common.unit = 6; _gfortran_st_write (_parm.1); { character(kind=1) str.2[38]; _gfortran_concat_string (38, (character(kind=1)[1:] *) , 6, &" cc : "[1]{lb: 1 sz: 1}, 32, ); _gfortran_transfer_character_write (_parm.1, (character(kind=1)[1:] *) , 38); } _gfortran_st_write_done (_parm.1); } } finally { is_recursive.0 = 0; } } __attribute__((externally_visible)) integer(kind=4) main (integer(kind=4) argc, character(kind=1) * * argv) { static integer(kind=4) options.3[7] = {1282, 1947, 0, 1, 1, 1, 31}; _gfortran_set_args (argc, argv); _gfortran_set_options (7, [0]); test (); return 0; } $ test.exe Program received signal SIGILL: Illegal instruction. Backtrace for this error: #0 0x14aded839b1f in ??? #1 0x4011c2 in test at /home/jdelia/TESTS/test.f90:6 #2 0x4012ae in main at /home/jdelia/TESTS/test.f90:8 Illegal instruction (core dumped) > Regards > Paul > > On Fri, 11 Aug 2023 at 17:21, Jerry D via Fortran wrote: >> >> On 8/11/23 5:34 AM, Jorge D'Elia via Fortran wrote: >> > Dear GFortran developers, >> > >> > With the beta gfortran 14.x.y versions we are noticing some runtime >> > errors in a production code. >> > >> > One type of runtime errors is related to the concurrent use of the >> > intrinsic "repeat" when the source code is compiled with the >> > flag -march=native, please, see below: >> > >> > $ cat test.f90 >> > program test >> >implicit none >> >integer , parameter :: iin = kind (1) >> >integer (iin), parameter :: pp = 32 >> >character (len=pp) :: cc >> >cc (1:pp) = repeat (" ",pp) >> >write (*,*)" cc : " // cc >> > end program test >> > >> > $ gfortran --version >> > GNU Fortran (GCC) 14.0.0 20230808 (experimental) >> > Copyright (C) 2023 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. >> > >> > a) Compiling with the flag -mtune=native only, without -march=native, the >> > test >> > is ok: >> > >> > $ gfortran -mtune=native -fcheck=all -std=f2018 -Wall -Werror -Wextra -Og >> > -o >> > test.exe test.f90 >> > $ test.exe >> >cc : >> > >> > b) However, compiling with the flag -march=native: >> > >> > $ gfortran -march=native -fcheck=all -std=f2018 -Wall -Werror -Wextra -Og >> > -o >> > test.exe test.f90 >> > $ test.exe >> > >> > Program received signal SIGILL: Illegal instruction. >> > >> > Backtrace for this error: >> > #0 0x14fae277fb1f in ??? >> > #1 0x4011ad in
Re: beta gfortran 14.x.y (using -march=native and intrinsic repeat) gives a signal SIGILL
I wonder why the development 14.0.0 doesn't exhibit this behaviour? Could you please rerun with the compile options -g -fdump-tree-original . The later should generate a file *.original with the content: void test () { character(kind=1) cc[1:32]; __builtin_memmove ((void *) , (void *) &" "[1]{lb: 1 sz: 1}, 32); { struct __st_parameter_dt dt_parm.0; dt_parm.0.common.filename = &"test_repeat.f90"[1]{lb: 1 sz: 1}; dt_parm.0.common.line = 7; dt_parm.0.common.flags = 128; dt_parm.0.common.unit = 6; _gfortran_st_write (_parm.0); { character(kind=1) str.1[38]; character(kind=1) str.2[41]; _gfortran_concat_string (38, (character(kind=1)[1:] *) , 6, &" cc : "[1]{lb: 1 sz: 1}, 32, ); _gfortran_concat_string (41, (character(kind=1)[1:] *) , 38, (character(kind=1)[1:] *) , 3, &"end"[1]{lb: 1 sz: 1}); _gfortran_transfer_character_write (_parm.0, (character(kind=1)[1:] *) , 41); } _gfortran_st_write_done (_parm.0); } } Note that repeat is reduced to the builtin memmove with 32 spaces going to cc. Regards Paul On Fri, 11 Aug 2023 at 17:21, Jerry D via Fortran wrote: > > On 8/11/23 5:34 AM, Jorge D'Elia via Fortran wrote: > > Dear GFortran developers, > > > > With the beta gfortran 14.x.y versions we are noticing some runtime > > errors in a production code. > > > > One type of runtime errors is related to the concurrent use of the > > intrinsic "repeat" when the source code is compiled with the > > flag -march=native, please, see below: > > > > $ cat test.f90 > > program test > >implicit none > >integer , parameter :: iin = kind (1) > >integer (iin), parameter :: pp = 32 > >character (len=pp) :: cc > >cc (1:pp) = repeat (" ",pp) > >write (*,*)" cc : " // cc > > end program test > > > > $ gfortran --version > > GNU Fortran (GCC) 14.0.0 20230808 (experimental) > > Copyright (C) 2023 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. > > > > a) Compiling with the flag -mtune=native only, without -march=native, the > > test is ok: > > > > $ gfortran -mtune=native -fcheck=all -std=f2018 -Wall -Werror -Wextra -Og > > -o test.exe test.f90 > > $ test.exe > >cc : > > > > b) However, compiling with the flag -march=native: > > > > $ gfortran -march=native -fcheck=all -std=f2018 -Wall -Werror -Wextra -Og > > -o test.exe test.f90 > > $ test.exe > > > > Program received signal SIGILL: Illegal instruction. > > > > Backtrace for this error: > > #0 0x14fae277fb1f in ??? > > #1 0x4011ad in ??? > > #2 0x401272 in ??? > > #3 0x14fae276a50f in ??? > > #4 0x14fae276a5c8 in ??? > > #5 0x4010c4 in ??? > > #6 0x in ??? > > Illegal instruction (core dumped) > > > > On the other hand, compiling with the system version (GNU Fortran (GCC) > > 12.3.1 20230508 (Red Hat 12.3.1-1)) or replacing the intrinsic repeat > > with: > > > > do kk = 1, pp > >cc (kk:kk) = " " > > end do > > > > both tests are ok. The error occurs on any of Intel or AMD computers, > > e.g. in the present case: > > > > $ lscpu > > Architecture: x86_64 > >CPU op-mode(s): 32-bit, 64-bit > >Address sizes:46 bits physical, 48 bits virtual > >Byte Order: Little Endian > > CPU(s): 6 > >On-line CPU(s) list: 0-5 > > Vendor ID: GenuineIntel > >Model name: Intel(R) Core(TM) i7-3930K CPU @ 3.20GHz > > CPU family: 6 > > Model: 45 > > Thread(s) per core: 1 > > Core(s) per socket: 6 > > Socket(s): 1 > > Stepping: 7 > > BogoMIPS: 6400.22 > > Caches (sum of all): > >L1d: 192 KiB (6 instances) > >L1i: 192 KiB (6 instances) > >L2: 1.5 MiB (6 instances) > >L3: 12 MiB (1 instance) > > NUMA: > >NUMA node(s): 1 > >NUMA node0 CPU(s):0-5 > > > > > > By the way, I do not know if the -march=native flag or the intrinsic > > repeat would be of deprecated use (or not)... > > Regardless, we should never segfault. Thanks for the code example. We > need to get a bug report opened on this. I am on travel this morning, > but if I have time i will do so this afternnon if someone else does not > beat me to it. > > There were some recent patches in this area IIRC. > > Jerry >
Re: beta gfortran 14.x.y (using -march=native and intrinsic repeat) gives a signal SIGILL
On 8/11/23 5:34 AM, Jorge D'Elia via Fortran wrote: Dear GFortran developers, With the beta gfortran 14.x.y versions we are noticing some runtime errors in a production code. One type of runtime errors is related to the concurrent use of the intrinsic "repeat" when the source code is compiled with the flag -march=native, please, see below: $ cat test.f90 program test implicit none integer , parameter :: iin = kind (1) integer (iin), parameter :: pp = 32 character (len=pp) :: cc cc (1:pp) = repeat (" ",pp) write (*,*)" cc : " // cc end program test $ gfortran --version GNU Fortran (GCC) 14.0.0 20230808 (experimental) Copyright (C) 2023 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. a) Compiling with the flag -mtune=native only, without -march=native, the test is ok: $ gfortran -mtune=native -fcheck=all -std=f2018 -Wall -Werror -Wextra -Og -o test.exe test.f90 $ test.exe cc : b) However, compiling with the flag -march=native: $ gfortran -march=native -fcheck=all -std=f2018 -Wall -Werror -Wextra -Og -o test.exe test.f90 $ test.exe Program received signal SIGILL: Illegal instruction. Backtrace for this error: #0 0x14fae277fb1f in ??? #1 0x4011ad in ??? #2 0x401272 in ??? #3 0x14fae276a50f in ??? #4 0x14fae276a5c8 in ??? #5 0x4010c4 in ??? #6 0x in ??? Illegal instruction (core dumped) On the other hand, compiling with the system version (GNU Fortran (GCC) 12.3.1 20230508 (Red Hat 12.3.1-1)) or replacing the intrinsic repeat with: do kk = 1, pp cc (kk:kk) = " " end do both tests are ok. The error occurs on any of Intel or AMD computers, e.g. in the present case: $ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Address sizes:46 bits physical, 48 bits virtual Byte Order: Little Endian CPU(s): 6 On-line CPU(s) list: 0-5 Vendor ID: GenuineIntel Model name: Intel(R) Core(TM) i7-3930K CPU @ 3.20GHz CPU family: 6 Model: 45 Thread(s) per core: 1 Core(s) per socket: 6 Socket(s): 1 Stepping: 7 BogoMIPS: 6400.22 Caches (sum of all): L1d: 192 KiB (6 instances) L1i: 192 KiB (6 instances) L2: 1.5 MiB (6 instances) L3: 12 MiB (1 instance) NUMA: NUMA node(s): 1 NUMA node0 CPU(s):0-5 By the way, I do not know if the -march=native flag or the intrinsic repeat would be of deprecated use (or not)... Regardless, we should never segfault. Thanks for the code example. We need to get a bug report opened on this. I am on travel this morning, but if I have time i will do so this afternnon if someone else does not beat me to it. There were some recent patches in this area IIRC. Jerry
beta gfortran 14.x.y (using -march=native and intrinsic repeat) gives a signal SIGILL
Dear GFortran developers, With the beta gfortran 14.x.y versions we are noticing some runtime errors in a production code. One type of runtime errors is related to the concurrent use of the intrinsic "repeat" when the source code is compiled with the flag -march=native, please, see below: $ cat test.f90 program test implicit none integer , parameter :: iin = kind (1) integer (iin), parameter :: pp = 32 character (len=pp) :: cc cc (1:pp) = repeat (" ",pp) write (*,*)" cc : " // cc end program test $ gfortran --version GNU Fortran (GCC) 14.0.0 20230808 (experimental) Copyright (C) 2023 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. a) Compiling with the flag -mtune=native only, without -march=native, the test is ok: $ gfortran -mtune=native -fcheck=all -std=f2018 -Wall -Werror -Wextra -Og -o test.exe test.f90 $ test.exe cc : b) However, compiling with the flag -march=native: $ gfortran -march=native -fcheck=all -std=f2018 -Wall -Werror -Wextra -Og -o test.exe test.f90 $ test.exe Program received signal SIGILL: Illegal instruction. Backtrace for this error: #0 0x14fae277fb1f in ??? #1 0x4011ad in ??? #2 0x401272 in ??? #3 0x14fae276a50f in ??? #4 0x14fae276a5c8 in ??? #5 0x4010c4 in ??? #6 0x in ??? Illegal instruction (core dumped) On the other hand, compiling with the system version (GNU Fortran (GCC) 12.3.1 20230508 (Red Hat 12.3.1-1)) or replacing the intrinsic repeat with: do kk = 1, pp cc (kk:kk) = " " end do both tests are ok. The error occurs on any of Intel or AMD computers, e.g. in the present case: $ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Address sizes:46 bits physical, 48 bits virtual Byte Order: Little Endian CPU(s): 6 On-line CPU(s) list: 0-5 Vendor ID: GenuineIntel Model name: Intel(R) Core(TM) i7-3930K CPU @ 3.20GHz CPU family: 6 Model: 45 Thread(s) per core: 1 Core(s) per socket: 6 Socket(s): 1 Stepping: 7 BogoMIPS: 6400.22 Caches (sum of all): L1d: 192 KiB (6 instances) L1i: 192 KiB (6 instances) L2: 1.5 MiB (6 instances) L3: 12 MiB (1 instance) NUMA: NUMA node(s): 1 NUMA node0 CPU(s):0-5 By the way, I do not know if the -march=native flag or the intrinsic repeat would be of deprecated use (or not)... Regards. Jorge. -- CIMEC (UNL-CONICET), cimec.conicet.gov.ar, www.cimec.org.ar Predio CONICET-Santa Fe, Colec. Ruta Nac. 168, Paraje El Pozo, 3000, Santa Fe, ARGENTINA. Tel +54-342-4511594/95 ext 7062, fax: +54-342-4511169