Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/gcc.c-torture/execute/pr44468.c @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
#include <stddef.h> struct S { int i; int j; }; struct R { int k; struct S a; }; struct Q { float k; struct S a; }; struct Q s; int __attribute__((noinline,noclone)) test1 (void *q) { struct S *b = (struct S *)((char *)q + sizeof (int)); s.a.i = 0; b->i = 3; return s.a.i; } int __attribute__((noinline,noclone)) test2 (void *q) { struct S *b = &((struct R *)q)->a; s.a.i = 0; b->i = 3; return s.a.i; } int __attribute__((noinline,noclone)) test3 (void *q) { s.a.i = 0; ((struct S *)((char *)q + sizeof (int)))->i = 3; return s.a.i; } extern void abort (void); int main() { if (sizeof (float) != sizeof (int) || offsetof (struct R, a) != sizeof (int) || offsetof (struct Q, a) != sizeof (int)) return 0; s.a.i = 1; s.a.j = 2; if (test1 ((void *)&s) != 3) abort (); s.a.i = 1; s.a.j = 2; if (test2 ((void *)&s) != 3) abort (); s.a.i = 1; s.a.j = 2; if (test3 ((void *)&s) != 3) abort (); return 0; }