rtrieu added a comment. This seems rather strange. Usually, a OpaqueValueExpr will hold an expression that is held elsewhere in the AST. However, in this case, it appears that all the references to --i are all behind OpaqueValueExpr's, so they aren't processed.
`-CStyleCastExpr 0x5675d30 <line:11:5, col:19> 'void' <ToVoid> `-PseudoObjectExpr 0x5675d00 <col:11, col:19> 'id':'id' |-ObjCSubscriptRefExpr 0x5675c90 <col:11, col:19> '<pseudo-object type>' lvalue Kind=ArraySubscript GetterForArray="(null)" SetterForArray="(null) | |-OpaqueValueExpr 0x5675c50 <col:11> 'MyArray *' | | `-ImplicitCastExpr 0x5675bf0 <col:11> 'MyArray *' <LValueToRValue> | | `-DeclRefExpr 0x5675b80 <col:11> 'MyArray *' lvalue Var 0x56756d0 'test' 'MyArray *' | `-OpaqueValueExpr 0x5675c70 <col:16, col:18> 'unsigned int' | `-UnaryOperator 0x5675bd0 <col:16, col:18> 'unsigned int' prefix '--' | `-DeclRefExpr 0x5675ba8 <col:18> 'unsigned int' lvalue Var 0x56759e0 'i' 'unsigned int' |-OpaqueValueExpr 0x5675c50 <col:11> 'MyArray *' | `-ImplicitCastExpr 0x5675bf0 <col:11> 'MyArray *' <LValueToRValue> | `-DeclRefExpr 0x5675b80 <co `-CStyleCastExpr 0x5675d30 <line:11:5, col:19> 'void' <ToVoid> `-PseudoObjectExpr 0x5675d00 <col:11, col:19> 'id':'id' |-ObjCSubscriptRefExpr 0x5675c90 <col:11, col:19> '<pseudo-object type>' lvalue Kind=ArraySubscript GetterForArray="(null)" SetterForArray="(null) | |-OpaqueValueExpr 0x5675c50 <col:11> 'MyArray *' | | `-ImplicitCastExpr 0x5675bf0 <col:11> 'MyArray *' <LValueToRValue> | | `-DeclRefExpr 0x5675b80 <col:11> 'MyArray *' lvalue Var 0x56756d0 'test' 'MyArray *' | `-OpaqueValueExpr 0x5675c70 <col:16, col:18> 'unsigned int' | `-UnaryOperator 0x5675bd0 <col:16, col:18> 'unsigned int' prefix '--' | `-DeclRefExpr 0x5675ba8 <col:18> 'unsigned int' lvalue Var 0x56759e0 'i' 'unsigned int' |-OpaqueValueExpr 0x5675c50 <col:11> 'MyArray *' | `-ImplicitCastExpr 0x5675bf0 <col:11> 'MyArray *' <LValueToRValue> | `-DeclRefExpr 0x5675b80 <col:11> 'MyArray *' lvalue Var 0x56756d0 'test' 'MyArray *' |-OpaqueValueExpr 0x5675c70 <col:16, col:18> 'unsigned int' | `-UnaryOperator 0x5675bd0 <col:16, col:18> 'unsigned int' prefix '--' | `-DeclRefExpr 0x5675ba8 <col:18> 'unsigned int' lvalue Var 0x56759e0 'i' 'unsigned int' `-ObjCMessageExpr 0x5675cc8 <col:11> 'id':'id' selector=objectAtIndexedSubscript: |-OpaqueValueExpr 0x5675c50 <col:11> 'MyArray *' | `-ImplicitCastExpr 0x5675bf0 <col:11> 'MyArray *' <LValueToRValue> | `-DeclRefExpr 0x5675b80 <col:11> 'MyArray *' lvalue Var 0x56756d0 'test' 'MyArray *' `-OpaqueValueExpr 0x5675c70 <col:16, col:18> 'unsigned int' `-UnaryOperator 0x5675bd0 <col:16, col:18> 'unsigned int' prefix '--' `-DeclRefExpr 0x5675ba8 <col:18> 'unsigned int' lvalue Var 0x56759e0 'i' 'unsigned int'l:11> 'MyArray *' lvalue Var 0x56756d0 'test' 'MyArray *' |-OpaqueValueExpr 0x5675c70 <col:16, col:18> 'unsigned int' | `-UnaryOperator 0x5675bd0 <col:16, col:18> 'unsigned int' prefix '--' | `-DeclRefExpr 0x5675ba8 <col:18> 'unsigned int' lvalue Var 0x56759e0 'i' 'unsigned int' `-ObjCMessageExpr 0x5675cc8 <col:11> 'id':'id' selector=objectAtIndexedSubscript: |-OpaqueValueExpr 0x5675c50 <col:11> 'MyArray *' | `-ImplicitCastExpr 0x5675bf0 <col:11> 'MyArray *' <LValueToRValue> | `-DeclRefExpr 0x5675b80 <col:11> 'MyArray *' lvalue Var 0x56756d0 'test' 'MyArray *' `-OpaqueValueExpr 0x5675c70 <col:16, col:18> 'unsigned int' `-UnaryOperator 0x5675bd0 <col:16, col:18> 'unsigned int' prefix '--' `-DeclRefExpr 0x5675ba8 <col:18> 'unsigned int' lvalue Var 0x56759e0 'i' 'unsigned int' Typically, we skip OpaqueValueExpr so that we don't process the same expression multiple times. I don't know enough about Objective C to know whether this is the intended pattern or an oversight. Instead of visiting all the sub-expressions of OpaqueValueExpr's, try to make a tighter visitor to avoid repeating work. I think checking the sub-expressions of ObjCSubscriptRefExpr, and looking through the OpaqueValueExpr's there would be the best way for this. http://reviews.llvm.org/D17627 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits