I'm compiling a .proto file in both 64 bit windows and in 64 bit linux
(with version 2.4.1 of protobuf). The resulting .pb.h file is fine in
Linux, but the Windows 7 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 in Windows 7 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.