@@ -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))
@@ -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;
}
@@ -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)));
@@ -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);
}
@@ -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)