/* { dg-do run } */ extern void abort(void); typedef struct Foo { int a; int b; } Foo; Foo foo(Foo first, Foo last, _Bool ret_first) { Foo t; Foo *t1 = (ret_first ? &first : &last); first.a = 2; last.b = 3; t.a = t1->a; t.b = t1->b; t.a += first.a; t.b += last.b; return t; } int main() { Foo first = (Foo){1, 2}; Foo last = (Foo){3, 4}; Foo ret = foo(first, last, 0); if (ret.b != 6) abort (); return 0; }