Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/gcc.dg/alias-14.c @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
/* { dg-do compile } */ /* { dg-options "-O2" } */ #include <stddef.h> void *a; int *b; struct c {void * a;} c; struct d {short * a;} d; int *ip= (int *)(size_t)2; int **ipp = &ip; int main() { float **ptr; void **uptr; int* const* cipp = (int* const*)ipp; /* as an extension we consider void * universal. Writes to it should alias. */ asm ("":"=r"(ptr):"0"(&a)); a=NULL; *ptr=(float*)(size_t)1; if (!a) __builtin_abort (); a=NULL; if (*ptr) __builtin_abort (); asm ("":"=r"(uptr):"0"(&b)); b=NULL; *uptr=(void*)(size_t)1; if (!b) __builtin_abort (); b=NULL; if (*uptr) __builtin_abort (); /* Check that we disambiguate int * and char *. */ asm ("":"=r"(ptr):"0"(&b)); b=NULL; *ptr=(float*)(size_t)1; if (b) __builtin_abort (); /* Again we should make void * in the structure conflict with any pointer. */ asm ("":"=r"(ptr):"0"(&c)); c.a=NULL; *ptr=(float*)(size_t)1; if (!c.a) __builtin_abort (); c.a=NULL; if (*ptr) __builtin_abort (); asm ("":"=r"(uptr):"0"(&d)); d.a=NULL; *uptr=(void*)(size_t)1; if (!d.a) __builtin_abort (); d.a=NULL; if (*uptr) __builtin_abort (); if ((void *)*cipp != (void*)(size_t)2) __builtin_abort (); *ipp = NULL; if (*cipp) __builtin_abort (); return 0; }