> > From: Jason Merrill [mailto:ja...@redhat.com]
> > Sent: Monday, April 14, 2014 9:49 PM
> > To: Zamyatin, Igor; Jakub Jelinek
> > Cc: GCC Patches (gcc-patches@gcc.gnu.org); Iyer, Balaji V
> > Subject: Re: [PATCH, PR60189, Cilk+] Fix for ICE with incorrect
> > Cilk_sync usage
> >
> > Oh, I see where the problem is coming from.  Cilk_sync is a statement,
> > but it's being parsed as an expression.  Let's move it to
> cp_parser_statement.
> 
> Something like this (better to put new code in separate routine?)?
> 
> diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index bb59e3b..3105d6c 100644
> --- a/gcc/cp/parser.c
> +++ b/gcc/cp/parser.c
> @@ -5835,20 +5835,6 @@ cp_parser_postfix_expression (cp_parser
> *parser, bool address_p, bool cast_p,
>           }
>         break;
>        }
> -
> -    case RID_CILK_SYNC:
> -      if (flag_cilkplus)
> -       {
> -         tree sync_expr = build_cilk_sync ();
> -         SET_EXPR_LOCATION (sync_expr,
> -                            cp_lexer_peek_token (parser->lexer)->location);
> -         finish_expr_stmt (sync_expr);
> -       }
> -      else
> -       error_at (token->location, "-fcilkplus must be enabled to use"
> -                 " %<_Cilk_sync%>");
> -      cp_lexer_consume_token (parser->lexer);
> -      break;
> 
>      case RID_BUILTIN_SHUFFLE:
>        {
> @@ -9404,6 +9390,24 @@ cp_parser_statement (cp_parser* parser, tree
> in_statement_expr,
>           statement = cp_parser_jump_statement (parser);
>           break;
> 
> +       case RID_CILK_SYNC:
> +         cp_lexer_consume_token (parser->lexer);
> +         if (flag_cilkplus)
> +           {
> +             tree sync_expr = build_cilk_sync ();
> +             SET_EXPR_LOCATION (sync_expr,
> +                                token->location);
> +             statement = finish_expr_stmt (sync_expr);
> +           }
> +         else
> +           {
> +             error_at (token->location, "-fcilkplus must be enabled to use"
> +                       " %<_Cilk_sync%>");
> +             statement = error_mark_node;
> +           }
> +         cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
> +         break;
> +
>           /* Objective-C++ exception-handling constructs.  */
>         case RID_AT_TRY:
>         case RID_AT_CATCH:
> 
> Thanks,
> Igor
> 

Jason,

Does the above change make sense?


Thanks in advance,
Igor

> >
> > Jason

Reply via email to