/* pr44468.c from the execute part of the gcc torture tests. */ #include #ifdef __SDCC #pragma std_c99 #endif #include struct S { int i; int j; }; struct R { int k; struct S a; }; struct Q { float k; struct S a; }; struct Q s; int test1 (void *q) { struct S *b = (struct S *)((char *)q + sizeof (int)); s.a.i = 0; b->i = 3; return s.a.i; } int test2 (void *q) { struct S *b = &((struct R *)q)->a; s.a.i = 0; b->i = 3; return s.a.i; } int test3 (void *q) { s.a.i = 0; ((struct S *)((char *)q + sizeof (int)))->i = 3; return s.a.i; } void testTortureExecute (void) { #if !(defined (__GNUC__) && defined (__GNUC_MINOR__) && (__GNUC__ < 5 && __GNUC_MINOR__ < 5)) if (sizeof (float) != sizeof (int) || offsetof (struct R, a) != sizeof (int) || offsetof (struct Q, a) != sizeof (int)) return; s.a.i = 1; s.a.j = 2; if (test1 ((void *)&s) != 3) ASSERT (0); s.a.i = 1; s.a.j = 2; if (test2 ((void *)&s) != 3) ASSERT (0); s.a.i = 1; s.a.j = 2; if (test3 ((void *)&s) != 3) ASSERT (0); return; #endif }