Hi all,
I am confused on the behavior of Analyzer dealing with DeclRefExpr. For an example:
1 int a, b;
2 a = 56;
3 b = a;
4 a = b - 8;
I wanted to print the Stmt information in the checkPostStmt(), and I got the results below:
IntegerLiteral 0x4dbc078 ‘int’ 56
BinaryOperator 0x4dbc098 ‘int’ ‘=’
-DeclRefExpr 0x4dbc050 ‘int’ lvalue Var 0x4d8bc80 ‘a’ ‘int’
`-IntegerLiteral 0x4dbc078 ‘int’ 56
ImplicitCastExpr 0x4dbc110 ‘int’
`-DeclRefExpr 0x4dbc0e8 ‘int’ lvalue Var 0x4d8bc80 ‘a’ ‘int’
BinaryOperator 0x4dbc128 ‘int’ ‘=’
-DeclRefExpr 0x4dbc0c0 ‘int’ lvalue Var 0x4d8bcf0 ‘b’ ‘int’
-ImplicitCastExpr **0x4dbc110** 'int' <LValueToRValue>
-DeclRefExpr 0x4dbc0e8 ‘int’ lvalue Var 0x4d8bc80 ‘a’ ‘int’
ImplicitCastExpr 0x4dbc1c0 ‘int’
`-DeclRefExpr 0x4dbc178 ‘int’ lvalue Var 0x4d8bcf0 ‘b’ ‘int’
IntegerLiteral 0x4dbc1a0 ‘int’ 8
BinaryOperator 0x4dbc1d8 ‘int’ ‘-’
-ImplicitCastExpr 0x4dbc1c0 ‘int’
-DeclRefExpr 0x4dbc178 'int' lvalue Var 0x4d8bcf0 'b' 'int'
-IntegerLiteral 0x4dbc1a0 ‘int’ 8
BinaryOperator 0x4dbc200 ‘int’ ‘=’
-DeclRefExpr 0x4dbc150 ‘int’ lvalue Var 0x4d8bc80 ‘a’ ‘int’
-BinaryOperator **0x4dbc1d8** 'int' '-' -ImplicitCastExpr 0x4dbc1c0 'int' <LValueToRValue>
-DeclRefExpr 0x4dbc178 ‘int’ lvalue Var 0x4d8bcf0 ‘b’ ‘int’
`-IntegerLiteral 0x4dbc1a0 ‘int’ 8
As we know, the Environment provides us a chance to get the corresponding value of some expression. So, when evaluating the value of BinOp 0x4dbc200 ‘int’ ‘=’, it can use the value of BinOp 0x4dbc1d8 ‘int’ ‘-’, which has been evaluated already.
Now I want to know that how Analyzer evaluates ‘b = a’ in Line 3. In other words, how does Analyzer know the value of a when evaluating ImplicitCastExpr 0x4dbc110 ‘int’ ? Does Analyzer get the value of a from Environment?
Thanks a lot.