C++ conversion status update

Pedro Alves palves@redhat.com
Wed Dec 16 00:21:00 GMT 2015


Forgot to mention that this compiles down to the same as offsetof at -O2.

On 12/16/2015 12:19 AM, Pedro Alves wrote:

> diff --git a/gdb/common/vec.h b/gdb/common/vec.h
> index 6189283..a188b02 100644
> --- a/gdb/common/vec.h
> +++ b/gdb/common/vec.h
> @@ -437,13 +437,23 @@ DEF_VEC_FUNC_O(T)							  \
>  DEF_VEC_ALLOC_FUNC_O(T)							  \
>  struct vec_swallow_trailing_semi
>  
> +/* Avoid offsetof (or its usual C implementation) as it triggers
> +   -Winvalid-offsetof warnings with enum_flags types with G++ <= 4.4,
> +   even though those types are memcpyable.  This requires allocating a
> +   dummy local VEC in all routines that use this, but that has the
> +   advantage that it only works if T is default constructible, which
> +   is exactly a check we want, to keep C compatibility.  */
> +#define vec_offset(T, VPTR) ((size_t) ((char *) &(VPTR)->vec - (char *) VPTR))

Thanks,
Pedro Alves



More information about the Gdb mailing list