[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