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

--- Comment #7 from Eric Gallager <egallager at gcc dot gnu.org> ---
(In reply to Jeffrey A. Law from comment #6)
> Eric.  Thanks for the BZ maintenance.  It's definitely appreciated.
> 
> For bugs like this (very sensitive to unrelated code generator changes) it
> is often worth the time to bisect to what change fixed the bug.  That helps
> us identify something that just went latent vs something that actually got
> fixed.  

I wish I could bisect but I don't exactly have the computing resources on this
old laptop for the whole bisection process; is that something I could do on the
gcc compile farm?

> 
> I happened to have been looking at this yesterday so I had a bit of state. 
> I'm pretty sure this just went latent.  Martin L's recent changes to switch
> handling result in dropping the switch into an if-else which we often
> optimize/analyze better.
> 
> A slight tweak to keep Martin L's changes from firing brings the warning
> back.
> 
> 
> #include <stdio.h>
> #include <stdlib.h>
> 
> static int mk (int **a, int **b, int **c) {
>         if (!(*a = malloc (sizeof (int)))) goto a_err;
>         if (!(*b = malloc (sizeof (int)))) goto b_err;
>         if (!(*c = malloc (sizeof (int)))) goto c_err;
> 
>         return 1; c_err:
>         free (*b); b_err:
>         free (*a); a_err:
>         return 0;
> }
> 
> static void fin (int *a, int *b, int *c) {
>         free (c);
>         free (b);
>         free (a);
> }
> 
> int main (void) {
>         int *a, *b, *c, x, flag = mk (&a, &b, &c);
>         while ((x = getchar ()) != -1) {
>                 if (flag) switch (x) {
>                 case 0:
>                         break;
>                 case 0xdeadbeef:
>                         goto retm;
>                 default:
>                         goto retn;
>                 } else if (x) goto retn;
>         }
>         retn:
>         if (flag) fin (a, b, c);
>         return 0;
>         retm:
>         if (flag) fin (a, b, c);
>         return 0;
> }
> ~

Yup, confirmed that this brings the warning back.

Reply via email to