Are there any questions about this patch, or is there some other reason it has not been applied to 5.12? Cheers, -Jan On Fri, 01 Feb 2008, Jan Dubois wrote: > On Wed, 30 Jan 2008, Jan Dubois wrote: > > This is not really a core Perl bug; the problem is that VC++ and GCC > > are incompatible as far as bit-fields are concerned. In Perl 5.10 > > the BASEOP structure contains bitfields: > > > > unsigned op_type:9; \ > > unsigned op_opt:1; \ > > unsigned op_latefree:1; \ > > unsigned op_latefreed:1; \ > > unsigned op_attached:1; \ > > unsigned op_spare:3; \ > > > > In VC++ the combined size of the fields above is 4 bytes, whereas > > in GCC it is only 2. This also pushes the size of the complete > > structure from 20 to 24 bytes for VC++. > > [...] > > > VC++ uses the base type (unsigned int, in this case) to determine > > the alignment requirements and total size of the combined bit-field. > > You can use the non-standard extension of using smaller integer sizes > > to force the fields into a smaller size and different alignment. > > In this case using "unsigned short" for the type of the bit-fields > > should work. > > > > I guess for Perl 5.12 we need a way to let us use the smaller base > > size for VC++ to keep the size of the OP structure down. I'll create > > a patch for it eventually, when I get a bit more time. I also need > > to check if there are other places where Perl is now using bit fields > > in its structure definitions. > > I've attached a patch that defined PERL_BITFIELD8, PERL_BITFIELD16 > and PERL_BITFIELD32 symbols to be used to specify bitfields whose > base size and alignment requirements are 1, 2 or 4 bytes respectively. > The "PERL_" prefix is a bit awkward, but these are names that must > be defined even when PERL_CORE is not. > > These symbols are then being redefined for VC (and MinGW GCC) to use the > corresponding smaller sizes as the base types. > > I've also added -mms-bitfields to the default options for MinGW in > makefile.mk. That way building additional XS modules that interface > to VC compatible libraries using bit-fields in their external APIs > should be easier. > > Cheers, > -JanThread Previous