[ forwarded from http://bugs.debian.org/445536 ]
From: Samuel Tardieu <[EMAIL PROTECTED]> % cat > t.c << EOF void foo() { foo(); } EOF % gcc -O -S -o - -fomit-frame-pointer -Wall t.c .file "t.c" .text .globl foo .type foo, @function foo: rep ; ret .size foo, .-foo .ident "GCC: (GNU) 4.2.1 (Debian 4.2.1-5)" .section .note.GNU-stack,"",@progbits As far as I know, there are two acceptable behaviours for function foo(): - loop indefinitely (if tail recursion is used) - overflow the stack (if tail recursion is not used) As soon as -O is used on x86-32, GCC generates code that just returns ("rep ; ret"). Note that the bug is also present with the following Ada program: procedure U is begin U; end U; although the Ada front-end warns about a possibly infinite recursion. The very same code gets generated. This may be platform-specific and generates bogus code with any non-O0 optimization level. -- Summary: GCC generates wrong code for infinitely recursive functions Product: gcc Version: 4.2.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: tbm at cyrius dot com GCC target triplet: x86_64-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33826