Commit f68a75df by Richard Guenther Committed by Richard Biener

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
parent 617531d9
2010-01-07 Richard Guenther <rguenther@suse.de> 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 PR tree-optimization/42641
* sese.c (rename_map_elt_info): Use the SSA name version, do * sese.c (rename_map_elt_info): Use the SSA name version, do
not hash pointers. not hash pointers.
......
...@@ -1061,7 +1061,9 @@ gimple_code (const_gimple g) ...@@ -1061,7 +1061,9 @@ gimple_code (const_gimple g)
static inline enum gimple_statement_structure_enum static inline enum gimple_statement_structure_enum
gss_for_code (enum gimple_code code) gss_for_code (enum gimple_code code)
{ {
#ifdef ENABLE_CHECKING
gcc_assert ((unsigned int)code < LAST_AND_UNUSED_GIMPLE_CODE); gcc_assert ((unsigned int)code < LAST_AND_UNUSED_GIMPLE_CODE);
#endif
return gss_for_code_[code]; return gss_for_code_[code];
} }
...@@ -1628,7 +1630,9 @@ gimple_op (const_gimple gs, unsigned i) ...@@ -1628,7 +1630,9 @@ gimple_op (const_gimple gs, unsigned i)
{ {
if (gimple_has_ops (gs)) if (gimple_has_ops (gs))
{ {
#ifdef ENABLE_CHECKING
gcc_assert (i < gimple_num_ops (gs)); gcc_assert (i < gimple_num_ops (gs));
#endif
return gimple_ops (CONST_CAST_GIMPLE (gs))[i]; return gimple_ops (CONST_CAST_GIMPLE (gs))[i];
} }
else else
...@@ -1642,7 +1646,9 @@ gimple_op_ptr (const_gimple gs, unsigned i) ...@@ -1642,7 +1646,9 @@ gimple_op_ptr (const_gimple gs, unsigned i)
{ {
if (gimple_has_ops (gs)) if (gimple_has_ops (gs))
{ {
#ifdef ENABLE_CHECKING
gcc_assert (i < gimple_num_ops (gs)); gcc_assert (i < gimple_num_ops (gs));
#endif
return gimple_ops (CONST_CAST_GIMPLE (gs)) + i; return gimple_ops (CONST_CAST_GIMPLE (gs)) + i;
} }
else else
...@@ -1706,7 +1712,6 @@ static inline void ...@@ -1706,7 +1712,6 @@ static inline void
gimple_assign_set_lhs (gimple gs, tree lhs) gimple_assign_set_lhs (gimple gs, tree lhs)
{ {
GIMPLE_CHECK (gs, GIMPLE_ASSIGN); GIMPLE_CHECK (gs, GIMPLE_ASSIGN);
gcc_assert (is_gimple_operand (lhs));
gimple_set_op (gs, 0, lhs); gimple_set_op (gs, 0, lhs);
if (lhs && TREE_CODE (lhs) == SSA_NAME) if (lhs && TREE_CODE (lhs) == SSA_NAME)
...@@ -1741,13 +1746,6 @@ gimple_assign_set_rhs1 (gimple gs, tree rhs) ...@@ -1741,13 +1746,6 @@ gimple_assign_set_rhs1 (gimple gs, tree rhs)
{ {
GIMPLE_CHECK (gs, GIMPLE_ASSIGN); 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); gimple_set_op (gs, 1, rhs);
} }
...@@ -1785,9 +1783,6 @@ gimple_assign_set_rhs2 (gimple gs, tree rhs) ...@@ -1785,9 +1783,6 @@ gimple_assign_set_rhs2 (gimple gs, tree rhs)
{ {
GIMPLE_CHECK (gs, GIMPLE_ASSIGN); 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); gimple_set_op (gs, 2, rhs);
} }
...@@ -1901,7 +1896,6 @@ static inline void ...@@ -1901,7 +1896,6 @@ static inline void
gimple_call_set_lhs (gimple gs, tree lhs) gimple_call_set_lhs (gimple gs, tree lhs)
{ {
GIMPLE_CHECK (gs, GIMPLE_CALL); GIMPLE_CHECK (gs, GIMPLE_CALL);
gcc_assert (!lhs || is_gimple_operand (lhs));
gimple_set_op (gs, 0, lhs); gimple_set_op (gs, 0, lhs);
if (lhs && TREE_CODE (lhs) == SSA_NAME) if (lhs && TREE_CODE (lhs) == SSA_NAME)
SSA_NAME_DEF_STMT (lhs) = gs; SSA_NAME_DEF_STMT (lhs) = gs;
...@@ -1936,7 +1930,6 @@ static inline void ...@@ -1936,7 +1930,6 @@ static inline void
gimple_call_set_fn (gimple gs, tree fn) gimple_call_set_fn (gimple gs, tree fn)
{ {
GIMPLE_CHECK (gs, GIMPLE_CALL); GIMPLE_CHECK (gs, GIMPLE_CALL);
gcc_assert (is_gimple_operand (fn));
gimple_set_op (gs, 1, fn); gimple_set_op (gs, 1, fn);
} }
...@@ -1947,7 +1940,6 @@ static inline void ...@@ -1947,7 +1940,6 @@ static inline void
gimple_call_set_fndecl (gimple gs, tree decl) gimple_call_set_fndecl (gimple gs, tree decl)
{ {
GIMPLE_CHECK (gs, GIMPLE_CALL); 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)); gimple_set_op (gs, 1, build_fold_addr_expr_loc (gimple_location (gs), decl));
} }
...@@ -1961,10 +1953,7 @@ gimple_call_fndecl (const_gimple gs) ...@@ -1961,10 +1953,7 @@ gimple_call_fndecl (const_gimple gs)
{ {
tree addr = gimple_call_fn (gs); tree addr = gimple_call_fn (gs);
if (TREE_CODE (addr) == ADDR_EXPR) if (TREE_CODE (addr) == ADDR_EXPR)
{ return TREE_OPERAND (addr, 0);
gcc_assert (TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL);
return TREE_OPERAND (addr, 0);
}
return NULL_TREE; return NULL_TREE;
} }
...@@ -1978,12 +1967,8 @@ gimple_call_return_type (const_gimple gs) ...@@ -1978,12 +1967,8 @@ gimple_call_return_type (const_gimple gs)
tree type = TREE_TYPE (fn); tree type = TREE_TYPE (fn);
/* See through the pointer. */ /* See through the pointer. */
gcc_assert (POINTER_TYPE_P (type));
type = TREE_TYPE (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 /* The type returned by a FUNCTION_DECL is the type of its
function type. */ function type. */
return TREE_TYPE (type); return TREE_TYPE (type);
...@@ -2015,9 +2000,7 @@ static inline void ...@@ -2015,9 +2000,7 @@ static inline void
gimple_call_set_chain (gimple gs, tree chain) gimple_call_set_chain (gimple gs, tree chain)
{ {
GIMPLE_CHECK (gs, GIMPLE_CALL); GIMPLE_CHECK (gs, GIMPLE_CALL);
gcc_assert (chain == NULL
|| TREE_CODE (chain) == ADDR_EXPR
|| SSA_VAR_P (chain));
gimple_set_op (gs, 2, chain); gimple_set_op (gs, 2, chain);
} }
...@@ -2030,7 +2013,6 @@ gimple_call_num_args (const_gimple gs) ...@@ -2030,7 +2013,6 @@ gimple_call_num_args (const_gimple gs)
unsigned num_ops; unsigned num_ops;
GIMPLE_CHECK (gs, GIMPLE_CALL); GIMPLE_CHECK (gs, GIMPLE_CALL);
num_ops = gimple_num_ops (gs); num_ops = gimple_num_ops (gs);
gcc_assert (num_ops >= 3);
return num_ops - 3; return num_ops - 3;
} }
...@@ -2062,7 +2044,6 @@ static inline void ...@@ -2062,7 +2044,6 @@ static inline void
gimple_call_set_arg (gimple gs, unsigned index, tree arg) gimple_call_set_arg (gimple gs, unsigned index, tree arg)
{ {
GIMPLE_CHECK (gs, GIMPLE_CALL); GIMPLE_CHECK (gs, GIMPLE_CALL);
gcc_assert (is_gimple_operand (arg));
gimple_set_op (gs, index + 3, arg); gimple_set_op (gs, index + 3, arg);
} }
...@@ -2248,7 +2229,6 @@ static inline void ...@@ -2248,7 +2229,6 @@ static inline void
gimple_cond_set_code (gimple gs, enum tree_code code) gimple_cond_set_code (gimple gs, enum tree_code code)
{ {
GIMPLE_CHECK (gs, GIMPLE_COND); GIMPLE_CHECK (gs, GIMPLE_COND);
gcc_assert (TREE_CODE_CLASS (code) == tcc_comparison);
gs->gsbase.subcode = code; gs->gsbase.subcode = code;
} }
...@@ -2279,7 +2259,6 @@ static inline void ...@@ -2279,7 +2259,6 @@ static inline void
gimple_cond_set_lhs (gimple gs, tree lhs) gimple_cond_set_lhs (gimple gs, tree lhs)
{ {
GIMPLE_CHECK (gs, GIMPLE_COND); GIMPLE_CHECK (gs, GIMPLE_COND);
gcc_assert (is_gimple_operand (lhs));
gimple_set_op (gs, 0, lhs); gimple_set_op (gs, 0, lhs);
} }
...@@ -2311,7 +2290,6 @@ static inline void ...@@ -2311,7 +2290,6 @@ static inline void
gimple_cond_set_rhs (gimple gs, tree rhs) gimple_cond_set_rhs (gimple gs, tree rhs)
{ {
GIMPLE_CHECK (gs, GIMPLE_COND); GIMPLE_CHECK (gs, GIMPLE_COND);
gcc_assert (is_gimple_operand (rhs));
gimple_set_op (gs, 1, rhs); gimple_set_op (gs, 1, rhs);
} }
...@@ -2334,7 +2312,6 @@ static inline void ...@@ -2334,7 +2312,6 @@ static inline void
gimple_cond_set_true_label (gimple gs, tree label) gimple_cond_set_true_label (gimple gs, tree label)
{ {
GIMPLE_CHECK (gs, GIMPLE_COND); GIMPLE_CHECK (gs, GIMPLE_COND);
gcc_assert (!label || TREE_CODE (label) == LABEL_DECL);
gimple_set_op (gs, 2, label); gimple_set_op (gs, 2, label);
} }
...@@ -2346,7 +2323,6 @@ static inline void ...@@ -2346,7 +2323,6 @@ static inline void
gimple_cond_set_false_label (gimple gs, tree label) gimple_cond_set_false_label (gimple gs, tree label)
{ {
GIMPLE_CHECK (gs, GIMPLE_COND); GIMPLE_CHECK (gs, GIMPLE_COND);
gcc_assert (!label || TREE_CODE (label) == LABEL_DECL);
gimple_set_op (gs, 3, label); gimple_set_op (gs, 3, label);
} }
...@@ -2477,7 +2453,6 @@ static inline void ...@@ -2477,7 +2453,6 @@ static inline void
gimple_label_set_label (gimple gs, tree label) gimple_label_set_label (gimple gs, tree label)
{ {
GIMPLE_CHECK (gs, GIMPLE_LABEL); GIMPLE_CHECK (gs, GIMPLE_LABEL);
gcc_assert (TREE_CODE (label) == LABEL_DECL);
gimple_set_op (gs, 0, label); gimple_set_op (gs, 0, label);
} }
...@@ -2498,7 +2473,6 @@ static inline void ...@@ -2498,7 +2473,6 @@ static inline void
gimple_goto_set_dest (gimple gs, tree dest) gimple_goto_set_dest (gimple gs, tree dest)
{ {
GIMPLE_CHECK (gs, GIMPLE_GOTO); GIMPLE_CHECK (gs, GIMPLE_GOTO);
gcc_assert (is_gimple_operand (dest));
gimple_set_op (gs, 0, dest); gimple_set_op (gs, 0, dest);
} }
...@@ -3292,7 +3266,9 @@ static inline tree ...@@ -3292,7 +3266,9 @@ static inline tree
gimple_debug_bind_get_var (gimple dbg) gimple_debug_bind_get_var (gimple dbg)
{ {
GIMPLE_CHECK (dbg, GIMPLE_DEBUG); GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
#ifdef ENABLE_CHECKING
gcc_assert (gimple_debug_bind_p (dbg)); gcc_assert (gimple_debug_bind_p (dbg));
#endif
return gimple_op (dbg, 0); return gimple_op (dbg, 0);
} }
...@@ -3303,7 +3279,9 @@ static inline tree ...@@ -3303,7 +3279,9 @@ static inline tree
gimple_debug_bind_get_value (gimple dbg) gimple_debug_bind_get_value (gimple dbg)
{ {
GIMPLE_CHECK (dbg, GIMPLE_DEBUG); GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
#ifdef ENABLE_CHECKING
gcc_assert (gimple_debug_bind_p (dbg)); gcc_assert (gimple_debug_bind_p (dbg));
#endif
return gimple_op (dbg, 1); return gimple_op (dbg, 1);
} }
...@@ -3314,7 +3292,9 @@ static inline tree * ...@@ -3314,7 +3292,9 @@ static inline tree *
gimple_debug_bind_get_value_ptr (gimple dbg) gimple_debug_bind_get_value_ptr (gimple dbg)
{ {
GIMPLE_CHECK (dbg, GIMPLE_DEBUG); GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
#ifdef ENABLE_CHECKING
gcc_assert (gimple_debug_bind_p (dbg)); gcc_assert (gimple_debug_bind_p (dbg));
#endif
return gimple_op_ptr (dbg, 1); return gimple_op_ptr (dbg, 1);
} }
...@@ -3324,7 +3304,9 @@ static inline void ...@@ -3324,7 +3304,9 @@ static inline void
gimple_debug_bind_set_var (gimple dbg, tree var) gimple_debug_bind_set_var (gimple dbg, tree var)
{ {
GIMPLE_CHECK (dbg, GIMPLE_DEBUG); GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
#ifdef ENABLE_CHECKING
gcc_assert (gimple_debug_bind_p (dbg)); gcc_assert (gimple_debug_bind_p (dbg));
#endif
gimple_set_op (dbg, 0, var); gimple_set_op (dbg, 0, var);
} }
...@@ -3335,7 +3317,9 @@ static inline void ...@@ -3335,7 +3317,9 @@ static inline void
gimple_debug_bind_set_value (gimple dbg, tree value) gimple_debug_bind_set_value (gimple dbg, tree value)
{ {
GIMPLE_CHECK (dbg, GIMPLE_DEBUG); GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
#ifdef ENABLE_CHECKING
gcc_assert (gimple_debug_bind_p (dbg)); gcc_assert (gimple_debug_bind_p (dbg));
#endif
gimple_set_op (dbg, 1, value); gimple_set_op (dbg, 1, value);
} }
...@@ -3350,7 +3334,9 @@ static inline void ...@@ -3350,7 +3334,9 @@ static inline void
gimple_debug_bind_reset_value (gimple dbg) gimple_debug_bind_reset_value (gimple dbg)
{ {
GIMPLE_CHECK (dbg, GIMPLE_DEBUG); GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
#ifdef ENABLE_CHECKING
gcc_assert (gimple_debug_bind_p (dbg)); gcc_assert (gimple_debug_bind_p (dbg));
#endif
gimple_set_op (dbg, 1, GIMPLE_DEBUG_BIND_NOVALUE); gimple_set_op (dbg, 1, GIMPLE_DEBUG_BIND_NOVALUE);
} }
...@@ -3361,7 +3347,9 @@ static inline bool ...@@ -3361,7 +3347,9 @@ static inline bool
gimple_debug_bind_has_value_p (gimple dbg) gimple_debug_bind_has_value_p (gimple dbg)
{ {
GIMPLE_CHECK (dbg, GIMPLE_DEBUG); GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
#ifdef ENABLE_CHECKING
gcc_assert (gimple_debug_bind_p (dbg)); gcc_assert (gimple_debug_bind_p (dbg));
#endif
return gimple_op (dbg, 1) != GIMPLE_DEBUG_BIND_NOVALUE; return gimple_op (dbg, 1) != GIMPLE_DEBUG_BIND_NOVALUE;
} }
...@@ -4254,7 +4242,6 @@ static inline tree * ...@@ -4254,7 +4242,6 @@ static inline tree *
gimple_return_retval_ptr (const_gimple gs) gimple_return_retval_ptr (const_gimple gs)
{ {
GIMPLE_CHECK (gs, GIMPLE_RETURN); GIMPLE_CHECK (gs, GIMPLE_RETURN);
gcc_assert (gimple_num_ops (gs) == 1);
return gimple_op_ptr (gs, 0); return gimple_op_ptr (gs, 0);
} }
...@@ -4264,7 +4251,6 @@ static inline tree ...@@ -4264,7 +4251,6 @@ static inline tree
gimple_return_retval (const_gimple gs) gimple_return_retval (const_gimple gs)
{ {
GIMPLE_CHECK (gs, GIMPLE_RETURN); GIMPLE_CHECK (gs, GIMPLE_RETURN);
gcc_assert (gimple_num_ops (gs) == 1);
return gimple_op (gs, 0); return gimple_op (gs, 0);
} }
...@@ -4275,10 +4261,6 @@ static inline void ...@@ -4275,10 +4261,6 @@ static inline void
gimple_return_set_retval (gimple gs, tree retval) gimple_return_set_retval (gimple gs, tree retval)
{ {
GIMPLE_CHECK (gs, GIMPLE_RETURN); 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); gimple_set_op (gs, 0, retval);
} }
......
...@@ -2937,6 +2937,15 @@ verify_gimple_call (gimple stmt) ...@@ -2937,6 +2937,15 @@ verify_gimple_call (gimple stmt)
{ {
tree fn = gimple_call_fn (stmt); tree fn = gimple_call_fn (stmt);
tree fntype; 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)) if (!POINTER_TYPE_P (TREE_TYPE (fn))
|| (TREE_CODE (TREE_TYPE (TREE_TYPE (fn))) != FUNCTION_TYPE || (TREE_CODE (TREE_TYPE (TREE_TYPE (fn))) != FUNCTION_TYPE
...@@ -2972,6 +2981,14 @@ verify_gimple_call (gimple stmt) ...@@ -2972,6 +2981,14 @@ verify_gimple_call (gimple stmt)
return true; 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 /* If there is a static chain argument, this should not be an indirect
call, and the decl should have DECL_STATIC_CHAIN set. */ call, and the decl should have DECL_STATIC_CHAIN set. */
if (gimple_call_chain (stmt)) if (gimple_call_chain (stmt))
...@@ -2993,9 +3010,19 @@ verify_gimple_call (gimple stmt) ...@@ -2993,9 +3010,19 @@ verify_gimple_call (gimple stmt)
/* ??? The C frontend passes unpromoted arguments in case it /* ??? The C frontend passes unpromoted arguments in case it
didn't see a function declaration before the call. So for now 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. */ 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; return false;
} }
...@@ -3744,6 +3771,20 @@ verify_types_in_gimple_stmt (gimple stmt) ...@@ -3744,6 +3771,20 @@ verify_types_in_gimple_stmt (gimple stmt)
return verify_gimple_call (stmt); return verify_gimple_call (stmt);
case GIMPLE_COND: 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, return verify_gimple_comparison (boolean_type_node,
gimple_cond_lhs (stmt), gimple_cond_lhs (stmt),
gimple_cond_rhs (stmt)); gimple_cond_rhs (stmt));
......
...@@ -44,15 +44,6 @@ gimple_referenced_vars (const struct function *fun) ...@@ -44,15 +44,6 @@ gimple_referenced_vars (const struct function *fun)
return fun->gimple_df->referenced_vars; 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. */ /* Artificial variable used for the virtual operand FUD chain. */
static inline tree static inline tree
gimple_vop (const struct function *fun) gimple_vop (const struct function *fun)
...@@ -135,18 +126,6 @@ next_referenced_var (referenced_var_iterator *iter) ...@@ -135,18 +126,6 @@ next_referenced_var (referenced_var_iterator *iter)
return (tree) next_htab_element (&iter->hti); 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 the variable annotation for T, which must be a _DECL node.
Return NULL if the variable annotation doesn't already exist. */ Return NULL if the variable annotation doesn't already exist. */
static inline var_ann_t static inline var_ann_t
...@@ -312,8 +291,6 @@ end_readonly_imm_use_p (const imm_use_iterator *imm) ...@@ -312,8 +291,6 @@ end_readonly_imm_use_p (const imm_use_iterator *imm)
static inline use_operand_p static inline use_operand_p
first_readonly_imm_use (imm_use_iterator *imm, tree var) 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->end_p = &(SSA_NAME_IMM_USE_NODE (var));
imm->imm_use = imm->end_p->next; imm->imm_use = imm->end_p->next;
#ifdef ENABLE_CHECKING #ifdef ENABLE_CHECKING
...@@ -573,9 +550,9 @@ phi_arg_index_from_use (use_operand_p use) ...@@ -573,9 +550,9 @@ phi_arg_index_from_use (use_operand_p use)
#ifdef ENABLE_CHECKING #ifdef ENABLE_CHECKING
/* Make sure the calculation doesn't have any leftover bytes. If it does, /* 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. */ then imm_use is likely not the first element in phi_arg_d. */
gcc_assert ( gcc_assert ((((char *)element - (char *)root)
(((char *)element - (char *)root) % sizeof (struct phi_arg_d)) == 0); % sizeof (struct phi_arg_d)) == 0
gcc_assert (index < gimple_phi_capacity (phi)); && index < gimple_phi_capacity (phi));
#endif #endif
return index; return index;
...@@ -1013,7 +990,9 @@ static inline use_operand_p ...@@ -1013,7 +990,9 @@ static inline use_operand_p
move_use_after_head (use_operand_p use_p, use_operand_p head, move_use_after_head (use_operand_p use_p, use_operand_p head,
use_operand_p last_p) use_operand_p last_p)
{ {
#ifdef ENABLE_CHECKING
gcc_assert (USE_FROM_PTR (use_p) == USE_FROM_PTR (head)); gcc_assert (USE_FROM_PTR (use_p) == USE_FROM_PTR (head));
#endif
/* Skip head when we find it. */ /* Skip head when we find it. */
if (use_p != head) if (use_p != head)
{ {
...@@ -1078,8 +1057,6 @@ link_use_stmts_after (use_operand_p head, imm_use_iterator *imm) ...@@ -1078,8 +1057,6 @@ link_use_stmts_after (use_operand_p head, imm_use_iterator *imm)
static inline gimple static inline gimple
first_imm_use_stmt (imm_use_iterator *imm, tree var) 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->end_p = &(SSA_NAME_IMM_USE_NODE (var));
imm->imm_use = imm->end_p->next; imm->imm_use = imm->end_p->next;
imm->next_imm_name = NULL_USE_OPERAND_P; imm->next_imm_name = NULL_USE_OPERAND_P;
......
...@@ -53,10 +53,6 @@ struct GTY(()) gimple_df { ...@@ -53,10 +53,6 @@ struct GTY(()) gimple_df {
/* Artificial variable used for the virtual operand FUD chain. */ /* Artificial variable used for the virtual operand FUD chain. */
tree vop; tree vop;
/* Artificial variable used to model the effects of nonlocal
variables. */
tree nonlocal_all;
/* The PTA solution for the ESCAPED artificial variable. */ /* The PTA solution for the ESCAPED artificial variable. */
struct pt_solution escaped; struct pt_solution escaped;
...@@ -339,7 +335,6 @@ typedef struct ...@@ -339,7 +335,6 @@ typedef struct
htab_iterator hti; htab_iterator hti;
} referenced_var_iterator; } referenced_var_iterator;
/* This macro loops over all the referenced vars, one at a time, putting the /* 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 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 to the hashtable while using this macro. Doing so may cause it to behave
...@@ -350,25 +345,6 @@ typedef struct ...@@ -350,25 +345,6 @@ typedef struct
!end_referenced_vars_p (&(ITER)); \ !end_referenced_vars_p (&(ITER)); \
(VAR) = next_referenced_var (&(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 tree referenced_var_lookup (unsigned int);
extern bool referenced_var_check_and_insert (tree); extern bool referenced_var_check_and_insert (tree);
#define num_referenced_vars htab_elements (gimple_referenced_vars (cfun)) #define num_referenced_vars htab_elements (gimple_referenced_vars (cfun))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment