re PR c++/68001 ([cilkplus] ICE in cp_gimplify_expr, at cp/cp-gimplify.c:760)
PR c++/68001 gcc/c-family PR c++/68001 * c-gimplify.c (c_gimplify_expr): Stop the process if see an error. * cilk.c (recognize_spawn): Determine location in a more precise way. gcc/cp * cp-gimplify.c (cp_gimplify_expr): Stop the process if see an error. gcc/testsuite * g++.dg/cilk-plus/CK/pr68001.cc: New test. From-SVN: r230755
This commit is contained in:
parent
f7b492ea50
commit
cc5c522696
@ -1,3 +1,10 @@
|
||||
2015-11-23 Igor Zamyatin <igor.zamyatin@intel.com>
|
||||
|
||||
PR c++/68001
|
||||
* c-gimplify.c (c_gimplify_expr): Stop the process if see an error.
|
||||
* cilk.c (recognize_spawn): Determine location in a more precise
|
||||
way.
|
||||
|
||||
2015-11-19 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* c-common.c (shorten_compare): But look through macros from
|
||||
|
@ -272,16 +272,16 @@ c_gimplify_expr (tree *expr_p, gimple_seq *pre_p ATTRIBUTE_UNUSED,
|
||||
}
|
||||
|
||||
case CILK_SPAWN_STMT:
|
||||
gcc_assert
|
||||
(fn_contains_cilk_spawn_p (cfun)
|
||||
&& cilk_detect_spawn_and_unwrap (expr_p));
|
||||
gcc_assert(fn_contains_cilk_spawn_p (cfun)
|
||||
&& cilk_detect_spawn_and_unwrap (expr_p));
|
||||
|
||||
/* If errors are seen, then just process it as a CALL_EXPR. */
|
||||
if (!seen_error ())
|
||||
{
|
||||
cilk_gimplify_call_params_in_spawned_fn (expr_p, pre_p, post_p);
|
||||
return (enum gimplify_status) gimplify_cilk_spawn (expr_p);
|
||||
}
|
||||
return GS_ERROR;
|
||||
|
||||
case MODIFY_EXPR:
|
||||
case INIT_EXPR:
|
||||
case CALL_EXPR:
|
||||
|
@ -76,6 +76,7 @@ struct wrapper_data
|
||||
tree block;
|
||||
};
|
||||
|
||||
static tree contains_cilk_spawn_stmt_walker (tree *tp, int *, void *);
|
||||
static void extract_free_variables (tree, struct wrapper_data *,
|
||||
enum add_variable_type);
|
||||
static HOST_WIDE_INT cilk_wrapper_count;
|
||||
@ -235,7 +236,19 @@ recognize_spawn (tree exp, tree *exp0)
|
||||
}
|
||||
/* _Cilk_spawn can't be wrapped in expression such as PLUS_EXPR. */
|
||||
else if (contains_cilk_spawn_stmt (exp))
|
||||
error_at (EXPR_LOCATION (exp), "invalid use of %<_Cilk_spawn%>");
|
||||
{
|
||||
location_t loc = EXPR_LOCATION (exp);
|
||||
if (loc == UNKNOWN_LOCATION)
|
||||
{
|
||||
tree stmt = walk_tree (&exp,
|
||||
contains_cilk_spawn_stmt_walker,
|
||||
NULL,
|
||||
NULL);
|
||||
gcc_assert (stmt != NULL_TREE);
|
||||
loc = EXPR_LOCATION (stmt);
|
||||
}
|
||||
error_at (loc, "invalid use of %<_Cilk_spawn%>");
|
||||
}
|
||||
return spawn_found;
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
2015-11-23 Igor Zamyatin <igor.zamyatin@intel.com>
|
||||
|
||||
PR c++/68001
|
||||
* cp-gimplify.c (cp_gimplify_expr): Stop the process if see an error.
|
||||
|
||||
2015-11-20 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/67354
|
||||
|
@ -611,12 +611,14 @@ cp_gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p)
|
||||
25979. */
|
||||
case INIT_EXPR:
|
||||
if (fn_contains_cilk_spawn_p (cfun)
|
||||
&& cilk_detect_spawn_and_unwrap (expr_p)
|
||||
&& !seen_error ())
|
||||
&& cilk_detect_spawn_and_unwrap (expr_p))
|
||||
{
|
||||
cilk_cp_gimplify_call_params_in_spawned_fn (expr_p, pre_p, post_p);
|
||||
return (enum gimplify_status) gimplify_cilk_spawn (expr_p);
|
||||
}
|
||||
if (seen_error ())
|
||||
return GS_ERROR;
|
||||
|
||||
cp_gimplify_init_expr (expr_p);
|
||||
if (TREE_CODE (*expr_p) != INIT_EXPR)
|
||||
return GS_OK;
|
||||
@ -725,16 +727,16 @@ cp_gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p)
|
||||
break;
|
||||
|
||||
case CILK_SPAWN_STMT:
|
||||
gcc_assert
|
||||
(fn_contains_cilk_spawn_p (cfun)
|
||||
&& cilk_detect_spawn_and_unwrap (expr_p));
|
||||
gcc_assert(fn_contains_cilk_spawn_p (cfun)
|
||||
&& cilk_detect_spawn_and_unwrap (expr_p));
|
||||
|
||||
/* If errors are seen, then just process it as a CALL_EXPR. */
|
||||
if (!seen_error ())
|
||||
{
|
||||
cilk_cp_gimplify_call_params_in_spawned_fn (expr_p, pre_p, post_p);
|
||||
return (enum gimplify_status) gimplify_cilk_spawn (expr_p);
|
||||
}
|
||||
return GS_ERROR;
|
||||
|
||||
case CALL_EXPR:
|
||||
if (fn_contains_cilk_spawn_p (cfun)
|
||||
&& cilk_detect_spawn_and_unwrap (expr_p)
|
||||
|
@ -1,3 +1,8 @@
|
||||
2015-11-23 Igor Zamyatin <igor.zamyatin@intel.com>
|
||||
|
||||
PR c++/68001
|
||||
* g++.dg/cilk-plus/CK/pr68001.cc: New test.
|
||||
|
||||
2015-11-23 Richard Biener <rguenther@suse.de>
|
||||
Jiong Wang <jiong.wang@arm.com>
|
||||
|
||||
|
18
gcc/testsuite/g++.dg/cilk-plus/CK/pr68001.cc
Normal file
18
gcc/testsuite/g++.dg/cilk-plus/CK/pr68001.cc
Normal file
@ -0,0 +1,18 @@
|
||||
/* PR middle-end/68001 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-fcilkplus" } */
|
||||
|
||||
#include <vector>
|
||||
|
||||
std::vector<double> f() {
|
||||
std::vector<double> v;
|
||||
return v;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
std::vector<double> x = _Cilk_spawn f(); /* { dg-error "invalid use of" } */
|
||||
std::vector<double> y = f();
|
||||
_Cilk_sync;
|
||||
return 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user