[Bug middle-end/60469] simple cilk plus program ICEs
izamyatin at gmail dot com
gcc-bugzilla@gcc.gnu.org
Wed Apr 9 17:54:00 GMT 2014
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60469
--- Comment #4 from Igor Zamyatin <izamyatin at gmail dot com> ---
Following works for me and shows no new errors in regtesting. Not sure it is a
good idea though...
diff --git a/gcc/c/c-array-notation.c b/gcc/c/c-array-notation.c
index 6a5631c..d7c6772 100644
--- a/gcc/c/c-array-notation.c
+++ b/gcc/c/c-array-notation.c
@@ -284,6 +284,7 @@ fix_builtin_array_notation_fn (tree an_builtin_fn, tree
*new_var)
{
an_loop_info[ii].var = build_decl (location, VAR_DECL, NULL_TREE,
integer_type_node);
+ DECL_CONTEXT (an_loop_info[ii].var) = current_function_decl;
an_loop_info[ii].ind_init =
build_modify_expr (location, an_loop_info[ii].var,
TREE_TYPE (an_loop_info[ii].var), NOP_EXPR,
@@ -783,6 +784,7 @@ build_array_notation_expr (location_t location, tree lhs,
tree lhs_origtype,
{
lhs_an_loop_info[ii].var = build_decl (location, VAR_DECL, NULL_TREE,
integer_type_node);
+ DECL_CONTEXT (lhs_an_loop_info[ii].var) = current_function_decl;
lhs_an_loop_info[ii].ind_init = build_modify_expr
(location, lhs_an_loop_info[ii].var,
TREE_TYPE (lhs_an_loop_info[ii].var), NOP_EXPR,
@@ -795,6 +797,7 @@ build_array_notation_expr (location_t location, tree lhs,
tree lhs_origtype,
integer. */
rhs_an_loop_info[ii].var = build_decl (location, VAR_DECL, NULL_TREE,
integer_type_node);
+ DECL_CONTEXT (rhs_an_loop_info[ii].var) = current_function_decl;
rhs_an_loop_info[ii].ind_init = build_modify_expr
(location, rhs_an_loop_info[ii].var,
TREE_TYPE (rhs_an_loop_info[ii].var), NOP_EXPR,
@@ -972,6 +975,7 @@ fix_conditional_array_notations_1 (tree stmt)
{
an_loop_info[ii].var = build_decl (location, VAR_DECL, NULL_TREE,
integer_type_node);
+ DECL_CONTEXT (an_loop_info[ii].var) = current_function_decl;
an_loop_info[ii].ind_init =
build_modify_expr (location, an_loop_info[ii].var,
TREE_TYPE (an_loop_info[ii].var), NOP_EXPR,
@@ -1069,6 +1073,7 @@ fix_array_notation_expr (location_t location, enum
tree_code code,
{
an_loop_info[ii].var = build_decl (location, VAR_DECL, NULL_TREE,
integer_type_node);
+ DECL_CONTEXT (an_loop_info[ii].var) = current_function_decl;
an_loop_info[ii].ind_init =
build_modify_expr (location, an_loop_info[ii].var,
TREE_TYPE (an_loop_info[ii].var), NOP_EXPR,
@@ -1165,6 +1170,7 @@ fix_array_notation_call_expr (tree arg)
{
an_loop_info[ii].var = build_decl (location, VAR_DECL, NULL_TREE,
integer_type_node);
+ DECL_CONTEXT (an_loop_info[ii].var) = current_function_decl;
an_loop_info[ii].ind_init =
build_modify_expr (location, an_loop_info[ii].var,
TREE_TYPE (an_loop_info[ii].var), NOP_EXPR, location,
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 7441784..b61a995 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -1732,6 +1732,7 @@ gimplify_var_or_parm_decl (tree *expr_p)
be really nice if the front end wouldn't leak these at all.
Currently the only known culprit is C++ destructors, as seen
in g++.old-deja/g++.jason/binding.C. */
+#if 0
if (TREE_CODE (decl) == VAR_DECL
&& !DECL_SEEN_IN_BIND_EXPR_P (decl)
&& !TREE_STATIC (decl) && !DECL_EXTERNAL (decl)
@@ -1740,6 +1741,7 @@ gimplify_var_or_parm_decl (tree *expr_p)
gcc_assert (seen_error ());
return GS_ERROR;
}
+#endif
/* When within an OpenMP context, notice uses of variables. */
if (gimplify_omp_ctxp && omp_notice_variable (gimplify_omp_ctxp, decl,
true))
More information about the Gcc-bugs
mailing list