re PR c++/60189 (ICE with invalid use of _Cilk_sync)

gcc/cp
	PR c/60189
	* parser.c (cp_parser_postfix_expression): Move handling of cilk_sync
	from here to...
	(cp_parser_statement): ...here. Make sure only semicolon can go after
	Cilk_sync.

gcc/testsuite
	PR c++/60189
	* c-c++-common/cilk-plus/CK/invalid_sync.cÑ: New test.

From-SVN: r210678
This commit is contained in:
Igor Zamyatin 2014-05-21 08:03:06 +00:00 committed by Kirill Yukhin
parent 3aaf05290a
commit c3d96270fc
4 changed files with 40 additions and 14 deletions

View File

@ -1,3 +1,11 @@
2014-05-21 Igor Zamyatin <igor.zamyatin@intel.com>
PR c/60189
* parser.c (cp_parser_postfix_expression): Move handling of cilk_sync
from here to...
(cp_parser_statement): ...here. Make sure only semicolon can go after
Cilk_sync.
2014-05-20 Paolo Carlini <paolo.carlini@oracle.com> 2014-05-20 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/58753 PR c++/58753

View File

@ -5845,20 +5845,6 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
} }
break; 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: case RID_BUILTIN_SHUFFLE:
{ {
@ -9414,6 +9400,24 @@ cp_parser_statement (cp_parser* parser, tree in_statement_expr,
statement = cp_parser_jump_statement (parser); statement = cp_parser_jump_statement (parser);
break; 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. */ /* Objective-C++ exception-handling constructs. */
case RID_AT_TRY: case RID_AT_TRY:
case RID_AT_CATCH: case RID_AT_CATCH:

View File

@ -1,3 +1,8 @@
2014-05-21 Igor Zamyatin <igor.zamyatin@intel.com>
PR c++/60189
* c-c++-common/cilk-plus/CK/invalid_sync.cÑ: New test.
2014-05-20 Jan Hubicka <hubicka@ucw.cz> 2014-05-20 Jan Hubicka <hubicka@ucw.cz>
PR tree-optimization/60899 PR tree-optimization/60899

View File

@ -0,0 +1,9 @@
/* PR c/60189 */
/* { dg-do compile } */
/* { dg-options "-fcilkplus" } */
int main (void)
{
_Cilk_sync return; /* { dg-error " expected ';' before 'return'" } */
return 0;
}