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 *) &cc, (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 (&dt_parm.0); > { > character(kind=1) str.1[38]; > character(kind=1) str.2[41]; > > _gfortran_concat_string (38, (character(kind=1)[1:] *) &str.1, > 6, &" cc : "[1]{lb: 1 sz: 1}, 32, &cc); > _gfortran_concat_string (41, (character(kind=1)[1:] *) &str.2, > 38, (character(kind=1)[1:] *) &str.1, 3, &"end"[1]{lb: 1 sz: 1}); > _gfortran_transfer_character_write (&dt_parm.0, > (character(kind=1)[1:] *) &str.2, 41); > } > _gfortran_st_write_done (&dt_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 *) &cc, (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 (&dt_parm.1); { character(kind=1) str.2[38]; _gfortran_concat_string (38, (character(kind=1)[1:] *) &str.2, 6, &" cc : "[1]{lb: 1 sz: 1}, 32, &cc); _gfortran_transfer_character_write (&dt_parm.1, (character(kind=1)[1:] *) &str.2, 38); } _gfortran_st_write_done (&dt_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, &options.3[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 ??? >> > #2 0x401272 in ??? >> > #3 0x14fae276a50f in ??? >> > #4 0x14fae276a5c8 in ??? >> > #5 0x4010c4 in ??? >> > #6 0xffffffffffffffff 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. Ok. >> 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. Ok. Thanks. >> There were some recent patches in this area IIRC. Ok, although to avoid this problem, we are also using older beta versions. >> Jerry Regards, Jorge. --