diff --git a/gcc/ada/decl.c b/gcc/ada/decl.c
index db806209f70c86320790eb16249a4648722d860f..9d2e8fe871de8a75f4dd0100847698b991009f14 100644
--- a/gcc/ada/decl.c
+++ b/gcc/ada/decl.c
@@ -776,13 +776,12 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
 	      }
 
 	    /* 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);
diff --git a/gcc/ada/trans.c b/gcc/ada/trans.c
index 10955e352316d47a8317f56bb5d2829d93344247..fd42e837a2bdb3190dc87b7481d9d414c37cb57a 100644
--- a/gcc/ada/trans.c
+++ b/gcc/ada/trans.c
@@ -410,8 +410,7 @@ Identifier_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p)
 	       && (! 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,