I've seen this too.  Similar problem with has_bits, though I often
find that the (incorrectly generated) bit-mask is 0x00000000u.

Has anyone debugged this yet to determine the fix?

Regards,

Sean

On Feb 17, 8:17 am, Jim Hunziker <[email protected]> wrote:
> I'm compiling a .proto file in both64bitwindowsand in64bit linux
> (with version 2.4.1 of protobuf). The resulting .pb.h file is fine in
> Linux, but theWindows7 X64 version is very broken with respect to
> has_bits. The problem only occurs when two bytes of has_bits are
> required for tags.
>
> .proto file:
>
> message Foo {
>   required int32 a1 = 1;
>   required int32 a2 = 2;
>   required int32 a3 = 3;
>   required int32 a4 = 4;
>   required int32 a5 = 5;
>   required int32 a6 = 6;
>   required int32 a7 = 7;
>   required int32 a8 = 8;
>   required int32 a9 = 9;
>   required int32 a10 = 10;
>   required int32 a11 = 11;
>   required int32 a12 = 12;
>   required int32 a13 = 13;
>   required int32 a14 = 14;
>   required int32 a15 = 15;
>   required int32 a16 = 16;
>   required int32 a17 = 17;
>   required int32 a18 = 18;
>   required int32 a19 = 19;
>   required int32 a20 = 20;
>   required int32 a21 = 21;
>   required int32 a22 = 22;
>   required int32 a23 = 23;
>   required int32 a24 = 24;
>   required int32 a25 = 25;
>   required int32 a26 = 26;
>   required int32 a27 = 27;
>   required int32 a28 = 28;
>   required int32 a29 = 29;
>   required int32 a31 = 31;
>   required int32 a32 = 32;
>   required int32 a33 = 33;
>   required int32 a34 = 34;
>
> }
>
> relevant part of test.pb.h in Linux (looks correct):
>
> // required int32 a24 = 24;
> inline bool Foo::has_a24() const {
>   return (_has_bits_[0] & 0x00800000u) != 0;}
>
> inline void Foo::set_has_a24() {
>   _has_bits_[0] |= 0x00800000u;}
>
> inline void Foo::clear_has_a24() {
>   _has_bits_[0] &= ~0x00800000u;}
>
> inline void Foo::clear_a24() {
>   a24_ = 0;
>   clear_has_a24();}
>
> inline ::google::protobuf::int32 Foo::a24() const {
>   return a24_;}
>
> inline void Foo::set_a24(::google::protobuf::int32 value) {
>   set_has_a24();
>   a24_ = value;
>
> }
>
> // required int32 a25 = 25;
> inline bool Foo::has_a25() const {
>   return (_has_bits_[0] & 0x01000000u) != 0;}
>
> inline void Foo::set_has_a25() {
>   _has_bits_[0] |= 0x01000000u;}
>
> inline void Foo::clear_has_a25() {
>   _has_bits_[0] &= ~0x01000000u;}
>
> inline void Foo::clear_a25() {
>   a25_ = 0;
>   clear_has_a25();}
>
> inline ::google::protobuf::int32 Foo::a25() const {
>   return a25_;}
>
> inline void Foo::set_a25(::google::protobuf::int32 value) {
>   set_has_a25();
>   a25_ = value;
>
> }
>
> relevant part of test.pb.h inWindows7 X64 (broken! look at the masks
> for a25):
>
> // required int32 a24 = 24;
> inline bool Foo::has_a24() const {
>   return (_has_bits_[0] & 0x00800000u) != 0;}
>
> inline void Foo::set_has_a24() {
>   _has_bits_[0] |= 0x00800000u;}
>
> inline void Foo::clear_has_a24() {
>   _has_bits_[0] &= ~0x00800000u;}
>
> inline void Foo::clear_a24() {
>   a24_ = 0;
>   clear_has_a24();}
>
> inline ::google::protobuf::int32 Foo::a24() const {
>   return a24_;}
>
> inline void Foo::set_a24(::google::protobuf::int32 value) {
>   set_has_a24();
>   a24_ = value;
>
> }
>
> // required int32 a25 = 25;
> inline bool Foo::has_a25() const {
>   return (_has_bits_[0] & 0x11000000u) != 0;}
>
> inline void Foo::set_has_a25() {
>   _has_bits_[0] |= 0x11000000u;}
>
> inline void Foo::clear_has_a25() {
>   _has_bits_[0] &= ~0x11000000u;}
>
> inline void Foo::clear_a25() {
>   a25_ = 0;
>   clear_has_a25();}
>
> inline ::google::protobuf::int32 Foo::a25() const {
>   return a25_;}
>
> inline void Foo::set_a25(::google::protobuf::int32 value) {
>   set_has_a25();
>   a25_ = value;
>
>
>
>
>
>
>
> }

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en.

Reply via email to