https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117643
kargls at comcast dot net changed:
What |Removed |Added
----------------------------------------------------------------------------
Attachment #59830|0 |1
is obsolete| |
--- Comment #5 from kargls at comcast dot net ---
Created attachment 59873
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=59873&action=edit
New diff
The attached diff is the WIP, and unfortunately, where I will stop. I cannot
resolve the issue of an uninitialized variables. Consider, this simple
program:
program foo
use iso_c_binding, only : c_null_char, c_char, f_c_string
implicit none
logical, volatile :: asis
integer i
character(len=6, kind=c_char), volatile :: s1
character(len=:, kind=c_char), allocatable :: ss2
ss2 = f_c_string(s1, .true.)
i = len_trim(s1) + 1
if (len(ss2) /= i) stop 3
end program foo
with the attached patch I get
gfcx -o z -fdump-tree-original -fno-realloc-lhs f_c_string.f90
(note -fno-realloc-lhs simply isolates the problems)
character(kind=1) str.0[7]; // <-- This 7 is tlen.1
integer(kind=8) tlen.1; // <-- obviously, tlen.1
character(kind=1) * tstr.2;
character(kind=1) * pstr.3;
void * restrict D.4787;
integer(kind=8) D.4788;
integer(kind=8) D.4789;
void * D.4790;
void * D.4791;
D.4788 = tlen.1 + 1; // <-- Whoops, tlen.1 is unset!
gfcx -o z -fdump-tree-original f_c_string.f90
(this shows the real issue and the allocation of 64T of memory!)
character(kind=1) str.0[7]; // <-- This 7 is tlen.1
integer(kind=8) tlen.1; // <-- obviously, tlen.1
character(kind=1) * tstr.2;
character(kind=1) * pstr.3;
void * restrict D.4787;
integer(kind=8) D.4788;
integer(kind=8) D.4789;
void * D.4790;
void * D.4791;
//
// The following is reallocation on assignment. Notice tlen.1 is unset!
//
if (ss2 != 0B) goto L.1;
ss2 = (character(kind=1)[1:.ss2] *)
__builtin_malloc (MAX_EXPR <(sizetype) (tlen.1 + 1), 1>);
goto L.2;
L.1:;
if (tlen.1 + 1 == .ss2) goto L.2;
ss2 = (character(kind=1)[1:.ss2] *)
__builtin_realloc ((void *) ss2, MAX_EXPR <(sizetype) (tlen.1 + 1), 1>);
L.2:;
.ss2 = tlen.1 + 1;
If someone smarter than I wants to pick up the pieces, I would much appreciate
it.