#include union tree_node; struct tree_common { int a; long b; long c; void *p; int d; }; struct other_tree { struct tree_common common; int arr[14]; }; struct tree_vec { struct tree_common common; int length; union tree_node *a[1]; }; union tree_node { struct other_tree othr; struct tree_vec vec; }; union tree_node global; union tree_node * __attribute__((noinline)) foo (union tree_node *p, int i) { union tree_node **q; p->vec.a[i] = (union tree_node *) 0; q = &p->vec.a[1]; *q = &global; return p->vec.a[i]; } extern void abort (void); extern void *malloc (__SIZE_TYPE__); int main() { union tree_node *p = malloc (sizeof (union tree_node)); if (foo (p, 1) != &global) abort (); return 0; }