Juan Quintela wrote:
>  * add VARRAY_UINT16_UNSAFE: unsafe here means that type checking is off
>    (a.k.a. as a cast in C).  In this case the problem is that the last
>    element of one struct is int foo[0], and we allocate the right size
>    for the array we want.  Problem?  I haven't been able to abuse^Wuse
>    gcc + cpp + magic to typecheck that for vmstate:
> 
>    We have
>    struct FOO {
>         int32_t foo[0];
>    }
>    We want to "compare the type of foo (t1) with int32_t (t2)
> 
>         ((t1(*)[n])0 - (t2*)0)
>    This one don't work, because we don't have 'n'
>         ((t1(**))0 - (t2*)0)
>    This don't work either because t1 is one array.
>         ((t1(*)[])0 - (t2*)0)
>    Too clever, imposible cast to on array type.
>    I tried some other variants, but have not able to get one that compiles.

Since you mention GCC, is it ok to use GCC extensions?  __typeof__(t1)
often does the trick for this sort of thing where t1 alone does not
compile, even if t1 is a type.

__builtin_types_compatible_p(), __builtin_choose_exper and
__attribute__((__error__)) are good for informative error messages.

-- Jamie


Reply via email to