[LLVMdev] variable sized array

Duncan Sands baldrick at free.fr
Fri Apr 23 02:31:48 PDT 2010


Hi Yuanfang,

> just a quick question, in llvm::TargetData,
>
> uint64_t MemberOffsets[1];  // variable sized array!
>
> MemberOffsets has two elements, why it's variable sized ?

when a StructLayout object is allocated (in TargetData::getStructLayout),
extra memory is allocated, more than that given by the size of the type.
The extra memory is interpreted as being part of the MemberOffsets array,
and is used for storing additional member offsets beyond the first one.

This kind of trick generates warnings with gcc-4.5.  Maybe it can be done
better.  I thought you were supposed to use
   uint64_t MemberOffsets[];
but perhaps I am mistaken.

Ciao,

Duncan.



More information about the llvm-dev mailing list