mirror of git://gcc.gnu.org/git/gcc.git
Fix memory leak in cilk
PR c++/68312 * c-array-notation.c (fix_builtin_array_notation_fn): Use release_vec_vec instead of vec::release. (build_array_notation_expr): Likewise. (fix_conditional_array_notations_1): Likewise. (fix_array_notation_expr): Likewise. (fix_array_notation_call_expr): Likewise. PR c++/68312 * cp-array-notation.c (expand_sec_reduce_builtin): Likewise. (create_array_refs): Replace argument with const reference. (expand_an_in_modify_expr): Likewise. (cp_expand_cond_array_notations): Likewise. (expand_unary_array_notation_exprs): Likewise. PR c++/68312 * array-notation-common.c (cilkplus_extract_an_triplets): Release vector of vectors. * cilk.c (gimplify_cilk_spawn): Free allocated memory. PR c++/68312 * vec.h (release_vec_vec): New function. From-SVN: r231001
This commit is contained in:
parent
4d95edca12
commit
b58d3df29f
|
|
@ -1,3 +1,8 @@
|
||||||
|
2015-11-27 Martin Liska <mliska@suse.cz>
|
||||||
|
|
||||||
|
PR c++/68312
|
||||||
|
* vec.h (release_vec_vec): New function.
|
||||||
|
|
||||||
2015-11-27 Jakub Jelinek <jakub@redhat.com>
|
2015-11-27 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
PR tree-optimization/68552
|
PR tree-optimization/68552
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,10 @@
|
||||||
|
2015-11-27 Martin Liska <mliska@suse.cz>
|
||||||
|
|
||||||
|
PR c++/68312
|
||||||
|
* array-notation-common.c (cilkplus_extract_an_triplets):
|
||||||
|
Release vector of vectors.
|
||||||
|
* cilk.c (gimplify_cilk_spawn): Free allocated memory.
|
||||||
|
|
||||||
2015-11-26 Eric Botcazou <ebotcazou@adacore.com>
|
2015-11-26 Eric Botcazou <ebotcazou@adacore.com>
|
||||||
|
|
||||||
PR c++/68527
|
PR c++/68527
|
||||||
|
|
|
||||||
|
|
@ -636,6 +636,8 @@ cilkplus_extract_an_triplets (vec<tree, va_gc> *list, size_t size, size_t rank,
|
||||||
fold_build1 (CONVERT_EXPR, integer_type_node,
|
fold_build1 (CONVERT_EXPR, integer_type_node,
|
||||||
ARRAY_NOTATION_STRIDE (ii_tree));
|
ARRAY_NOTATION_STRIDE (ii_tree));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
release_vec_vec (array_exprs);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Replaces all the __sec_implicit_arg functions in LIST with the induction
|
/* Replaces all the __sec_implicit_arg functions in LIST with the induction
|
||||||
|
|
|
||||||
|
|
@ -857,6 +857,7 @@ gimplify_cilk_spawn (tree *spawn_p)
|
||||||
call2, build_empty_stmt (EXPR_LOCATION (call1)));
|
call2, build_empty_stmt (EXPR_LOCATION (call1)));
|
||||||
append_to_statement_list (spawn_expr, spawn_p);
|
append_to_statement_list (spawn_expr, spawn_p);
|
||||||
|
|
||||||
|
free (arg_array);
|
||||||
return GS_OK;
|
return GS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,13 @@
|
||||||
|
2015-11-27 Martin Liska <mliska@suse.cz>
|
||||||
|
|
||||||
|
PR c++/68312
|
||||||
|
* c-array-notation.c (fix_builtin_array_notation_fn):
|
||||||
|
Use release_vec_vec instead of vec::release.
|
||||||
|
(build_array_notation_expr): Likewise.
|
||||||
|
(fix_conditional_array_notations_1): Likewise.
|
||||||
|
(fix_array_notation_expr): Likewise.
|
||||||
|
(fix_array_notation_call_expr): Likewise.
|
||||||
|
|
||||||
2015-11-27 Jakub Jelinek <jakub@redhat.com>
|
2015-11-27 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
PR c/63326
|
PR c/63326
|
||||||
|
|
|
||||||
|
|
@ -205,7 +205,7 @@ fix_builtin_array_notation_fn (tree an_builtin_fn, tree *new_var)
|
||||||
location_t location = UNKNOWN_LOCATION;
|
location_t location = UNKNOWN_LOCATION;
|
||||||
tree loop_with_init = alloc_stmt_list ();
|
tree loop_with_init = alloc_stmt_list ();
|
||||||
vec<vec<an_parts> > an_info = vNULL;
|
vec<vec<an_parts> > an_info = vNULL;
|
||||||
vec<an_loop_parts> an_loop_info = vNULL;
|
auto_vec<an_loop_parts> an_loop_info;
|
||||||
enum built_in_function an_type =
|
enum built_in_function an_type =
|
||||||
is_cilkplus_reduce_builtin (CALL_EXPR_FN (an_builtin_fn));
|
is_cilkplus_reduce_builtin (CALL_EXPR_FN (an_builtin_fn));
|
||||||
if (an_type == BUILT_IN_NONE)
|
if (an_type == BUILT_IN_NONE)
|
||||||
|
|
@ -593,8 +593,7 @@ fix_builtin_array_notation_fn (tree an_builtin_fn, tree *new_var)
|
||||||
}
|
}
|
||||||
append_to_statement_list_force (body, &loop_with_init);
|
append_to_statement_list_force (body, &loop_with_init);
|
||||||
|
|
||||||
an_info.release ();
|
release_vec_vec (an_info);
|
||||||
an_loop_info.release ();
|
|
||||||
|
|
||||||
return loop_with_init;
|
return loop_with_init;
|
||||||
}
|
}
|
||||||
|
|
@ -614,7 +613,7 @@ build_array_notation_expr (location_t location, tree lhs, tree lhs_origtype,
|
||||||
tree array_expr_lhs = NULL_TREE, array_expr_rhs = NULL_TREE;
|
tree array_expr_lhs = NULL_TREE, array_expr_rhs = NULL_TREE;
|
||||||
tree array_expr = NULL_TREE;
|
tree array_expr = NULL_TREE;
|
||||||
tree an_init = NULL_TREE;
|
tree an_init = NULL_TREE;
|
||||||
vec<tree> cond_expr = vNULL;
|
auto_vec<tree> cond_expr;
|
||||||
tree body, loop_with_init = alloc_stmt_list();
|
tree body, loop_with_init = alloc_stmt_list();
|
||||||
tree scalar_mods = NULL_TREE;
|
tree scalar_mods = NULL_TREE;
|
||||||
vec<tree, va_gc> *rhs_array_operand = NULL, *lhs_array_operand = NULL;
|
vec<tree, va_gc> *rhs_array_operand = NULL, *lhs_array_operand = NULL;
|
||||||
|
|
@ -624,7 +623,7 @@ build_array_notation_expr (location_t location, tree lhs, tree lhs_origtype,
|
||||||
tree new_modify_expr, new_var = NULL_TREE, builtin_loop = NULL_TREE;
|
tree new_modify_expr, new_var = NULL_TREE, builtin_loop = NULL_TREE;
|
||||||
size_t rhs_list_size = 0, lhs_list_size = 0;
|
size_t rhs_list_size = 0, lhs_list_size = 0;
|
||||||
vec<vec<an_parts> > lhs_an_info = vNULL, rhs_an_info = vNULL;
|
vec<vec<an_parts> > lhs_an_info = vNULL, rhs_an_info = vNULL;
|
||||||
vec<an_loop_parts> lhs_an_loop_info = vNULL, rhs_an_loop_info = vNULL;
|
auto_vec<an_loop_parts> lhs_an_loop_info, rhs_an_loop_info;
|
||||||
|
|
||||||
/* If either of this is true, an error message must have been send out
|
/* If either of this is true, an error message must have been send out
|
||||||
already. Not necessary to send out multiple error messages. */
|
already. Not necessary to send out multiple error messages. */
|
||||||
|
|
@ -771,7 +770,7 @@ build_array_notation_expr (location_t location, tree lhs, tree lhs_origtype,
|
||||||
&& length_mismatch_in_expr_p (EXPR_LOCATION (rhs), rhs_an_info)))
|
&& length_mismatch_in_expr_p (EXPR_LOCATION (rhs), rhs_an_info)))
|
||||||
{
|
{
|
||||||
pop_stmt_list (an_init);
|
pop_stmt_list (an_init);
|
||||||
return error_mark_node;
|
goto error;
|
||||||
}
|
}
|
||||||
if (lhs_list_size > 0 && rhs_list_size > 0 && lhs_rank > 0 && rhs_rank > 0
|
if (lhs_list_size > 0 && rhs_list_size > 0 && lhs_rank > 0 && rhs_rank > 0
|
||||||
&& TREE_CODE (lhs_an_info[0][0].length) == INTEGER_CST
|
&& TREE_CODE (lhs_an_info[0][0].length) == INTEGER_CST
|
||||||
|
|
@ -786,7 +785,7 @@ build_array_notation_expr (location_t location, tree lhs, tree lhs_origtype,
|
||||||
{
|
{
|
||||||
error_at (location, "length mismatch between LHS and RHS");
|
error_at (location, "length mismatch between LHS and RHS");
|
||||||
pop_stmt_list (an_init);
|
pop_stmt_list (an_init);
|
||||||
return error_mark_node;
|
goto error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (ii = 0; ii < lhs_rank; ii++)
|
for (ii = 0; ii < lhs_rank; ii++)
|
||||||
|
|
@ -829,7 +828,7 @@ build_array_notation_expr (location_t location, tree lhs, tree lhs_origtype,
|
||||||
rhs_an_loop_info, rhs_rank,
|
rhs_an_loop_info, rhs_rank,
|
||||||
rhs);
|
rhs);
|
||||||
if (!rhs_array_operand)
|
if (!rhs_array_operand)
|
||||||
return error_mark_node;
|
goto error;
|
||||||
replace_array_notations (&rhs, true, rhs_list, rhs_array_operand);
|
replace_array_notations (&rhs, true, rhs_list, rhs_array_operand);
|
||||||
}
|
}
|
||||||
else if (rhs_list_size > 0)
|
else if (rhs_list_size > 0)
|
||||||
|
|
@ -838,7 +837,7 @@ build_array_notation_expr (location_t location, tree lhs, tree lhs_origtype,
|
||||||
lhs_an_loop_info, lhs_rank,
|
lhs_an_loop_info, lhs_rank,
|
||||||
lhs);
|
lhs);
|
||||||
if (!rhs_array_operand)
|
if (!rhs_array_operand)
|
||||||
return error_mark_node;
|
goto error;
|
||||||
replace_array_notations (&rhs, true, rhs_list, rhs_array_operand);
|
replace_array_notations (&rhs, true, rhs_list, rhs_array_operand);
|
||||||
}
|
}
|
||||||
array_expr_lhs = lhs;
|
array_expr_lhs = lhs;
|
||||||
|
|
@ -881,15 +880,15 @@ build_array_notation_expr (location_t location, tree lhs, tree lhs_origtype,
|
||||||
}
|
}
|
||||||
append_to_statement_list_force (body, &loop_with_init);
|
append_to_statement_list_force (body, &loop_with_init);
|
||||||
|
|
||||||
lhs_an_info.release ();
|
release_vec_vec (lhs_an_info);
|
||||||
lhs_an_loop_info.release ();
|
release_vec_vec (rhs_an_info);
|
||||||
if (rhs_rank)
|
|
||||||
{
|
|
||||||
rhs_an_info.release ();
|
|
||||||
rhs_an_loop_info.release ();
|
|
||||||
}
|
|
||||||
cond_expr.release ();
|
|
||||||
return loop_with_init;
|
return loop_with_init;
|
||||||
|
|
||||||
|
error:
|
||||||
|
release_vec_vec (lhs_an_info);
|
||||||
|
release_vec_vec (rhs_an_info);
|
||||||
|
|
||||||
|
return error_mark_node;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Helper function for fix_conditional_array_notations. Encloses the
|
/* Helper function for fix_conditional_array_notations. Encloses the
|
||||||
|
|
@ -909,7 +908,7 @@ fix_conditional_array_notations_1 (tree stmt)
|
||||||
location_t location = EXPR_LOCATION (stmt);
|
location_t location = EXPR_LOCATION (stmt);
|
||||||
tree body = NULL_TREE, loop_with_init = alloc_stmt_list ();
|
tree body = NULL_TREE, loop_with_init = alloc_stmt_list ();
|
||||||
vec<vec<an_parts> > an_info = vNULL;
|
vec<vec<an_parts> > an_info = vNULL;
|
||||||
vec<an_loop_parts> an_loop_info = vNULL;
|
auto_vec<an_loop_parts> an_loop_info;
|
||||||
|
|
||||||
if (TREE_CODE (stmt) == COND_EXPR)
|
if (TREE_CODE (stmt) == COND_EXPR)
|
||||||
cond = COND_EXPR_COND (stmt);
|
cond = COND_EXPR_COND (stmt);
|
||||||
|
|
@ -1005,9 +1004,7 @@ fix_conditional_array_notations_1 (tree stmt)
|
||||||
body = pop_stmt_list (new_loop);
|
body = pop_stmt_list (new_loop);
|
||||||
}
|
}
|
||||||
append_to_statement_list_force (body, &loop_with_init);
|
append_to_statement_list_force (body, &loop_with_init);
|
||||||
|
release_vec_vec (an_info);
|
||||||
an_loop_info.release ();
|
|
||||||
an_info.release ();
|
|
||||||
|
|
||||||
return loop_with_init;
|
return loop_with_init;
|
||||||
}
|
}
|
||||||
|
|
@ -1048,7 +1045,7 @@ fix_array_notation_expr (location_t location, enum tree_code code,
|
||||||
tree loop_init;
|
tree loop_init;
|
||||||
tree body, loop_with_init = alloc_stmt_list ();
|
tree body, loop_with_init = alloc_stmt_list ();
|
||||||
vec<vec<an_parts> > an_info = vNULL;
|
vec<vec<an_parts> > an_info = vNULL;
|
||||||
vec<an_loop_parts> an_loop_info = vNULL;
|
auto_vec<an_loop_parts> an_loop_info;
|
||||||
|
|
||||||
if (!find_rank (location, arg.value, arg.value, false, &rank))
|
if (!find_rank (location, arg.value, arg.value, false, &rank))
|
||||||
{
|
{
|
||||||
|
|
@ -1110,8 +1107,7 @@ fix_array_notation_expr (location_t location, enum tree_code code,
|
||||||
}
|
}
|
||||||
append_to_statement_list_force (body, &loop_with_init);
|
append_to_statement_list_force (body, &loop_with_init);
|
||||||
arg.value = loop_with_init;
|
arg.value = loop_with_init;
|
||||||
an_info.release ();
|
release_vec_vec (an_info);
|
||||||
an_loop_info.release ();
|
|
||||||
return arg;
|
return arg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1128,7 +1124,7 @@ fix_array_notation_call_expr (tree arg)
|
||||||
tree body, loop_with_init = alloc_stmt_list ();
|
tree body, loop_with_init = alloc_stmt_list ();
|
||||||
location_t location = UNKNOWN_LOCATION;
|
location_t location = UNKNOWN_LOCATION;
|
||||||
vec<vec<an_parts> > an_info = vNULL;
|
vec<vec<an_parts> > an_info = vNULL;
|
||||||
vec<an_loop_parts> an_loop_info = vNULL;
|
auto_vec<an_loop_parts> an_loop_info;
|
||||||
|
|
||||||
if (TREE_CODE (arg) == CALL_EXPR
|
if (TREE_CODE (arg) == CALL_EXPR
|
||||||
&& is_cilkplus_reduce_builtin (CALL_EXPR_FN (arg)))
|
&& is_cilkplus_reduce_builtin (CALL_EXPR_FN (arg)))
|
||||||
|
|
@ -1194,8 +1190,7 @@ fix_array_notation_call_expr (tree arg)
|
||||||
body = pop_stmt_list (new_loop);
|
body = pop_stmt_list (new_loop);
|
||||||
}
|
}
|
||||||
append_to_statement_list_force (body, &loop_with_init);
|
append_to_statement_list_force (body, &loop_with_init);
|
||||||
an_loop_info.release ();
|
release_vec_vec (an_info);
|
||||||
an_info.release ();
|
|
||||||
return loop_with_init;
|
return loop_with_init;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,13 @@
|
||||||
|
2015-11-27 Martin Liska <mliska@suse.cz>
|
||||||
|
|
||||||
|
PR c++/68312
|
||||||
|
* cp-array-notation.c (expand_sec_reduce_builtin):
|
||||||
|
Likewise.
|
||||||
|
(create_array_refs): Replace argument with const reference.
|
||||||
|
(expand_an_in_modify_expr): Likewise.
|
||||||
|
(cp_expand_cond_array_notations): Likewise.
|
||||||
|
(expand_unary_array_notation_exprs): Likewise.
|
||||||
|
|
||||||
2015-11-27 Jakub Jelinek <jakub@redhat.com>
|
2015-11-27 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
PR c/63326
|
PR c/63326
|
||||||
|
|
|
||||||
|
|
@ -210,7 +210,7 @@ expand_sec_reduce_builtin (tree an_builtin_fn, tree *new_var)
|
||||||
enum tree_code code = NOP_EXPR;
|
enum tree_code code = NOP_EXPR;
|
||||||
location_t location = UNKNOWN_LOCATION;
|
location_t location = UNKNOWN_LOCATION;
|
||||||
vec<vec<an_parts> > an_info = vNULL;
|
vec<vec<an_parts> > an_info = vNULL;
|
||||||
vec<an_loop_parts> an_loop_info = vNULL;
|
auto_vec<an_loop_parts> an_loop_info;
|
||||||
enum built_in_function an_type =
|
enum built_in_function an_type =
|
||||||
is_cilkplus_reduce_builtin (CALL_EXPR_FN (an_builtin_fn));
|
is_cilkplus_reduce_builtin (CALL_EXPR_FN (an_builtin_fn));
|
||||||
vec <tree, va_gc> *func_args;
|
vec <tree, va_gc> *func_args;
|
||||||
|
|
@ -494,8 +494,7 @@ expand_sec_reduce_builtin (tree an_builtin_fn, tree *new_var)
|
||||||
}
|
}
|
||||||
append_to_statement_list (body, &loop_with_init);
|
append_to_statement_list (body, &loop_with_init);
|
||||||
|
|
||||||
an_info.release ();
|
release_vec_vec (an_info);
|
||||||
an_loop_info.release ();
|
|
||||||
|
|
||||||
return loop_with_init;
|
return loop_with_init;
|
||||||
}
|
}
|
||||||
|
|
@ -512,7 +511,7 @@ expand_an_in_modify_expr (location_t location, tree lhs,
|
||||||
tree array_expr_lhs = NULL_TREE, array_expr_rhs = NULL_TREE;
|
tree array_expr_lhs = NULL_TREE, array_expr_rhs = NULL_TREE;
|
||||||
tree array_expr = NULL_TREE;
|
tree array_expr = NULL_TREE;
|
||||||
tree body = NULL_TREE;
|
tree body = NULL_TREE;
|
||||||
vec<tree> cond_expr = vNULL;
|
auto_vec<tree> cond_expr;
|
||||||
vec<tree, va_gc> *lhs_array_operand = NULL, *rhs_array_operand = NULL;
|
vec<tree, va_gc> *lhs_array_operand = NULL, *rhs_array_operand = NULL;
|
||||||
size_t lhs_rank = 0, rhs_rank = 0, ii = 0;
|
size_t lhs_rank = 0, rhs_rank = 0, ii = 0;
|
||||||
vec<tree, va_gc> *rhs_list = NULL, *lhs_list = NULL;
|
vec<tree, va_gc> *rhs_list = NULL, *lhs_list = NULL;
|
||||||
|
|
@ -521,7 +520,8 @@ expand_an_in_modify_expr (location_t location, tree lhs,
|
||||||
bool found_builtin_fn = false;
|
bool found_builtin_fn = false;
|
||||||
tree an_init, loop_with_init = alloc_stmt_list ();
|
tree an_init, loop_with_init = alloc_stmt_list ();
|
||||||
vec<vec<an_parts> > lhs_an_info = vNULL, rhs_an_info = vNULL;
|
vec<vec<an_parts> > lhs_an_info = vNULL, rhs_an_info = vNULL;
|
||||||
vec<an_loop_parts> lhs_an_loop_info = vNULL, rhs_an_loop_info = vNULL;
|
auto_vec<an_loop_parts> lhs_an_loop_info, rhs_an_loop_info;
|
||||||
|
tree lhs_len, rhs_len;
|
||||||
|
|
||||||
if (!find_rank (location, rhs, rhs, false, &rhs_rank))
|
if (!find_rank (location, rhs, rhs, false, &rhs_rank))
|
||||||
return error_mark_node;
|
return error_mark_node;
|
||||||
|
|
@ -645,11 +645,11 @@ expand_an_in_modify_expr (location_t location, tree lhs,
|
||||||
rhs_an_info)))
|
rhs_an_info)))
|
||||||
{
|
{
|
||||||
pop_stmt_list (an_init);
|
pop_stmt_list (an_init);
|
||||||
return error_mark_node;
|
goto error;
|
||||||
}
|
}
|
||||||
tree rhs_len = ((rhs_list_size > 0 && rhs_rank > 0) ?
|
rhs_len = ((rhs_list_size > 0 && rhs_rank > 0) ?
|
||||||
rhs_an_info[0][0].length : NULL_TREE);
|
rhs_an_info[0][0].length : NULL_TREE);
|
||||||
tree lhs_len = ((lhs_list_size > 0 && lhs_rank > 0) ?
|
lhs_len = ((lhs_list_size > 0 && lhs_rank > 0) ?
|
||||||
lhs_an_info[0][0].length : NULL_TREE);
|
lhs_an_info[0][0].length : NULL_TREE);
|
||||||
if (lhs_list_size > 0 && rhs_list_size > 0 && lhs_rank > 0 && rhs_rank > 0
|
if (lhs_list_size > 0 && rhs_list_size > 0 && lhs_rank > 0 && rhs_rank > 0
|
||||||
&& TREE_CODE (lhs_len) == INTEGER_CST && rhs_len
|
&& TREE_CODE (lhs_len) == INTEGER_CST && rhs_len
|
||||||
|
|
@ -658,7 +658,7 @@ expand_an_in_modify_expr (location_t location, tree lhs,
|
||||||
{
|
{
|
||||||
error_at (location, "length mismatch between LHS and RHS");
|
error_at (location, "length mismatch between LHS and RHS");
|
||||||
pop_stmt_list (an_init);
|
pop_stmt_list (an_init);
|
||||||
return error_mark_node;
|
goto error;
|
||||||
}
|
}
|
||||||
for (ii = 0; ii < lhs_rank; ii++)
|
for (ii = 0; ii < lhs_rank; ii++)
|
||||||
{
|
{
|
||||||
|
|
@ -676,7 +676,7 @@ expand_an_in_modify_expr (location_t location, tree lhs,
|
||||||
lhs_an_loop_info, lhs_rank,
|
lhs_an_loop_info, lhs_rank,
|
||||||
lhs);
|
lhs);
|
||||||
if (!rhs_array_operand)
|
if (!rhs_array_operand)
|
||||||
return error_mark_node;
|
goto error;
|
||||||
}
|
}
|
||||||
replace_array_notations (&rhs, true, rhs_list, rhs_array_operand);
|
replace_array_notations (&rhs, true, rhs_list, rhs_array_operand);
|
||||||
rhs_list_size = 0;
|
rhs_list_size = 0;
|
||||||
|
|
@ -717,7 +717,7 @@ expand_an_in_modify_expr (location_t location, tree lhs,
|
||||||
rhs_an_loop_info, rhs_rank,
|
rhs_an_loop_info, rhs_rank,
|
||||||
rhs);
|
rhs);
|
||||||
if (!rhs_array_operand)
|
if (!rhs_array_operand)
|
||||||
return error_mark_node;
|
goto error;
|
||||||
replace_array_notations (&rhs, true, rhs_list, rhs_array_operand);
|
replace_array_notations (&rhs, true, rhs_list, rhs_array_operand);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -768,16 +768,16 @@ expand_an_in_modify_expr (location_t location, tree lhs,
|
||||||
}
|
}
|
||||||
append_to_statement_list (body, &loop_with_init);
|
append_to_statement_list (body, &loop_with_init);
|
||||||
|
|
||||||
lhs_an_info.release ();
|
release_vec_vec (lhs_an_info);
|
||||||
lhs_an_loop_info.release ();
|
release_vec_vec (rhs_an_info);
|
||||||
if (rhs_rank)
|
|
||||||
{
|
|
||||||
rhs_an_info.release ();
|
|
||||||
rhs_an_loop_info.release ();
|
|
||||||
}
|
|
||||||
cond_expr.release ();
|
|
||||||
|
|
||||||
return loop_with_init;
|
return loop_with_init;
|
||||||
|
|
||||||
|
error:
|
||||||
|
release_vec_vec (lhs_an_info);
|
||||||
|
release_vec_vec (rhs_an_info);
|
||||||
|
|
||||||
|
return error_mark_node;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Helper function for expand_conditonal_array_notations. Encloses the
|
/* Helper function for expand_conditonal_array_notations. Encloses the
|
||||||
|
|
@ -796,7 +796,7 @@ cp_expand_cond_array_notations (tree orig_stmt)
|
||||||
tree loop_with_init = alloc_stmt_list ();
|
tree loop_with_init = alloc_stmt_list ();
|
||||||
location_t location = UNKNOWN_LOCATION;
|
location_t location = UNKNOWN_LOCATION;
|
||||||
vec<vec<an_parts> > an_info = vNULL;
|
vec<vec<an_parts> > an_info = vNULL;
|
||||||
vec<an_loop_parts> an_loop_info = vNULL;
|
auto_vec<an_loop_parts> an_loop_info;
|
||||||
|
|
||||||
if (TREE_CODE (orig_stmt) == COND_EXPR)
|
if (TREE_CODE (orig_stmt) == COND_EXPR)
|
||||||
{
|
{
|
||||||
|
|
@ -957,8 +957,7 @@ cp_expand_cond_array_notations (tree orig_stmt)
|
||||||
}
|
}
|
||||||
append_to_statement_list (body, &loop_with_init);
|
append_to_statement_list (body, &loop_with_init);
|
||||||
|
|
||||||
an_info.release ();
|
release_vec_vec (an_info);
|
||||||
an_loop_info.release ();
|
|
||||||
|
|
||||||
return loop_with_init;
|
return loop_with_init;
|
||||||
}
|
}
|
||||||
|
|
@ -977,7 +976,7 @@ expand_unary_array_notation_exprs (tree orig_stmt)
|
||||||
location_t location = EXPR_LOCATION (orig_stmt);
|
location_t location = EXPR_LOCATION (orig_stmt);
|
||||||
tree an_init, loop_with_init = alloc_stmt_list ();
|
tree an_init, loop_with_init = alloc_stmt_list ();
|
||||||
vec<vec<an_parts> > an_info = vNULL;
|
vec<vec<an_parts> > an_info = vNULL;
|
||||||
vec<an_loop_parts> an_loop_info = vNULL;
|
auto_vec<an_loop_parts> an_loop_info;
|
||||||
|
|
||||||
if (!find_rank (location, orig_stmt, orig_stmt, true, &rank))
|
if (!find_rank (location, orig_stmt, orig_stmt, true, &rank))
|
||||||
return error_mark_node;
|
return error_mark_node;
|
||||||
|
|
@ -1060,8 +1059,7 @@ expand_unary_array_notation_exprs (tree orig_stmt)
|
||||||
}
|
}
|
||||||
append_to_statement_list (body, &loop_with_init);
|
append_to_statement_list (body, &loop_with_init);
|
||||||
|
|
||||||
an_info.release ();
|
release_vec_vec (an_info);
|
||||||
an_loop_info.release ();
|
|
||||||
|
|
||||||
return loop_with_init;
|
return loop_with_init;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
12
gcc/vec.h
12
gcc/vec.h
|
|
@ -1702,6 +1702,18 @@ vec<T, va_heap, vl_ptr>::using_auto_storage () const
|
||||||
return m_vec->m_vecpfx.m_using_auto_storage;
|
return m_vec->m_vecpfx.m_using_auto_storage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Release VEC and call release of all element vectors. */
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
inline void
|
||||||
|
release_vec_vec (vec<vec<T> > &vec)
|
||||||
|
{
|
||||||
|
for (unsigned i = 0; i < vec.length (); i++)
|
||||||
|
vec[i].release ();
|
||||||
|
|
||||||
|
vec.release ();
|
||||||
|
}
|
||||||
|
|
||||||
#if (GCC_VERSION >= 3000)
|
#if (GCC_VERSION >= 3000)
|
||||||
# pragma GCC poison m_vec m_vecpfx m_vecdata
|
# pragma GCC poison m_vec m_vecpfx m_vecdata
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue