[cfe-dev] [analyzer] VisitIncDecOp store
Rafael·Stahl via cfe-dev
cfe-dev at lists.llvm.org
Fri Apr 6 04:56:32 PDT 2018
While developing a checker I have noticed that in the checkLocation
callback I received an unexpected Expr. It was an UnaryOperator of
non-pointer type and its SVal was a loc::ConcreteInt which doesn't
really make sense in my opinion.
When looking into this in ExprEngineC.cpp
ExprEngine::VisitIncrementDecrementOperator I noticed that the calls to
evalStore pass the whole UnaryOperator Expr as third argument LocationE.
This LocationE is documented as "The location expression that is stored
to". I would have understood this as the sub-expression of the UnaryOp
instead of the Op itself.
-evalStore(Dst3, U, U, ...);
+evalStore(Dst3, U, Ex, ...);
volatile int *p;
UnaryOperator 0x1bad960 'int' postfix '++'
`-ParenExpr 0x1bad940 'volatile int' lvalue
`-UnaryOperator 0x1bad920 'volatile int' lvalue prefix '*' cannot
`-ImplicitCastExpr 0x1bad908 'volatile int *' <LValueToRValue>
`-DeclRefExpr 0x1bad8e0 'volatile int *' lvalue Var 0x1bad320 'p'
'volatile int *'
Here the outer UnaryOp is passed as SVal in checkLocation instead of the
Is my understanding correct? In that case I'm able to submit a patch.
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 5449 bytes
Desc: S/MIME Cryptographic Signature
More information about the cfe-dev