4567449-1.c   [plain text]


/* APPLE LOCAL file 4567449 */

/* { dg-do compile } */
/* { dg-options "-O2 -mno-thumb-interwork" } */
/* { dg-final { global compiler_flags; if ![string match "*-mthumb *" $compiler_flags] { scan-assembler-not "bl\[^\n\]+func2" } } } */

/* A sibcall should be alllowed if any of the incoming args don't overlap
   their corollary outgoing args.  This is one case we were getting wrong
   -- when an outgoing arg is split between registers and stack.  */

typedef struct {
  int a;
  int b;
  int c;
  int d;
} s32_t;

void func2(int i, int j, s32_t s32);

void func1(int p1, int p2, int p3, int p4, int p5, int p6, s32_t s32) {
  func2(p5, p6, s32);
}