diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 26207b7a3736ce8f1933c9976efae612ba5b2c4e..c1992227e76e9ceaf97578304016d8bc0fbc282d 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 e9b41e4a0178338f3c70e1ddeab2225c7902a5e4..f5ada05c0e4925e4697532284e43af28affb5920 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 848423d59d3a28b8ca5913ab88c4b7f124fe1efb..4852fd235129a40125ca8571a059b3e48e4e92fa 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 0000000000000000000000000000000000000000..2726d8e42073f2356b13a55647c7dc7e6f9b9891
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/asm4.C
@@ -0,0 +1,4 @@
+void f ()
+{
+  __asm__ __volatile__ ("" : : );
+}