c/c++, asm: Write the asm-qualifier loop without "done" boolean
As suggested by Jason. c/ * c-parser.c (c_parser_asm_statement): Rewrite the loop to work without "done" boolean variable. cp/ * parser.c (cp_parser_asm_definition): Rewrite the loop to work without "done" boolean variable. From-SVN: r267277
This commit is contained in:
parent
15c40a3b7c
commit
9c9cfcbbbe
@ -1,3 +1,8 @@
|
||||
2018-12-19 Segher Boessenkool <segher@kernel.crashing.org>
|
||||
|
||||
* c-parser.c (c_parser_asm_statement): Rewrite the loop to work without
|
||||
"done" boolean variable.
|
||||
|
||||
2018-12-19 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
PR c++/87504
|
||||
|
@ -6372,40 +6372,37 @@ c_parser_asm_statement (c_parser *parser)
|
||||
is_volatile = false;
|
||||
is_inline = false;
|
||||
is_goto = false;
|
||||
for (bool done = false; !done; )
|
||||
switch (c_parser_peek_token (parser)->keyword)
|
||||
{
|
||||
case RID_VOLATILE:
|
||||
if (!is_volatile)
|
||||
{
|
||||
is_volatile = true;
|
||||
quals = c_parser_peek_token (parser)->value;
|
||||
c_parser_consume_token (parser);
|
||||
}
|
||||
else
|
||||
done = true;
|
||||
break;
|
||||
case RID_INLINE:
|
||||
if (!is_inline)
|
||||
{
|
||||
is_inline = true;
|
||||
c_parser_consume_token (parser);
|
||||
}
|
||||
else
|
||||
done = true;
|
||||
break;
|
||||
case RID_GOTO:
|
||||
if (!is_goto)
|
||||
{
|
||||
is_goto = true;
|
||||
c_parser_consume_token (parser);
|
||||
}
|
||||
else
|
||||
done = true;
|
||||
break;
|
||||
default:
|
||||
done = true;
|
||||
}
|
||||
for (;;)
|
||||
{
|
||||
switch (c_parser_peek_token (parser)->keyword)
|
||||
{
|
||||
case RID_VOLATILE:
|
||||
if (is_volatile)
|
||||
break;
|
||||
is_volatile = true;
|
||||
quals = c_parser_peek_token (parser)->value;
|
||||
c_parser_consume_token (parser);
|
||||
continue;
|
||||
|
||||
case RID_INLINE:
|
||||
if (is_inline)
|
||||
break;
|
||||
is_inline = true;
|
||||
c_parser_consume_token (parser);
|
||||
continue;
|
||||
|
||||
case RID_GOTO:
|
||||
if (is_goto)
|
||||
break;
|
||||
is_goto = true;
|
||||
c_parser_consume_token (parser);
|
||||
continue;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
/* ??? Follow the C++ parser rather than using the
|
||||
lex_untranslated_string kludge. */
|
||||
|
@ -1,3 +1,8 @@
|
||||
2018-12-19 Segher Boessenkool <segher@kernel.crashing.org>
|
||||
|
||||
* parser.c (cp_parser_asm_definition): Rewrite the loop to work without
|
||||
"done" boolean variable.
|
||||
|
||||
2018-12-19 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
PR c++/88375
|
||||
|
@ -19698,47 +19698,38 @@ cp_parser_asm_definition (cp_parser* parser)
|
||||
cp_function_chain->invalid_constexpr = true;
|
||||
}
|
||||
|
||||
/* See if the next token is `volatile'. */
|
||||
/* Handle the asm-qualifier-list. */
|
||||
if (cp_parser_allow_gnu_extensions_p (parser))
|
||||
for (bool done = false; !done ; )
|
||||
switch (cp_lexer_peek_token (parser->lexer)->keyword)
|
||||
{
|
||||
case RID_VOLATILE:
|
||||
if (!volatile_p)
|
||||
{
|
||||
/* Remember that we saw the `volatile' keyword. */
|
||||
volatile_p = true;
|
||||
/* Consume the token. */
|
||||
cp_lexer_consume_token (parser->lexer);
|
||||
}
|
||||
else
|
||||
done = true;
|
||||
break;
|
||||
case RID_INLINE:
|
||||
if (!inline_p && parser->in_function_body)
|
||||
{
|
||||
/* Remember that we saw the `inline' keyword. */
|
||||
inline_p = true;
|
||||
/* Consume the token. */
|
||||
cp_lexer_consume_token (parser->lexer);
|
||||
}
|
||||
else
|
||||
done = true;
|
||||
break;
|
||||
case RID_GOTO:
|
||||
if (!goto_p && parser->in_function_body)
|
||||
{
|
||||
/* Remember that we saw the `goto' keyword. */
|
||||
goto_p = true;
|
||||
/* Consume the token. */
|
||||
cp_lexer_consume_token (parser->lexer);
|
||||
}
|
||||
else
|
||||
done = true;
|
||||
break;
|
||||
default:
|
||||
done = true;
|
||||
}
|
||||
for (;;)
|
||||
{
|
||||
switch (cp_lexer_peek_token (parser->lexer)->keyword)
|
||||
{
|
||||
case RID_VOLATILE:
|
||||
if (volatile_p)
|
||||
break;
|
||||
volatile_p = true;
|
||||
cp_lexer_consume_token (parser->lexer);
|
||||
continue;
|
||||
|
||||
case RID_INLINE:
|
||||
if (inline_p || !parser->in_function_body)
|
||||
break;
|
||||
inline_p = true;
|
||||
cp_lexer_consume_token (parser->lexer);
|
||||
continue;
|
||||
|
||||
case RID_GOTO:
|
||||
if (goto_p || !parser->in_function_body)
|
||||
break;
|
||||
goto_p = true;
|
||||
cp_lexer_consume_token (parser->lexer);
|
||||
continue;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
/* Look for the opening `('. */
|
||||
if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
|
||||
|
Loading…
x
Reference in New Issue
Block a user