diff options
Diffstat (limited to 'gcc/testsuite/gcc.c-torture/execute/20020810-1.c')
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/20020810-1.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/execute/20020810-1.c b/gcc/testsuite/gcc.c-torture/execute/20020810-1.c new file mode 100644 index 000000000..d3386973a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/20020810-1.c @@ -0,0 +1,38 @@ +/* PR target/7559 + This testcase was miscompiled on x86-64, because classify_argument + wrongly computed the offset of nested structure fields. */ + +extern void abort (void); + +struct A +{ + long x; +}; + +struct R +{ + struct A a, b; +}; + +struct R R = { 100, 200 }; + +void f (struct R r) +{ + if (r.a.x != R.a.x || r.b.x != R.b.x) + abort (); +} + +struct R g (void) +{ + return R; +} + +int main (void) +{ + struct R r; + f(R); + r = g(); + if (r.a.x != R.a.x || r.b.x != R.b.x) + abort (); + return 0; +} |