https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61831

--- Comment #36 from Mikael Morin <mikael at gcc dot gnu.org> ---
>    [...]
>     (*(struct string_t[1] * restrict) atmp.7.data)[0] = prt_in;

prt_in.chars.data is copied to atmp.7.data[0].

>    [...]
>    while (1)
>      {
>        [...]
>        D.3430 = (*(struct string_t[1] * restrict) atmp.7.data)[S.10];

atmp.7.data[0].chars.data is copied to D.3430

>        [...]
>        if (D.3430.chars.data != 0B)
>          {
>            __builtin_free ((void *) D.3430.chars.data);
>          }
>        D.3430.chars.data = 0B;

D.3430.chars.data is freed.


So every iteration of the do loop has the side-effect of freeing
prt_in.chars.data.

Reply via email to