[cfe-commits] r130573 - in /cfe/trunk/include/clang/AST: Expr.h Stmt.h
Argyrios Kyrtzidis
akyrtzi at gmail.com
Sat Apr 30 19:21:19 PDT 2011
On Apr 30, 2011, at 10:27 AM, Fariborz Jahanian wrote:
> Doesn't this deserve a warning somewhere?
We do have a warning if you set a constant that overflows the bitfield.
But the static analyzer doesn't seem to have a checker for that, submitted http://llvm.org/PR9821.
> What can trigger this assertion?
CastExprBits.BasePathSize is currently 11 bits so if you have more than 2048 base classes in your class there will be an assertion :-)
-Argiris
>
> - Fariborz
>
> On Apr 29, 2011, at 7:28 PM, Argyrios Kyrtzidis wrote:
>
>> Author: akirtzidis
>> Date: Fri Apr 29 21:28:27 2011
>> New Revision: 130573
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=130573&view=rev
>> Log:
>> Add a couple of assertions to make sure the bitfields can fit the value assigned to them. No functionality change.
>>
>> Modified:
>> cfe/trunk/include/clang/AST/Expr.h
>> cfe/trunk/include/clang/AST/Stmt.h
>>
>> Modified: cfe/trunk/include/clang/AST/Expr.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Expr.h?rev=130573&r1=130572&r2=130573&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/AST/Expr.h (original)
>> +++ cfe/trunk/include/clang/AST/Expr.h Fri Apr 29 21:28:27 2011
>> @@ -2243,6 +2243,12 @@
>> }
>> CXXBaseSpecifier **path_buffer();
>>
>> + void setBasePathSize(unsigned basePathSize) {
>> + CastExprBits.BasePathSize = basePathSize;
>> + assert(CastExprBits.BasePathSize == basePathSize &&
>> + "basePathSize doesn't fit in bits of CastExprBits.BasePathSize!");
>> + }
>> +
>> protected:
>> CastExpr(StmtClass SC, QualType ty, ExprValueKind VK,
>> const CastKind kind, Expr *op, unsigned BasePathSize) :
>> @@ -2258,14 +2264,14 @@
>> Op(op) {
>> assert(kind != CK_Invalid && "creating cast with invalid cast kind");
>> CastExprBits.Kind = kind;
>> - CastExprBits.BasePathSize = BasePathSize;
>> + setBasePathSize(BasePathSize);
>> CheckCastConsistency();
>> }
>>
>> /// \brief Construct an empty cast.
>> CastExpr(StmtClass SC, EmptyShell Empty, unsigned BasePathSize)
>> : Expr(SC, Empty) {
>> - CastExprBits.BasePathSize = BasePathSize;
>> + setBasePathSize(BasePathSize);
>> }
>>
>> public:
>>
>> Modified: cfe/trunk/include/clang/AST/Stmt.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Stmt.h?rev=130573&r1=130572&r2=130573&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/AST/Stmt.h (original)
>> +++ cfe/trunk/include/clang/AST/Stmt.h Fri Apr 29 21:28:27 2011
>> @@ -426,6 +426,8 @@
>> SourceLocation LB, SourceLocation RB)
>> : Stmt(CompoundStmtClass), LBracLoc(LB), RBracLoc(RB) {
>> CompoundStmtBits.NumStmts = NumStmts;
>> + assert(CompoundStmtBits.NumStmts == NumStmts &&
>> + "NumStmts doesn't fit in bits of CompoundStmtBits.NumStmts!");
>>
>> if (NumStmts == 0) {
>> Body = 0;
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
More information about the cfe-commits
mailing list