aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2003-01-08 16:59:31 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2003-01-08 16:59:31 +0000
commit8caf4c38d83943bcc708ee5707e81076a16f5f43 (patch)
tree415b417ba0ff5c1625a508dad26509d303d8adb5
parent918c4fe41e55d3968a1ce0a528a695e4256751b7 (diff)
downloadgcc-8caf4c38d83943bcc708ee5707e81076a16f5f43.zip
gcc-8caf4c38d83943bcc708ee5707e81076a16f5f43.tar.gz
gcc-8caf4c38d83943bcc708ee5707e81076a16f5f43.tar.bz2
parser.c (cp_parser_asm_definition): Correct handling of omitted operands.
* parser.c (cp_parser_asm_definition): Correct handling of omitted operands. * g++.dg/ext/asm4.C: New test. From-SVN: r61048
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/parser.c12
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/ext/asm4.C4
4 files changed, 22 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 26207b7..c199222 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2003-01-07 Mark Mitchell <mark@codesourcery.com>
+
+ * parser.c (cp_parser_asm_definition): Correct handling of omitted
+ operands.
+
2003-01-08 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/9030
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index e9b41e4..f5ada05 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -9592,7 +9592,9 @@ cp_parser_asm_definition (parser)
if (cp_lexer_next_token_is_not (parser->lexer,
CPP_COLON)
&& cp_lexer_next_token_is_not (parser->lexer,
- CPP_SCOPE))
+ CPP_SCOPE)
+ && cp_lexer_next_token_is_not (parser->lexer,
+ CPP_CLOSE_PAREN))
outputs = cp_parser_asm_operand_list (parser);
}
/* If the next token is `::', there are no outputs, and the
@@ -9616,7 +9618,9 @@ cp_parser_asm_definition (parser)
if (cp_lexer_next_token_is_not (parser->lexer,
CPP_COLON)
&& cp_lexer_next_token_is_not (parser->lexer,
- CPP_SCOPE))
+ CPP_SCOPE)
+ && cp_lexer_next_token_is_not (parser->lexer,
+ CPP_CLOSE_PAREN))
inputs = cp_parser_asm_operand_list (parser);
}
else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
@@ -9631,7 +9635,9 @@ cp_parser_asm_definition (parser)
/* Consume the `:'. */
cp_lexer_consume_token (parser->lexer);
/* Parse the clobbers. */
- clobbers = cp_parser_asm_clobber_list (parser);
+ if (cp_lexer_next_token_is_not (parser->lexer,
+ CPP_CLOSE_PAREN))
+ clobbers = cp_parser_asm_clobber_list (parser);
}
}
/* Look for the closing `)'. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 848423d..4852fd2 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2003-01-07 Mark Mitchell <mark@codesourcery.com>
+
+ * g++.dg/ext/asm4.C: New test.
+
2003-01-08 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/9030
diff --git a/gcc/testsuite/g++.dg/ext/asm4.C b/gcc/testsuite/g++.dg/ext/asm4.C
new file mode 100644
index 0000000..2726d8e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/asm4.C
@@ -0,0 +1,4 @@
+void f ()
+{
+ __asm__ __volatile__ ("" : : );
+}