https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117820
--- Comment #7 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
The root of the problem here is that the function write_boz uses a type int to
pass in the value n, this value is then tested for zero which fails for a 64
bit integer.
The following hack makes it work but I don't like this fix.
diff --git a/libgfortran/io/write.c b/libgfortran/io/write.c
index 2f414c6b57d..378013dbd18 100644
--- a/libgfortran/io/write.c
+++ b/libgfortran/io/write.c
@@ -1392,6 +1392,8 @@ write_b (st_parameter_dt *dtp, const fnode *f, const char
*source, int len)
{
n = extract_uint (source, len);
p = btoa (n, itoa_buf, sizeof (itoa_buf));
+ if (n != 0)
+ n = 1;
write_boz (dtp, f, p, n, len);
For larger integers, the test for zero is done in the big_btoa functions where
the unsigned value is known and it can be explicitly tested. the variable n in
write_boz really ought to be a bool so that it is more obvious to maintainers
what is going on.
I will clean this up and submit a patch for approval.