When compiled with gcc 3.4.4 through 4.1.2 -O on x86_64 the program below never
terminates. I haven't checked the standard for possible undefined behavior in
this case but since the same program terminates when compiled with many (all?)
all other compilers we have available I'm making the assumption that that this
is a gcc bug. I'll gladly accept a pointer to the chapter and verse that allows
gcc to behave this way.

$ cat t.c && gcc -O t.c && ./a.out | head -n 10
#include <setjmp.h>
#include <stdio.h>

jmp_buf env;
void call_longjmp (int x) {
    printf ("test_longjmp(%d)\n", x);
    longjmp (env, x);
}

int main ()
{
    int x = 1;
    int y;

    y = setjmp (env);
    if (0 == y) call_longjmp (x);
    else if (y < 3)
        call_longjmp (++x);
}


test_longjmp(1)
test_longjmp(2)
test_longjmp(2)
test_longjmp(2)
test_longjmp(2)
test_longjmp(2)
test_longjmp(2)
test_longjmp(2)
test_longjmp(2)
test_longjmp(2)
^C


-- 
           Summary: infinite loop on longjmp with optimization
           Product: gcc
           Version: 4.1.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: sebor at roguewave dot com
 GCC build triplet: x86_64-redhat-linux
  GCC host triplet: x86_64-redhat-linux
GCC target triplet: x86_64-redhat-linux


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

Reply via email to