cp-tree.h (REFERENCE_REF_P): Just check the type.
authorJason Merrill <jason@redhat.com>
Thu, 5 May 2011 20:09:18 +0000 (16:09 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 5 May 2011 20:09:18 +0000 (16:09 -0400)
* cp-tree.h (REFERENCE_REF_P): Just check the type.
* cvt.c (convert_from_reference): Adjust.
* pt.c (build_non_dependent_expr): Adjust.
* semantics.c (finish_offsetof): Adjust.
* tree.c (lvalue_kind): Use it.

From-SVN: r173449

gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/cvt.c
gcc/cp/pt.c
gcc/cp/semantics.c
gcc/cp/tree.c

index ff3ad54d05f7063291fb74d60001fbeda21f78e0..20057c5bc6e7430dacb5d98a822c54e90c6a3de1 100644 (file)
@@ -1,5 +1,11 @@
 2011-05-05  Jason Merrill  <jason@redhat.com>
 
+       * cp-tree.h (REFERENCE_REF_P): Just check the type.
+       * cvt.c (convert_from_reference): Adjust.
+       * pt.c (build_non_dependent_expr): Adjust.
+       * semantics.c (finish_offsetof): Adjust.
+       * tree.c (lvalue_kind): Use it.
+
        PR c++/48873
        * tree.c (stabilize_expr): Don't make gratuitous copies of classes.
 
index 961581e50c2a4dc06d878449640a574ab89b9463..fcb715ce7ddb436106fbbde3e36fe17efc768ea5 100644 (file)
@@ -62,7 +62,6 @@ c-common.h, not after.
       STMT_EXPR_NO_SCOPE (in STMT_EXPR)
       BIND_EXPR_TRY_BLOCK (in BIND_EXPR)
       TYPENAME_IS_ENUM_P (in TYPENAME_TYPE)
-      REFERENCE_REF_P (in INDIRECT_EXPR)
       QUALIFIED_NAME_IS_TEMPLATE (in SCOPE_REF)
       OMP_FOR_GIMPLIFYING_P (in OMP_FOR)
       BASELINK_QUALIFIED_P (in BASELINK)
@@ -2781,9 +2780,12 @@ extern void decl_shadowed_for_var_insert (tree, tree);
   (LANG_DECL_FN_CHECK (FUNCTION_DECL_CHECK (NODE))     \
    ->u.saved_language_function)
 
-/* Indicates an indirect_expr is for converting a reference.  */
-#define REFERENCE_REF_P(NODE) \
-  TREE_LANG_FLAG_0 (INDIRECT_REF_CHECK (NODE))
+/* True if NODE is an implicit INDIRECT_EXPR from convert_from_reference.  */
+#define REFERENCE_REF_P(NODE)                          \
+  (TREE_CODE (NODE) == INDIRECT_REF                    \
+   && TREE_TYPE (TREE_OPERAND (NODE, 0))               \
+   && (TREE_CODE (TREE_TYPE (TREE_OPERAND ((NODE), 0)))        \
+       == REFERENCE_TYPE))
 
 #define NEW_EXPR_USE_GLOBAL(NODE) \
   TREE_LANG_FLAG_0 (NEW_EXPR_CHECK (NODE))
index 64fe87187ab230d88fee0c3b52877723fe6c0190..db4ea46e46aba7620fd034bfa73305a830d68a7e 100644 (file)
@@ -520,7 +520,6 @@ convert_from_reference (tree val)
       TREE_THIS_VOLATILE (ref) = CP_TYPE_VOLATILE_P (t);
       TREE_SIDE_EFFECTS (ref)
        = (TREE_THIS_VOLATILE (ref) || TREE_SIDE_EFFECTS (val));
-      REFERENCE_REF_P (ref) = 1;
       val = ref;
     }
 
index b56ab1f1abdc93fbb99dadf8865153fb69edccab..d109e1bd739c4e3d113da523021b7cce24d046b3 100644 (file)
@@ -18918,7 +18918,7 @@ build_non_dependent_expr (tree expr)
 
   /* Keep dereferences outside the NON_DEPENDENT_EXPR so lvalue_kind
      doesn't need to look inside.  */
-  if (TREE_CODE (expr) == INDIRECT_REF && REFERENCE_REF_P (expr))
+  if (REFERENCE_REF_P (expr))
     return convert_from_reference (build_non_dependent_expr
                                   (TREE_OPERAND (expr, 0)));
 
index 815824a5b7a40f5f3a59bec41e867a01dce386f6..8bf5a521dd4883c32eca4665883500a3c343c8a4 100644 (file)
@@ -3428,7 +3428,7 @@ finish_offsetof (tree expr)
       error ("cannot apply %<offsetof%> to member function %qD", expr);
       return error_mark_node;
     }
-  if (TREE_CODE (expr) == INDIRECT_REF && REFERENCE_REF_P (expr))
+  if (REFERENCE_REF_P (expr))
     expr = TREE_OPERAND (expr, 0);
   return fold_offsetof (expr, NULL_TREE);
 }
index 9a6e26dcabfb9d780fd29884732686c5097886bd..32303930527753d70bd8e285d31db6368afed33c 100644 (file)
@@ -61,9 +61,7 @@ lvalue_kind (const_tree ref)
      INDIRECT_REFs.  INDIRECT_REFs are just internal compiler
      representation, not part of the language, so we have to look
      through them.  */
-  if (TREE_CODE (ref) == INDIRECT_REF
-      && TREE_CODE (TREE_TYPE (TREE_OPERAND (ref, 0)))
-         == REFERENCE_TYPE)
+  if (REFERENCE_REF_P (ref))
     return lvalue_kind (TREE_OPERAND (ref, 0));
 
   if (TREE_TYPE (ref)