Hi! This patch attempts to optimize VEC_BASE if we know that offsetof of base is 0 (unless the compiler is doing something strange, it is true). It doesn't have a clear code size effect, some .text sections grew, supposedly because of more inlining, some .text sections shrunk.
Bootstrapped/regtested on x86_64-linux and i686-linux. 2011-11-07 Jakub Jelinek <ja...@redhat.com> * vec.h (VEC_BASE): If base is at offset 0 in the structure, use &(P)->base even if P is NULL. --- gcc/vec.h.jj 2011-09-08 11:21:10.000000000 +0200 +++ gcc/vec.h 2011-11-07 18:45:33.000000000 +0100 @@ -549,7 +549,12 @@ typedef struct VEC(T,A) \ } VEC(T,A) /* Convert to base type. */ +#if GCC_VERSION >= 4000 +#define VEC_BASE(P) \ + ((offsetof (__typeof (*P), base) == 0 || (P)) ? &(P)->base : 0) +#else #define VEC_BASE(P) ((P) ? &(P)->base : 0) +#endif /* Vector of integer-like object. */ #define DEF_VEC_I(T) \ Jakub