diff options
Diffstat (limited to 'gcc/testsuite/gcc.wendy/gnu18.c')
-rwxr-xr-x | gcc/testsuite/gcc.wendy/gnu18.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.wendy/gnu18.c b/gcc/testsuite/gcc.wendy/gnu18.c new file mode 100755 index 0000000..e66c4f6 --- /dev/null +++ b/gcc/testsuite/gcc.wendy/gnu18.c @@ -0,0 +1,46 @@ +/* +Date: Sat, 5 Sep 87 00:34:13 PDT +From: gnu (John Gilmore) +To: rms +Subject: Stack adjustment bug in 'continue' -- gcc 1.10+ + +Compiling the following simplified program with or without -O produces +bad code. The 'continue' compiles to a jump to a label which PRECEDES +the stack adjust for the printf at the end of the loop. This makes the +stack pointer walk up each time around the loop. If you compile without +-O, "foo" gets allocated on the stack and the debug printf fires. +Compiled with -O, it coredumps before printing. Compiled on a working +compiler, it loops forever. + +I have installed the bugfix for while loops posted to bug-gcc; it fails +with or without the bugfix. +*/ + +int tty; + +iscmd() { + static int counter; + + if (counter++ < 10000) return 0; + printf("Test passed\n"); + exit(0); +} + +void +main() +{ + int foo = 0; + + for ( ;; ) { + if (foo != 0) printf("***BUG*** foo=%x\n", foo); + if (!tty) { + if (!iscmd ()) + continue; + foo = 1; + } + + printf("**BUG** Past iscmd\n"); + } + + return; +} |