Andi Kleen <a...@firstfloor.org> writes:

Ping!^3

> Andi Kleen <a...@firstfloor.org> writes:
>
> Ping!^2
>
>> Andi Kleen <a...@firstfloor.org> writes:
>>
>> Ping!
>>
>> Can someone from the C++ side please approve this patch?
>> That's the only patch not approved in this patch kit, but blocking
>> the commit.
>>
>> -Andi
>>
>>> From: Andi Kleen <a...@linux.intel.com>
>>>
>>> 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-09-30  Andi Kleen  <a...@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.
>>> ---
>>>  gcc/cp/semantics.c | 12 ++++++++++++
>>>  1 file changed, 12 insertions(+)
>>>
>>> diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
>>> index 7569826..9ca03be 100644
>>> --- a/gcc/cp/semantics.c
>>> +++ b/gcc/cp/semantics.c
>>> @@ -621,6 +621,8 @@ finish_goto_stmt (tree destination)
>>>      TREE_USED (destination) = 1;
>>>    else
>>>      {
>>> +      if (check_no_cilk (destination, "as a computed goto expression"))
>>> +   destination = error_mark_node;
>>>        destination = mark_rvalue_use (destination);
>>>        if (!processing_template_decl)
>>>     {
>>> @@ -792,6 +794,8 @@ begin_while_stmt (void)
>>>  void
>>>  finish_while_stmt_cond (tree cond, tree while_stmt, bool ivdep)
>>>  {
>>> +  if (check_no_cilk (cond, "as a condition for while statement"))
>>> +    cond = error_mark_node;
>>>    cond = maybe_convert_cond (cond);
>>>    finish_cond (&WHILE_COND (while_stmt), cond);
>>>    begin_maybe_infinite_loop (cond);
>>> @@ -847,6 +851,8 @@ finish_do_body (tree do_stmt)
>>>  void
>>>  finish_do_stmt (tree cond, tree do_stmt, bool ivdep)
>>>  {
>>> +  if (check_no_cilk (cond, "as a condition for a do-while statement"))
>>> +    cond = error_mark_node;
>>>    cond = maybe_convert_cond (cond);
>>>    end_maybe_infinite_loop (cond);
>>>    if (ivdep && cond != error_mark_node)
>>> @@ -956,6 +962,8 @@ finish_for_init_stmt (tree for_stmt)
>>>  void
>>>  finish_for_cond (tree cond, tree for_stmt, bool ivdep)
>>>  {
>>> +  if (check_no_cilk (cond, "in a condition for a for-loop"))
>>> +    cond = error_mark_node;
>>>    cond = maybe_convert_cond (cond);
>>>    finish_cond (&FOR_COND (for_stmt), cond);
>>>    begin_maybe_infinite_loop (cond);
>>> @@ -1118,6 +1126,10 @@ void
>>>  finish_switch_cond (tree cond, tree switch_stmt)
>>>  {
>>>    tree orig_type = NULL;
>>> +
>>> +  if (check_no_cilk (cond, "as a condition for switch statement"))
>>> +    cond = error_mark_node;
>>> +
>>>    if (!processing_template_decl)
>>>      {
>>>        /* Convert the condition to an integer or enumeration type.  */

-- 
a...@linux.intel.com -- Speaking for myself only

Reply via email to