aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSegher Boessenkool <segher@kernel.crashing.org>2018-12-19 16:55:28 +0100
committerSegher Boessenkool <segher@gcc.gnu.org>2018-12-19 16:55:28 +0100
commit9c9cfcbbbe659d16a216883ff9a9bcb098e243f0 (patch)
tree8742fec0642ba8d01a47615e005f61c5bfe5e384
parent15c40a3b7ce64665f8b4552a45c0cdd9564598cc (diff)
downloadgcc-9c9cfcbbbe659d16a216883ff9a9bcb098e243f0.zip
gcc-9c9cfcbbbe659d16a216883ff9a9bcb098e243f0.tar.gz
gcc-9c9cfcbbbe659d16a216883ff9a9bcb098e243f0.tar.bz2
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
-rw-r--r--gcc/c/ChangeLog5
-rw-r--r--gcc/c/c-parser.c65
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/parser.c71
4 files changed, 72 insertions, 74 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index 3232614..d1beffa 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -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
diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c
index b875c4f..835c0d8 100644
--- a/gcc/c/c-parser.c
+++ b/gcc/c/c-parser.c
@@ -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. */
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 7b79461..44ac2a9 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -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
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index e5381b4..0e4716f 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -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))