OSDN Git Service

* parser.c (cp_parser_asm_definition): Correct handling of omitted
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 8 Jan 2003 16:59:31 +0000 (16:59 +0000)
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 8 Jan 2003 16:59:31 +0000 (16:59 +0000)
operands.

* g++.dg/ext/asm4.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@61048 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/ext/asm4.C [new file with mode: 0644]

index 26207b7..c199222 100644 (file)
@@ -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
index e9b41e4..f5ada05 100644 (file)
@@ -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 `)'.  */
index 848423d..4852fd2 100644 (file)
@@ -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 (file)
index 0000000..2726d8e
--- /dev/null
@@ -0,0 +1,4 @@
+void f ()
+{
+  __asm__ __volatile__ ("" : : );
+}