blob: e66c4f6b22688a139d51237643cef5ef2c6b985b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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;
}
|