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.