[cfe-dev] Miscompilation of sizeof

Abramo Bagnara abramo.bagnara at gmail.com
Sat Dec 10 12:52:19 PST 2011


Ping.

> 
> In ASTContext:::getTypeInfo(const Type *T) const we have:
> 
>   uint64_t Width=0;
> 
>   case Type::ConstantArray: {
>     const ConstantArrayType *CAT = cast<ConstantArrayType>(T);
> 
>     std::pair<uint64_t, unsigned> EltInfo =
> getTypeInfo(CAT->getElementType());
>     Width = EltInfo.first*CAT->getSize().getZExtValue();
> 
> But this multiplication can overflow (because for reasons that I don't
> known getTypeInfo return width specified in bits).
> 
> If there are no objections I'd add an assert: probably we'll induce some
> crashes, but I believe that this would be *far* better than to
> miscompile the code (and assertions will be triggered only when code
> would be miscompiled).
> 



More information about the cfe-dev mailing list