mirror of git://gcc.gnu.org/git/gcc.git
Add illegal cilk checks to C++ front.
Add calls for several illegal Cilk cases to the C++ frontend. C++ usually doesn't ICE unlike C on illegal cilk, but it's better to match C in what is allowed and what is not. if (_Cilk_spawn ...) is still not errored, but at least it doesn't ICE. gcc/cp/: 2014-11-10 Andi Kleen <ak@linux.intel.com> * semantics.c (finish_goto_stmt): Call check_no_cilk. (finish_while_stmt_cond): Dito. (finish_do_stmt): Dito. (finish_for_cond): Dito. (finish_switch_cond): Dito. From-SVN: r217337
This commit is contained in:
parent
e5e4425247
commit
14f68c3965
|
|
@ -1,3 +1,11 @@
|
||||||
|
2014-11-10 Andi Kleen <ak@linux.intel.com>
|
||||||
|
|
||||||
|
* semantics.c (finish_goto_stmt): Call check_no_cilk.
|
||||||
|
(finish_while_stmt_cond): Dito.
|
||||||
|
(finish_do_stmt): Dito.
|
||||||
|
(finish_for_cond): Dito.
|
||||||
|
(finish_switch_cond): Dito.
|
||||||
|
|
||||||
2014-11-10 Paolo Carlini <paolo.carlini@oracle.com>
|
2014-11-10 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
|
|
||||||
* typeck.c (cp_build_binary_op): Use OPT_Wshift_count_negative and
|
* typeck.c (cp_build_binary_op): Use OPT_Wshift_count_negative and
|
||||||
|
|
|
||||||
|
|
@ -625,6 +625,10 @@ finish_goto_stmt (tree destination)
|
||||||
TREE_USED (destination) = 1;
|
TREE_USED (destination) = 1;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (check_no_cilk (destination,
|
||||||
|
"Cilk array notation cannot be used as a computed goto expression",
|
||||||
|
"%<_Cilk_spawn%> statement cannot be used as a computed goto expression"))
|
||||||
|
destination = error_mark_node;
|
||||||
destination = mark_rvalue_use (destination);
|
destination = mark_rvalue_use (destination);
|
||||||
if (!processing_template_decl)
|
if (!processing_template_decl)
|
||||||
{
|
{
|
||||||
|
|
@ -796,6 +800,10 @@ begin_while_stmt (void)
|
||||||
void
|
void
|
||||||
finish_while_stmt_cond (tree cond, tree while_stmt, bool ivdep)
|
finish_while_stmt_cond (tree cond, tree while_stmt, bool ivdep)
|
||||||
{
|
{
|
||||||
|
if (check_no_cilk (cond,
|
||||||
|
"Cilk array notation cannot be used as a condition for while statement",
|
||||||
|
"%<_Cilk_spawn%> statement cannot be used as a condition for while statement"))
|
||||||
|
cond = error_mark_node;
|
||||||
cond = maybe_convert_cond (cond);
|
cond = maybe_convert_cond (cond);
|
||||||
finish_cond (&WHILE_COND (while_stmt), cond);
|
finish_cond (&WHILE_COND (while_stmt), cond);
|
||||||
begin_maybe_infinite_loop (cond);
|
begin_maybe_infinite_loop (cond);
|
||||||
|
|
@ -851,6 +859,10 @@ finish_do_body (tree do_stmt)
|
||||||
void
|
void
|
||||||
finish_do_stmt (tree cond, tree do_stmt, bool ivdep)
|
finish_do_stmt (tree cond, tree do_stmt, bool ivdep)
|
||||||
{
|
{
|
||||||
|
if (check_no_cilk (cond,
|
||||||
|
"Cilk array notation cannot be used as a condition for a do-while statement",
|
||||||
|
"%<_Cilk_spawn%> statement cannot be used as a condition for a do-while statement"))
|
||||||
|
cond = error_mark_node;
|
||||||
cond = maybe_convert_cond (cond);
|
cond = maybe_convert_cond (cond);
|
||||||
end_maybe_infinite_loop (cond);
|
end_maybe_infinite_loop (cond);
|
||||||
if (ivdep && cond != error_mark_node)
|
if (ivdep && cond != error_mark_node)
|
||||||
|
|
@ -960,6 +972,10 @@ finish_for_init_stmt (tree for_stmt)
|
||||||
void
|
void
|
||||||
finish_for_cond (tree cond, tree for_stmt, bool ivdep)
|
finish_for_cond (tree cond, tree for_stmt, bool ivdep)
|
||||||
{
|
{
|
||||||
|
if (check_no_cilk (cond,
|
||||||
|
"Cilk array notation cannot be used in a condition for a for-loop",
|
||||||
|
"%<_Cilk_spawn%> statement cannot be used in a condition for a for-loop"))
|
||||||
|
cond = error_mark_node;
|
||||||
cond = maybe_convert_cond (cond);
|
cond = maybe_convert_cond (cond);
|
||||||
finish_cond (&FOR_COND (for_stmt), cond);
|
finish_cond (&FOR_COND (for_stmt), cond);
|
||||||
begin_maybe_infinite_loop (cond);
|
begin_maybe_infinite_loop (cond);
|
||||||
|
|
@ -1122,6 +1138,12 @@ void
|
||||||
finish_switch_cond (tree cond, tree switch_stmt)
|
finish_switch_cond (tree cond, tree switch_stmt)
|
||||||
{
|
{
|
||||||
tree orig_type = NULL;
|
tree orig_type = NULL;
|
||||||
|
|
||||||
|
if (check_no_cilk (cond,
|
||||||
|
"Cilk array notation cannot be used as a condition for switch statement",
|
||||||
|
"%<_Cilk_spawn%> statement cannot be used as a condition for switch statement"))
|
||||||
|
cond = error_mark_node;
|
||||||
|
|
||||||
if (!processing_template_decl)
|
if (!processing_template_decl)
|
||||||
{
|
{
|
||||||
/* Convert the condition to an integer or enumeration type. */
|
/* Convert the condition to an integer or enumeration type. */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue