aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2010-01-07 16:14:02 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2010-01-07 16:14:02 +0000
commitf68a75df3b44539aca863cf89e1d8eac98ca5010 (patch)
treedb0482ed39bfbaeb0587c8d44b2175b07d0fdb8f
parent617531d9dd196e638c1cd9cae76d9d329309b627 (diff)
downloadgcc-f68a75df3b44539aca863cf89e1d8eac98ca5010.zip
gcc-f68a75df3b44539aca863cf89e1d8eac98ca5010.tar.gz
gcc-f68a75df3b44539aca863cf89e1d8eac98ca5010.tar.bz2
gimple.h (gss_for_code): Wrap gcc_assert in ENABLE_CHECKING.
2010-01-07 Richard Guenther <rguenther@suse.de> * gimple.h (gss_for_code): Wrap gcc_assert in ENABLE_CHECKING. (gimple_op): Likewise. (gimple_op_ptr): Likewise. (gimple_assign_set_lhs): Remove gcc_assert. (gimple_assign_set_rhs1): Likewise. (gimple_assign_set_rhs2): Likewise. (gimple_call_set_lhs): Likewise. (gimple_call_set_fn): Likewise. (gimple_call_set_fndecl): Likewise. (gimple_call_fndecl): Likewise. (gimple_call_return_type): Likewise. (gimple_call_set_chain): Likewise. (gimple_call_num_args): Likewise. (gimple_call_set_arg): Likewise. (gimple_cond_set_code): Likewise. (gimple_cond_set_lhs): Likewise. (gimple_cond_set_rhs): Likewise. (gimple_cond_set_true_label): Likewise. (gimple_cond_set_false_label): Likewise. (gimple_label_set_label): Likewise. (gimple_goto_set_dest): Likewise. (gimple_debug_bind_get_var): Wrap gcc_assert in ENABLE_CHECKING. (gimple_debug_bind_get_value): Likewise. (gimple_debug_bind_get_value_ptr): Likewise. (gimple_debug_bind_set_var): Likewise. (gimple_debug_bind_set_value): Likewise. (gimple_debug_bind_reset_value): Likewise. (gimple_debug_bind_has_value_p): Likewise. (gimple_return_retval_ptr): Remove gcc_assert. (gimple_return_retval): Likewise. (gimple_return_set_retval): Likewise. * tree-flow.h (struct gimple_df): Remove nonlocal_all member. (safe_referenced_var_iterator): Remove. (FOR_EACH_REFERENCED_VAR_SAFE): Likewise. * tree-flow-inline.h (gimple_nonlocal_all): Remove. (fill_referenced_var_vec): Remove. (first_readonly_imm_use): Remove redundant gcc_assert. (phi_arg_index_from_use): Combine gcc_asserts. (move_use_after_head): Wrap gcc_assert in ENABLE_CHECKING. (first_imm_use_stmt): Remove redundant gcc_assert. * tree-cfg.c (verify_gimple_call): Verify function and chain operands. Verify arguments. (verify_types_in_gimple_stmt): Verify condition code and labels. From-SVN: r155696
-rw-r--r--gcc/ChangeLog46
-rw-r--r--gcc/gimple.h62
-rw-r--r--gcc/tree-cfg.c43
-rw-r--r--gcc/tree-flow-inline.h33
-rw-r--r--gcc/tree-flow.h24
5 files changed, 115 insertions, 93 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3eecd44..45f91b9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,51 @@
2010-01-07 Richard Guenther <rguenther@suse.de>
+ * gimple.h (gss_for_code): Wrap gcc_assert in ENABLE_CHECKING.
+ (gimple_op): Likewise.
+ (gimple_op_ptr): Likewise.
+ (gimple_assign_set_lhs): Remove gcc_assert.
+ (gimple_assign_set_rhs1): Likewise.
+ (gimple_assign_set_rhs2): Likewise.
+ (gimple_call_set_lhs): Likewise.
+ (gimple_call_set_fn): Likewise.
+ (gimple_call_set_fndecl): Likewise.
+ (gimple_call_fndecl): Likewise.
+ (gimple_call_return_type): Likewise.
+ (gimple_call_set_chain): Likewise.
+ (gimple_call_num_args): Likewise.
+ (gimple_call_set_arg): Likewise.
+ (gimple_cond_set_code): Likewise.
+ (gimple_cond_set_lhs): Likewise.
+ (gimple_cond_set_rhs): Likewise.
+ (gimple_cond_set_true_label): Likewise.
+ (gimple_cond_set_false_label): Likewise.
+ (gimple_label_set_label): Likewise.
+ (gimple_goto_set_dest): Likewise.
+ (gimple_debug_bind_get_var): Wrap gcc_assert in ENABLE_CHECKING.
+ (gimple_debug_bind_get_value): Likewise.
+ (gimple_debug_bind_get_value_ptr): Likewise.
+ (gimple_debug_bind_set_var): Likewise.
+ (gimple_debug_bind_set_value): Likewise.
+ (gimple_debug_bind_reset_value): Likewise.
+ (gimple_debug_bind_has_value_p): Likewise.
+ (gimple_return_retval_ptr): Remove gcc_assert.
+ (gimple_return_retval): Likewise.
+ (gimple_return_set_retval): Likewise.
+ * tree-flow.h (struct gimple_df): Remove nonlocal_all member.
+ (safe_referenced_var_iterator): Remove.
+ (FOR_EACH_REFERENCED_VAR_SAFE): Likewise.
+ * tree-flow-inline.h (gimple_nonlocal_all): Remove.
+ (fill_referenced_var_vec): Remove.
+ (first_readonly_imm_use): Remove redundant gcc_assert.
+ (phi_arg_index_from_use): Combine gcc_asserts.
+ (move_use_after_head): Wrap gcc_assert in ENABLE_CHECKING.
+ (first_imm_use_stmt): Remove redundant gcc_assert.
+ * tree-cfg.c (verify_gimple_call): Verify function and chain
+ operands. Verify arguments.
+ (verify_types_in_gimple_stmt): Verify condition code and labels.
+
+2010-01-07 Richard Guenther <rguenther@suse.de>
+
PR tree-optimization/42641
* sese.c (rename_map_elt_info): Use the SSA name version, do
not hash pointers.
diff --git a/gcc/gimple.h b/gcc/gimple.h
index 8bddb2a..6377938 100644
--- a/gcc/gimple.h
+++ b/gcc/gimple.h
@@ -1061,7 +1061,9 @@ gimple_code (const_gimple g)
static inline enum gimple_statement_structure_enum
gss_for_code (enum gimple_code code)
{
+#ifdef ENABLE_CHECKING
gcc_assert ((unsigned int)code < LAST_AND_UNUSED_GIMPLE_CODE);
+#endif
return gss_for_code_[code];
}
@@ -1628,7 +1630,9 @@ gimple_op (const_gimple gs, unsigned i)
{
if (gimple_has_ops (gs))
{
+#ifdef ENABLE_CHECKING
gcc_assert (i < gimple_num_ops (gs));
+#endif
return gimple_ops (CONST_CAST_GIMPLE (gs))[i];
}
else
@@ -1642,7 +1646,9 @@ gimple_op_ptr (const_gimple gs, unsigned i)
{
if (gimple_has_ops (gs))
{
+#ifdef ENABLE_CHECKING
gcc_assert (i < gimple_num_ops (gs));
+#endif
return gimple_ops (CONST_CAST_GIMPLE (gs)) + i;
}
else
@@ -1706,7 +1712,6 @@ static inline void
gimple_assign_set_lhs (gimple gs, tree lhs)
{
GIMPLE_CHECK (gs, GIMPLE_ASSIGN);
- gcc_assert (is_gimple_operand (lhs));
gimple_set_op (gs, 0, lhs);
if (lhs && TREE_CODE (lhs) == SSA_NAME)
@@ -1741,13 +1746,6 @@ gimple_assign_set_rhs1 (gimple gs, tree rhs)
{
GIMPLE_CHECK (gs, GIMPLE_ASSIGN);
- /* If there are 3 or more operands, the 2 operands on the RHS must be
- GIMPLE values. */
- if (gimple_num_ops (gs) >= 3)
- gcc_assert (is_gimple_val (rhs));
- else
- gcc_assert (is_gimple_operand (rhs));
-
gimple_set_op (gs, 1, rhs);
}
@@ -1785,9 +1783,6 @@ gimple_assign_set_rhs2 (gimple gs, tree rhs)
{
GIMPLE_CHECK (gs, GIMPLE_ASSIGN);
- /* The 2 operands on the RHS must be GIMPLE values. */
- gcc_assert (is_gimple_val (rhs));
-
gimple_set_op (gs, 2, rhs);
}
@@ -1901,7 +1896,6 @@ static inline void
gimple_call_set_lhs (gimple gs, tree lhs)
{
GIMPLE_CHECK (gs, GIMPLE_CALL);
- gcc_assert (!lhs || is_gimple_operand (lhs));
gimple_set_op (gs, 0, lhs);
if (lhs && TREE_CODE (lhs) == SSA_NAME)
SSA_NAME_DEF_STMT (lhs) = gs;
@@ -1936,7 +1930,6 @@ static inline void
gimple_call_set_fn (gimple gs, tree fn)
{
GIMPLE_CHECK (gs, GIMPLE_CALL);
- gcc_assert (is_gimple_operand (fn));
gimple_set_op (gs, 1, fn);
}
@@ -1947,7 +1940,6 @@ static inline void
gimple_call_set_fndecl (gimple gs, tree decl)
{
GIMPLE_CHECK (gs, GIMPLE_CALL);
- gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
gimple_set_op (gs, 1, build_fold_addr_expr_loc (gimple_location (gs), decl));
}
@@ -1961,10 +1953,7 @@ gimple_call_fndecl (const_gimple gs)
{
tree addr = gimple_call_fn (gs);
if (TREE_CODE (addr) == ADDR_EXPR)
- {
- gcc_assert (TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL);
- return TREE_OPERAND (addr, 0);
- }
+ return TREE_OPERAND (addr, 0);
return NULL_TREE;
}
@@ -1978,12 +1967,8 @@ gimple_call_return_type (const_gimple gs)
tree type = TREE_TYPE (fn);
/* See through the pointer. */
- gcc_assert (POINTER_TYPE_P (type));
type = TREE_TYPE (type);
- gcc_assert (TREE_CODE (type) == FUNCTION_TYPE
- || TREE_CODE (type) == METHOD_TYPE);
-
/* The type returned by a FUNCTION_DECL is the type of its
function type. */
return TREE_TYPE (type);
@@ -2015,9 +2000,7 @@ static inline void
gimple_call_set_chain (gimple gs, tree chain)
{
GIMPLE_CHECK (gs, GIMPLE_CALL);
- gcc_assert (chain == NULL
- || TREE_CODE (chain) == ADDR_EXPR
- || SSA_VAR_P (chain));
+
gimple_set_op (gs, 2, chain);
}
@@ -2030,7 +2013,6 @@ gimple_call_num_args (const_gimple gs)
unsigned num_ops;
GIMPLE_CHECK (gs, GIMPLE_CALL);
num_ops = gimple_num_ops (gs);
- gcc_assert (num_ops >= 3);
return num_ops - 3;
}
@@ -2062,7 +2044,6 @@ static inline void
gimple_call_set_arg (gimple gs, unsigned index, tree arg)
{
GIMPLE_CHECK (gs, GIMPLE_CALL);
- gcc_assert (is_gimple_operand (arg));
gimple_set_op (gs, index + 3, arg);
}
@@ -2248,7 +2229,6 @@ static inline void
gimple_cond_set_code (gimple gs, enum tree_code code)
{
GIMPLE_CHECK (gs, GIMPLE_COND);
- gcc_assert (TREE_CODE_CLASS (code) == tcc_comparison);
gs->gsbase.subcode = code;
}
@@ -2279,7 +2259,6 @@ static inline void
gimple_cond_set_lhs (gimple gs, tree lhs)
{
GIMPLE_CHECK (gs, GIMPLE_COND);
- gcc_assert (is_gimple_operand (lhs));
gimple_set_op (gs, 0, lhs);
}
@@ -2311,7 +2290,6 @@ static inline void
gimple_cond_set_rhs (gimple gs, tree rhs)
{
GIMPLE_CHECK (gs, GIMPLE_COND);
- gcc_assert (is_gimple_operand (rhs));
gimple_set_op (gs, 1, rhs);
}
@@ -2334,7 +2312,6 @@ static inline void
gimple_cond_set_true_label (gimple gs, tree label)
{
GIMPLE_CHECK (gs, GIMPLE_COND);
- gcc_assert (!label || TREE_CODE (label) == LABEL_DECL);
gimple_set_op (gs, 2, label);
}
@@ -2346,7 +2323,6 @@ static inline void
gimple_cond_set_false_label (gimple gs, tree label)
{
GIMPLE_CHECK (gs, GIMPLE_COND);
- gcc_assert (!label || TREE_CODE (label) == LABEL_DECL);
gimple_set_op (gs, 3, label);
}
@@ -2477,7 +2453,6 @@ static inline void
gimple_label_set_label (gimple gs, tree label)
{
GIMPLE_CHECK (gs, GIMPLE_LABEL);
- gcc_assert (TREE_CODE (label) == LABEL_DECL);
gimple_set_op (gs, 0, label);
}
@@ -2498,7 +2473,6 @@ static inline void
gimple_goto_set_dest (gimple gs, tree dest)
{
GIMPLE_CHECK (gs, GIMPLE_GOTO);
- gcc_assert (is_gimple_operand (dest));
gimple_set_op (gs, 0, dest);
}
@@ -3292,7 +3266,9 @@ static inline tree
gimple_debug_bind_get_var (gimple dbg)
{
GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
+#ifdef ENABLE_CHECKING
gcc_assert (gimple_debug_bind_p (dbg));
+#endif
return gimple_op (dbg, 0);
}
@@ -3303,7 +3279,9 @@ static inline tree
gimple_debug_bind_get_value (gimple dbg)
{
GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
+#ifdef ENABLE_CHECKING
gcc_assert (gimple_debug_bind_p (dbg));
+#endif
return gimple_op (dbg, 1);
}
@@ -3314,7 +3292,9 @@ static inline tree *
gimple_debug_bind_get_value_ptr (gimple dbg)
{
GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
+#ifdef ENABLE_CHECKING
gcc_assert (gimple_debug_bind_p (dbg));
+#endif
return gimple_op_ptr (dbg, 1);
}
@@ -3324,7 +3304,9 @@ static inline void
gimple_debug_bind_set_var (gimple dbg, tree var)
{
GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
+#ifdef ENABLE_CHECKING
gcc_assert (gimple_debug_bind_p (dbg));
+#endif
gimple_set_op (dbg, 0, var);
}
@@ -3335,7 +3317,9 @@ static inline void
gimple_debug_bind_set_value (gimple dbg, tree value)
{
GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
+#ifdef ENABLE_CHECKING
gcc_assert (gimple_debug_bind_p (dbg));
+#endif
gimple_set_op (dbg, 1, value);
}
@@ -3350,7 +3334,9 @@ static inline void
gimple_debug_bind_reset_value (gimple dbg)
{
GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
+#ifdef ENABLE_CHECKING
gcc_assert (gimple_debug_bind_p (dbg));
+#endif
gimple_set_op (dbg, 1, GIMPLE_DEBUG_BIND_NOVALUE);
}
@@ -3361,7 +3347,9 @@ static inline bool
gimple_debug_bind_has_value_p (gimple dbg)
{
GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
+#ifdef ENABLE_CHECKING
gcc_assert (gimple_debug_bind_p (dbg));
+#endif
return gimple_op (dbg, 1) != GIMPLE_DEBUG_BIND_NOVALUE;
}
@@ -4254,7 +4242,6 @@ static inline tree *
gimple_return_retval_ptr (const_gimple gs)
{
GIMPLE_CHECK (gs, GIMPLE_RETURN);
- gcc_assert (gimple_num_ops (gs) == 1);
return gimple_op_ptr (gs, 0);
}
@@ -4264,7 +4251,6 @@ static inline tree
gimple_return_retval (const_gimple gs)
{
GIMPLE_CHECK (gs, GIMPLE_RETURN);
- gcc_assert (gimple_num_ops (gs) == 1);
return gimple_op (gs, 0);
}
@@ -4275,10 +4261,6 @@ static inline void
gimple_return_set_retval (gimple gs, tree retval)
{
GIMPLE_CHECK (gs, GIMPLE_RETURN);
- gcc_assert (gimple_num_ops (gs) == 1);
- gcc_assert (retval == NULL_TREE
- || TREE_CODE (retval) == RESULT_DECL
- || is_gimple_val (retval));
gimple_set_op (gs, 0, retval);
}
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 2eb3cd2..36e518c 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -2937,6 +2937,15 @@ verify_gimple_call (gimple stmt)
{
tree fn = gimple_call_fn (stmt);
tree fntype;
+ unsigned i;
+
+ if (TREE_CODE (fn) != OBJ_TYPE_REF
+ && !is_gimple_val (fn))
+ {
+ error ("invalid function in gimple call");
+ debug_generic_stmt (fn);
+ return true;
+ }
if (!POINTER_TYPE_P (TREE_TYPE (fn))
|| (TREE_CODE (TREE_TYPE (TREE_TYPE (fn))) != FUNCTION_TYPE
@@ -2972,6 +2981,14 @@ verify_gimple_call (gimple stmt)
return true;
}
+ if (gimple_call_chain (stmt)
+ && !is_gimple_val (gimple_call_chain (stmt)))
+ {
+ error ("invalid static chain in gimple call");
+ debug_generic_stmt (gimple_call_chain (stmt));
+ return true;
+ }
+
/* If there is a static chain argument, this should not be an indirect
call, and the decl should have DECL_STATIC_CHAIN set. */
if (gimple_call_chain (stmt))
@@ -2993,9 +3010,19 @@ verify_gimple_call (gimple stmt)
/* ??? The C frontend passes unpromoted arguments in case it
didn't see a function declaration before the call. So for now
- leave the call arguments unverified. Once we gimplify
+ leave the call arguments mostly unverified. Once we gimplify
unit-at-a-time we have a chance to fix this. */
+ for (i = 0; i < gimple_call_num_args (stmt); ++i)
+ {
+ tree arg = gimple_call_arg (stmt, i);
+ if (!is_gimple_operand (arg))
+ {
+ error ("invalid argument to gimple call");
+ debug_generic_expr (arg);
+ }
+ }
+
return false;
}
@@ -3744,6 +3771,20 @@ verify_types_in_gimple_stmt (gimple stmt)
return verify_gimple_call (stmt);
case GIMPLE_COND:
+ if (TREE_CODE_CLASS (gimple_cond_code (stmt)) != tcc_comparison)
+ {
+ error ("invalid comparison code in gimple cond");
+ return true;
+ }
+ if (!(!gimple_cond_true_label (stmt)
+ || TREE_CODE (gimple_cond_true_label (stmt)) == LABEL_DECL)
+ || !(!gimple_cond_false_label (stmt)
+ || TREE_CODE (gimple_cond_false_label (stmt)) == LABEL_DECL))
+ {
+ error ("invalid labels in gimple cond");
+ return true;
+ }
+
return verify_gimple_comparison (boolean_type_node,
gimple_cond_lhs (stmt),
gimple_cond_rhs (stmt));
diff --git a/gcc/tree-flow-inline.h b/gcc/tree-flow-inline.h
index 3446790..bb9cc7d 100644
--- a/gcc/tree-flow-inline.h
+++ b/gcc/tree-flow-inline.h
@@ -44,15 +44,6 @@ gimple_referenced_vars (const struct function *fun)
return fun->gimple_df->referenced_vars;
}
-/* Artificial variable used to model the effects of nonlocal
- variables. */
-static inline tree
-gimple_nonlocal_all (const struct function *fun)
-{
- gcc_assert (fun && fun->gimple_df);
- return fun->gimple_df->nonlocal_all;
-}
-
/* Artificial variable used for the virtual operand FUD chain. */
static inline tree
gimple_vop (const struct function *fun)
@@ -135,18 +126,6 @@ next_referenced_var (referenced_var_iterator *iter)
return (tree) next_htab_element (&iter->hti);
}
-/* Fill up VEC with the variables in the referenced vars hashtable. */
-
-static inline void
-fill_referenced_var_vec (VEC (tree, heap) **vec)
-{
- referenced_var_iterator rvi;
- tree var;
- *vec = NULL;
- FOR_EACH_REFERENCED_VAR (var, rvi)
- VEC_safe_push (tree, heap, *vec, var);
-}
-
/* Return the variable annotation for T, which must be a _DECL node.
Return NULL if the variable annotation doesn't already exist. */
static inline var_ann_t
@@ -312,8 +291,6 @@ end_readonly_imm_use_p (const imm_use_iterator *imm)
static inline use_operand_p
first_readonly_imm_use (imm_use_iterator *imm, tree var)
{
- gcc_assert (TREE_CODE (var) == SSA_NAME);
-
imm->end_p = &(SSA_NAME_IMM_USE_NODE (var));
imm->imm_use = imm->end_p->next;
#ifdef ENABLE_CHECKING
@@ -573,9 +550,9 @@ phi_arg_index_from_use (use_operand_p use)
#ifdef ENABLE_CHECKING
/* Make sure the calculation doesn't have any leftover bytes. If it does,
then imm_use is likely not the first element in phi_arg_d. */
- gcc_assert (
- (((char *)element - (char *)root) % sizeof (struct phi_arg_d)) == 0);
- gcc_assert (index < gimple_phi_capacity (phi));
+ gcc_assert ((((char *)element - (char *)root)
+ % sizeof (struct phi_arg_d)) == 0
+ && index < gimple_phi_capacity (phi));
#endif
return index;
@@ -1013,7 +990,9 @@ static inline use_operand_p
move_use_after_head (use_operand_p use_p, use_operand_p head,
use_operand_p last_p)
{
+#ifdef ENABLE_CHECKING
gcc_assert (USE_FROM_PTR (use_p) == USE_FROM_PTR (head));
+#endif
/* Skip head when we find it. */
if (use_p != head)
{
@@ -1078,8 +1057,6 @@ link_use_stmts_after (use_operand_p head, imm_use_iterator *imm)
static inline gimple
first_imm_use_stmt (imm_use_iterator *imm, tree var)
{
- gcc_assert (TREE_CODE (var) == SSA_NAME);
-
imm->end_p = &(SSA_NAME_IMM_USE_NODE (var));
imm->imm_use = imm->end_p->next;
imm->next_imm_name = NULL_USE_OPERAND_P;
diff --git a/gcc/tree-flow.h b/gcc/tree-flow.h
index cde7792..e39658a 100644
--- a/gcc/tree-flow.h
+++ b/gcc/tree-flow.h
@@ -53,10 +53,6 @@ struct GTY(()) gimple_df {
/* Artificial variable used for the virtual operand FUD chain. */
tree vop;
- /* Artificial variable used to model the effects of nonlocal
- variables. */
- tree nonlocal_all;
-
/* The PTA solution for the ESCAPED artificial variable. */
struct pt_solution escaped;
@@ -339,7 +335,6 @@ typedef struct
htab_iterator hti;
} referenced_var_iterator;
-
/* This macro loops over all the referenced vars, one at a time, putting the
current var in VAR. Note: You are not allowed to add referenced variables
to the hashtable while using this macro. Doing so may cause it to behave
@@ -350,25 +345,6 @@ typedef struct
!end_referenced_vars_p (&(ITER)); \
(VAR) = next_referenced_var (&(ITER)))
-
-typedef struct
-{
- int i;
-} safe_referenced_var_iterator;
-
-/* This macro loops over all the referenced vars, one at a time, putting the
- current var in VAR. You are allowed to add referenced variables during the
- execution of this macro, however, the macro will not iterate over them. It
- requires a temporary vector of trees, VEC, whose lifetime is controlled by
- the caller. The purpose of the vector is to temporarily store the
- referenced_variables hashtable so that adding referenced variables does not
- affect the hashtable. */
-
-#define FOR_EACH_REFERENCED_VAR_SAFE(VAR, VEC, ITER) \
- for ((ITER).i = 0, fill_referenced_var_vec (&(VEC)); \
- VEC_iterate (tree, (VEC), (ITER).i, (VAR)); \
- (ITER).i++)
-
extern tree referenced_var_lookup (unsigned int);
extern bool referenced_var_check_and_insert (tree);
#define num_referenced_vars htab_elements (gimple_referenced_vars (cfun))