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

Ted Kremenek kremenek at apple.com
Tue Dec 23 23:00:10 PST 2008


On Dec 23, 2008, at 10:41 PM, Zhongxing Xu wrote:

>
>
> 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.


Hmm.  This is definitely worth investigating further.  At the very  
least there should be more comments documenting the invariants/ 
assumptions in the code with regards to the bit location.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20081223/20ca5406/attachment.html>


More information about the cfe-dev mailing list