Article View: gnu.gcc.bug
Article #21951.32 sun4os4 bug-- passing structures
From: Jim Meyering
Date: Wed, 25 Jan 1989 14:43
Date: Wed, 25 Jan 1989 14:43
73 lines
1729 bytes
1729 bytes
/*
* gcc-1.32 (sun4-os4) has a problem passing structure arguments.
*
* If the type FLT is changed to float, all problems disappear.
*
* If PRINTF is defined and -O is *not* used, the program terminates
* with a segmentation fault. In all other cases I've tried, the
* program runs, but the arguments to foo are not properly copied.
* To be precise, in foo, the value that one would normally expect
* to find in b.y is overwritten with that of b.x. (see output in
* comments below)
*/
typedef double FLT;
typedef struct point { FLT x, y; } PT;
#define N 4
FLT x[N];
#if defined(PRINTF)
#define PRINT(a) for (i=0;i<N;i++) printf("%g ", (a)[i]); printf("\n");
#endif
#if defined(FPRINTF) || !defined(PRINTF)
#include <stdio.h>
#define PRINT(a) for (i=0;i<N;i++) fprintf(stdout,"%g ", (a)[i]); \
fprintf(stdout,"\n");
#endif
void
main()
{
int bad,i;
PT s,t;
FLT w[N];
void foo(PT,PT);
s.x = 0;
s.y = 1;
t.x = 999;
t.y = 3;
w[0] = s.x; w[1] = s.y;
w[2] = t.x; w[3] = t.y;
foo(s,t);
bad = -1;
for (i=0;i<N;i++) {
if (w[i] != x[i]) {
bad = i;
break;
}
}
if (bad >= 0) {
PRINT(w);
PRINT(x);
}
exit(0);
}
void
foo(PT a,PT b)
{
extern FLT x[N];
x[0] = a.x;
x[1] = a.y;
x[2] = b.x;
x[3] = b.y;
}
--
---
Jim Meyering meyering@cs.utexas.edu
Technical Details
Message-ID:
<150@ai.cs.utexas.edu>Path:
arc1-ca.pugleaf.net!utzoo!telly!ddsw1!mcdchg!rutgers!mailrus!tut.cis.ohio-state.edu!cs.utexas.edu!meyeringShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!telly!ddsw1!mcdchg!rutgers!mailrus!tut.cis.ohio-state.edu!cs.utexas.edu!meyering From: meyering@cs.utexas.edu (Jim Meyering) Newsgroups: gnu.gcc.bug Subject: 1.32 sun4os4 bug-- passing structures Message-ID: <150@ai.cs.utexas.edu> Date: 25 Jan 89 14:43:05 GMT Distribution: gnu Organization: U. Texas CS Dept., Austin, Texas Lines: 73