* Peter Maydell (peter.mayd...@linaro.org) wrote: > On Thu, 25 Jul 2019 at 19:00, Dr. David Alan Gilbert > <dgilb...@redhat.com> wrote: > > > > * Peter Maydell (peter.mayd...@linaro.org) wrote: > > > On Thu, 25 Jul 2019 at 18:27, Dr. David Alan Gilbert > > > <dgilb...@redhat.com> wrote: > > > > > > > > * Peter Maydell (peter.mayd...@linaro.org) wrote: > > > > > #define type_check_2darray(t1,t2,n,m) ((t1(*)[n][m])0 - (t2*)0) > > > > > +/* Check that t2 is an array of t1 of size n */ > > > > > #define type_check_array(t1,t2,n) ((t1(*)[n])0 - (t2*)0) > > > > > > > > I'd have to admit I don't understand why that does what you say; > > > > I'd expected something to index a t2 pointer with [n]. > > > > > > Note that this is just a comment describing what the existing > > > macro does, as a way to distinguish its job from that of the > > > new macro I'm adding. > > > > > > What happens here is that t2 is a type like "foo [32]", ie > > > it is an array type already. t1 is the base 'foo' type; so the macro > > > is checking that t1[n] matches t2, where n is passed in to us > > > and must match the declared array size of the field (32 in > > > my example). (In C the size of the array is carried around as > > > part of its type, and must match on both sides of the expression; > > > so if you pass in the name of an array field that's the wrong size the > > > type check will fail, which is what we want.) > > > > Ah, OK that makes sense; what it really needs is that example to make > > me realise that t2 was already the array. > > Would > > /* > * Check that type t2 is an array of type t1 of size n, > * eg if t1 is 'foo' and n is 32 then t2 must be 'foo[32]' > */ > > be clearer ?
Yep. Dave > thanks > -- PMM -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK