Article View: gnu.gcc.bug
Article #2850`gcc' incorrectly defers stack popping in some cases.
From: Derek Clegg
Date: Mon, 05 Feb 1990 15:18
Date: Mon, 05 Feb 1990 15:18
97 lines
2724 bytes
2724 bytes
/* Version:
* gcc version 1.36
* File:
* <this file>
* Compile with:
* gcc -fdefer-pop -O -Wall <this file> -lm -o defer-pop
* and
* gcc -fno-defer-pop -O -Wall <this file> -lm -o no-defer-pop
* Problem:
* `gcc' incorrectly defers stack popping in some cases.
* Output:
* % defer-pop
* k: 37
* k: 1072693248
* % no-defer-pop
* k: 37
* k: 37
* Notes:
* The code produced for the routine `bar' below contains the following
* when `-fdefer-pop' is specified:
* _bar:
* link a6,#-48
* ...
* jbsr _memcpy | We defer popping here.
* fmoved #0r.10000000000000000555,fp1
* ...
* L12: | The start of the loop.
* movel d4,sp@-
* movel d3,sp@-
* movel d6,sp@-
* movel d5,sp@-
* jbsr _atan2
* addw #16,sp | Arguments are popped.
* jbsr _miterjoin | `miterjoin' has no arguments.
* addw #12,sp | However, we try to pop some anyway.
* ...
*
* gcc was compiled with `config.gcc sun3-os4'.
* I am using a Sun 3/60 with UNIX 4.2 (Sun release 4.0.1).
*
* Derek B Clegg ({ucbcad,sun}!island!derek)
*/
extern volatile void exit(int status);
extern int printf(const char *format, ...);
extern const double atan2(double y, double x);
extern void *memcpy(void *s1, const void *s2, int n);
static const __inline__ double inline__acos(double x)
{
double v;
extern int errno;
__asm__("facosx %1,%0" : "=f" (v) : "f" (x));
if (v != v) errno = 33;
return (v);
}
struct QPOINT { int x,y; };
static void
miterjoin(void)
{
struct QPOINT q[4];
q[3].y = 0.0;
}
static int
bar(int p, double *ctm)
{
int k;
double m[6], x1, y1, v;
memcpy(m, ctm, 6 * sizeof(double));
v = 2 * inline__acos(1/10.0);
x1 = 1; y1 = 2;
for (k = 0; k < 8; k++) {
atan2(x1,y1);
miterjoin();
}
return (0);
}
int
main(argc,argv)
int argc;
char *argv[];
{
static double m[6] = {1,0,0,1,0,0};
int k;
k = 37;
printf("k: %d\n", k);
bar(k, m);
printf("k: %d\n", k);
exit(0);
}
Technical Details
Message-ID:
<9002051518.AA19660@orkney.island.uucp>Path:
arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!clyde.concordia.ca!uunet!tut.cis.ohio-state.edu!SUN.COM!island!orkney!derekShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!clyde.concordia.ca!uunet!tut.cis.ohio-state.edu!SUN.COM!island!orkney!derek From: island!orkney!derek@SUN.COM (Derek Clegg) Newsgroups: gnu.gcc.bug Subject: `gcc' incorrectly defers stack popping in some cases. Message-ID: <9002051518.AA19660@orkney.island.uucp> Date: 5 Feb 90 15:18:33 GMT Sender: daemon@tut.cis.ohio-state.edu Distribution: gnu Organization: GNUs Not Usenet Lines: 97