summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/i386/aggregate-ret2.c
blob: 03e9bae925cf127dd5646ff35c4253b8a97ecef9 (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
/* target/36834 */
/* Check that, with dont_keep_aggregate_return_pointer attribute,  callee
   pops the stack for the implicit pointer arg when returning a large
   structure in memory.  */
/* { dg-do compile { target i?86-*-* } } */

struct foo {
  int a;
  int b;
  int c;
  int d;
};

__attribute__ ((callee_pop_aggregate_return(1)))
struct foo
bar (void)
{
  struct foo retval;
  retval.a = 1;
  retval.b = 2;
  retval.c = 3;
  retval.d = 4;
  return retval;
}

/* { dg-final { scan-assembler "ret\[ \t\]\\\$4" } } */