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

Reply via email to