struct Foo { int *p; struct X { int a,b,c,d,e,*f; } x; } *init, *init2; struct X __attribute__((const)) foo(struct X); struct Foo __attribute__((const)) foo2(struct Foo); void bar1 (void) { init->x = foo (init2->x); } void bar2 (void) { init->x = foo (init->x); } void bar3 (void) { *init = foo2 (*init2); }