http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56982



--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-04-17 
09:28:55 UTC ---

#include <stdio.h>

#include <setjmp.h>



static sigjmp_buf env;

static inline int g (int x)

{

  if (x)

    {   

      fprintf (stderr, "Returning 0\n");

      return 0;

    }

  else

    { 

      fprintf (stderr, "Returning 1\n");

      return 1;

    }

}

__attribute__ ((noinline))

void bar (int n)

{

  if (n == 0)

    exit (0);

  static int x;

  if (x++) abort ();

  longjmp (env, 42);

}

int

f (int *e)

{

  int n = *e;

  if (n)

    return 1;

  int x = setjmp (env);

  n = g (x);

  fprintf (stderr, "x = %i, n = %i\n", x, n);

  bar (n);

}

int

main ()                     

{

  int v = 0;

  return f (&v);

}



Adjusted testcase that fails even with GCC 4.7.2 at -O2, works with -O2

-fno-dominator-opts (which disables uncprop).  Again, I don't see how

this could be declared invalid, while n is declared before the setjmp, it is

not live across the setjmp call.  This adjusted testcase regressed in April

2005 (i.e. 4.1+ regression).

Reply via email to