[cfe-dev] Expr::isIntegerConstantExpr() gives bogus results with sizeof()

Ted Kremenek kremenek at apple.com
Mon Nov 26 08:40:08 PST 2007


On Nov 25, 2007, at 10:06 PM, Chris Lattner wrote:

>>>> So it seems that sizeof() is being computed in bits, but then the
>>>> operations aren't consistent. (in fact it should be computed in  
>>>> bytes,
>>>> as that's the value of that operator in C/C++)
>>>
>>> Yep, you're right, applied, thanks!
>>>
>>> -Chris
>>
>> Should the fix instead go in the body of getTypeSize() instead of  
>> within isConstantExpr()?  Should getTypeSize() ever return the  
>> number of bits instead of the number of bytes?  Does this have  
>> something to do with bitfields?
>
> This is the right solution.  We want getTypeSize to be unambiguous  
> as to units, and bits are the most constant thing there are.   
> Various strange things like bitfields, non-8-bit-bytes, and  
> datatypes that are not even multiples of byte sizes all conspire to  
> wanting to have a simple and unambiguous unit to represent things  
> in, bits is the right way to go.

Okay.  Seems like a valid reason to me.

> sizeof, on the other hand, is determined in units of sizeof(char).   
> To be fully general, it shouldn't divide by 8, it should divide by  
> TargetInfo.getCharSize().

Should we go ahead and do this?

Nuno:  Thanks again for finding this bug.



More information about the cfe-dev mailing list