I found another reason this can happen: If you compile with an `-march` newer than the target CPU.
For example, if I compile a minimal protobuf example using SerializeToArray() using `-march=haswell` and execute it on a Sandy Bridge CPU, I get: [libprotobuf FATAL google/protobuf/message_lite.cc:71] CHECK failed: (bytes_produced_by_serialization) == (byte_size_before_serialization): Byte size calculation and serialization were inconsistent. This may indicate a bug in protocol buffers or it may be caused by concurrent modification of myproject.proto.MyMessage. This is very surprising, because usually using a too new march only results at most in an obvious `illegal instruction` error, not an incorrect result at runtime. I have investigated why this is the case: I bisected the feature flags enabled by `-march=haswell` and found that `-mno-lzcnt` fixes the issue (so `-march=haswell -mno-lzcnt` works fine on Sandy Bridge for my example code). Here is why: * https://nextmovesoftware.com/blog/2017/06/06/the-perils-of-using-__lzcnt-with-msvc/ * https://stackoverflow.com/questions/25683690/confusion-about-bsr-and-lzcnt/43443701#43443701 > instead of getting an ‘illegal instruction’ result when you run it, Intel [...] decided to reuse or repurpose existing opcodes so that CPUs without ‘lzcnt’ instead did a ‘bsr’ (bit scan reverse). This was why (a) the results were different/wrong, and (b) why a value of 0 gave gibberish (the docs for ‘bsr’ say the results are undefined in that case). I have confirmed that the code generated by `-march=haswell` contains `lzcnt` instructions. Hope this helps anybody! Niklas On Monday, November 16, 2015 at 1:05:19 AM UTC+1, snail thum wrote: > > I have same problem now, and there is no uninitialized boolean attr >> >> -- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/protobuf. For more options, visit https://groups.google.com/d/optout.
