On Mon, May 25, 2026 at 3:16 AM Jerry D <[email protected]> wrote: > > On 5/24/26 12:38 AM, H.J. Lu wrote: > > Note: The following floating-point exceptions are signalling: > > IEEE_INVALID_FLAG IEEE_UNDERFLOW_FLAG IEEE_DENORMAL > > STOP 3 > > FAIL: gfortran.dg/EXformat_1.F90 -O0 execution test > > I fed the above and the CI report I received to Claude and it > arrived at the attached patch rather quickly. Can you try this and confirm > whether it fixes it or not?
Yes, it works. Thanks. > Regards, > > Jerry > > --------------- > > From 837ca2b4c3d1069ddb938a5a7c259d34a85479fc Mon Sep 17 00:00:00 2001 > From: Jerry DeLisle <[email protected]> > Date: Sun, 24 May 2026 11:51:49 -0700 > Subject: [PATCH] Fortran: [PR93727] Fix EX format kind=8 output on ILP32 > targets > > On 32-bit targets such as ARM where unsigned long is 32 bits, the > kind=8 case in get_float_hex_string used unsigned long for frac_part. > The kind=8 mantissa requires 52 bits (13 hex digits), so the cast > silently truncated the upper bits, producing wrong hex output. In > addition, converting a ~4.5e15 double value to a 32-bit unsigned long > is out of range, which raised IEEE_INVALID_FLAG on ARM hardware. > > The kind=10 case already used unsigned long long for the same reason. > Fix kind=8 to match: change the type, the cast, and the two %lX > format specifiers to %llX. > > PR fortran/93727 > > libgfortran/ChangeLog: > > * io/write_float.def (get_float_hex_string): Change frac_part > for kind=8 from unsigned long to unsigned long long and update > format specifiers from %13.13lX to %13.13llX to fix truncated > hex output and IEEE_INVALID_FLAG on ILP32 targets. > > Assisted by: Claude Sonnet 4.6 > -- H.J.
