/* { dg-do compile } */ | |
/* { dg-options "-O2 -w" } */ | |
typedef unsigned int hashval_t; | |
enum ETYPE | |
{ | |
ETYPE_ARRAY, ETYPE_STRUCT, ETYPE_UNION, | |
}; | |
struct entry | |
{ | |
enum ETYPE etype:8; | |
unsigned short len; | |
const char *attrib; | |
}; | |
e_hash (const void *a) | |
{ | |
const struct entry *e = a; | |
hashval_t ret = 0; | |
int i; | |
if (e[0].etype != ETYPE_STRUCT && e[0].etype != ETYPE_UNION) | |
abort (); | |
for (i = 0; i <= e[0].len; ++i) | |
{ | |
ret = iterative_hash (&e[i], __builtin_offsetof (struct entry, attrib), ret); | |
} | |
return ret; | |
} |