https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118406
Bug ID: 118406
Summary: Printing large UNSIGNED(kind=16) crashes
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: anlauf at gcc dot gnu.org
Target Milestone: ---
While preparing some testcases, I hit the following:
program print_large_unsigned
print *, uint (huge(0_16),16) ! OK
! 170141183460469231731687303715884105727
print *, uint (huge(0_16),16) + &
uint (huge(0_8), 16) * uint (huge(0_4),16) ! OK
! 170141183480276272351030016075267833856
print *, uint (huge(0_16),16) / 2U_16 * 3U_16 ! crash
! expect: 255211775190703847597530955573826158590
print *, huge(0U_16) ! crash
! expect: 340282366920938463463374607431768211455
end
gfc-15 pr-unsigned.f90 -funsigned -static-libgfortran -g && ./a.out
170141183460469231731687303715884105727
170141183480276272351030016075267833856
a.out: ../../../gcc-trunk/libgfortran/runtime/string.c:254: gfc_itoa: Assertion
`n <= UINT64_MAX' failed.
Program received signal SIGABRT: Process abort signal.
Backtrace for this error:
#0 0x7fd7dd05797f in ???
#1 0x7fd7dd0a949c in ???
#2 0x7fd7dd0578c1 in ???
#3 0x7fd7dd03f64e in ???
#4 0x7fd7dd03f566 in ???
#5 0x7fd7dd04fbb1 in ???
#6 0x40f69a in write_decimal_unsigned
at ../../../gcc-trunk/libgfortran/io/write.c:995
#7 0x414acd in write_unsigned
at ../../../gcc-trunk/libgfortran/io/write.c:1581
#8 0x414acd in list_formatted_write_scalar
at ../../../gcc-trunk/libgfortran/io/write.c:2123
#9 0x402a11 in print_large_unsigned
at /home/anlauf/gcc-bugs/pr-unsigned.f90:9
#10 0x402ab7 in main
at /home/anlauf/gcc-bugs/pr-unsigned.f90:14