[cfe-dev] Miscompilation of sizeof
Abramo Bagnara
abramo.bagnara at gmail.com
Sun Dec 4 02:30:56 PST 2011
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