[cfe-dev] BitstreamReader::GetCurrentBitNo() counterintuitive

Zhongxing Xu xuzhongxing at gmail.com
Tue Dec 23 22:41:57 PST 2008


On Wed, Dec 24, 2008 at 2:16 PM, Ted Kremenek <kremenek at apple.com> wrote:

>
> On Dec 23, 2008, at 5:01 PM, Zhongxing Xu wrote:
>
>
>
> On Wed, Dec 24, 2008 at 7:29 AM, Ted Kremenek <kremenek at apple.com> wrote:
>
>> Part of the problem is that "Deserialize.cpp" (in llvm) uses
>> GetCurrentBitNo() in a whole bunch of places.  AST
>> serialization/deserialization is the only client of the serialization
>> library, and there aren't that many test cases in the clang test suite for
>> AST serialization because it just hasn't been completed yet.  I have a
>> feeling that changing the behavior of GetCurrentBitNo() will break things.
>>
>> I'm actually a little surprised that GetCurrentBitNo() needs to be
>> changed.  While the AST serialization work is incomplete, it has worked for
>> non-trivial cases.  Since it uses GetCurrentBitNo() to jump around the
>> bitcode file, I'm suspicious that anything needs to be changed.
>>
>> Also, what happens if NextChar == FirstChar?  Wouldn't
>> (NextChar-FirstChar-4)*8 be a negative number?
>>
>
> It will be negative. But in that case,  BitsInCurWord will be 0, the final
> result is 0.
>
>
> Okay.  If GetCurrentBitNo() is broken then it should be fixed.  I
> personally haven't looked at it in detail recently, so I'm not certain what
> the ramifications would be if we changed it or why it seems to work
> correctly now (or maybe it doesn't?).
>

I do think GetCurrentBitNo() is broken, because it is not returning the bit
# we are reading. But it works now, partially because we have code like
this:

     if (WordBitNo) {
-      NextChar -= 4;
       Read(static_cast<unsigned>(WordBitNo));

I don't know if there is other code doing the similar compensate work.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20081224/099ca086/attachment.html>


More information about the cfe-dev mailing list