}
/* Otherwise, make this into a constant pointer to the object we
- are to rename.
-
- Stabilize it since in this case the renaming evaluation may
- directly dereference the initial value we make here instead
- of the pointer we will assign it to. We don't want variables
- in the expression to be evaluated every time the renaming is
- used, since their value may change in between. */
+ are to rename and attach the object to the pointer. We need
+ to stabilize too since the renaming evaluation may directly
+ reference the renamed object instead of the pointer we will
+ attach it to. We don't want variables in the expression to
+ be evaluated every time the renaming is used, since their
+ value may change in between. */
else
{
bool has_side_effects = TREE_SIDE_EFFECTS (gnu_expr);
&& (! DECL_RENAMING_GLOBAL_P (gnu_result)
|| global_bindings_p ())
/* Make sure it's an lvalue like INDIRECT_REF. */
- && (TREE_CODE_CLASS (TREE_CODE (renamed_obj)) == 'd'
- || TREE_CODE_CLASS (TREE_CODE (renamed_obj)) == 'r'))
+ && (DECL_P (renamed_obj) || REFERENCE_CLASS_P (renamed_obj)))
gnu_result = renamed_obj;
else
gnu_result = build_unary_op (INDIRECT_REF, NULL_TREE,