25 lines
691 B
C
25 lines
691 B
C
/* Verify that casts between pointers and integers don't trigger false
|
|
positives. Test derived from Glibc's _dl_allocate_tls_storage() in
|
|
dl-tls.c.
|
|
{ dg-do compile }
|
|
{ dg-options "-O2 -Wall -Wno-array-bounds" } */
|
|
|
|
typedef __SIZE_TYPE__ size_t;
|
|
typedef __UINTPTR_TYPE__ uintptr_t;
|
|
|
|
size_t a;
|
|
size_t s;
|
|
|
|
void* _dl_allocate_tls_storage (void)
|
|
{
|
|
void *p = __builtin_malloc (s + a + sizeof (void *));
|
|
|
|
char *q = (char *)(__builtin_constant_p (a) && (((a - 1) & a) == 0)
|
|
? ((((uintptr_t)p) + a - 1) & ~(a - 1))
|
|
: (((((uintptr_t)p) + (a - 1)) / a) * a));
|
|
|
|
char *r = q + s - sizeof (int[4]);
|
|
__builtin_memset (r, '\0', sizeof (int[4]));
|
|
return r;
|
|
}
|