aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2009-04-01 13:45:14 +0000
committerJakub Jelinek <jakub@redhat.com>2009-04-01 13:45:14 +0000
commit0b4557a878f9e9266231d8820605fe756bd707e4 (patch)
treee21e24469f7f4ee4ef13210aa45c8f8c78a2eaa9
parent5c52956b86ca3e77b0e9b5a9204c98210dec5730 (diff)
PR c/37772
* c-parser.c (c_parser_asm_statement): Skip until close paren and return if c_parser_asm_string_literal returned NULL. * gcc.dg/pr37772.c: New test. * g++.dg/ext/asm11.C: New test. git-svn-id: https://gcc.gnu.org/svn/gcc/branches/gcc-4_4-branch@145402 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/c-parser.c6
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/ext/asm11.C20
-rw-r--r--gcc/testsuite/gcc.dg/pr37772.c20
5 files changed, 58 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 37c305e5c82..b8e37129951 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2009-04-01 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/37772
+ * c-parser.c (c_parser_asm_statement): Skip until close paren and
+ return if c_parser_asm_string_literal returned NULL.
+
2009-04-01 Kai Tietz <kai.tietz@onevision.com>
Andrey Galkin <agalkin@hypercom.com>
diff --git a/gcc/c-parser.c b/gcc/c-parser.c
index f910128de3f..ac37a5a9d77 100644
--- a/gcc/c-parser.c
+++ b/gcc/c-parser.c
@@ -4184,6 +4184,12 @@ c_parser_asm_statement (c_parser *parser)
return NULL_TREE;
}
str = c_parser_asm_string_literal (parser);
+ if (str == NULL_TREE)
+ {
+ parser->lex_untranslated_string = false;
+ c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
+ return NULL_TREE;
+ }
if (c_parser_next_token_is (parser, CPP_CLOSE_PAREN))
{
simple = true;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d95c94771ca..1015c2fae1a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2009-04-01 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/37772
+ * gcc.dg/pr37772.c: New test.
+ * g++.dg/ext/asm11.C: New test.
+
2009-03-31 H.J. Lu <hongjiu.lu@intel.com>
Backport from mainline:
diff --git a/gcc/testsuite/g++.dg/ext/asm11.C b/gcc/testsuite/g++.dg/ext/asm11.C
new file mode 100644
index 00000000000..7939aacc0f4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/asm11.C
@@ -0,0 +1,20 @@
+// PR c/37772
+// { dg-do compile }
+// { dg-options "" }
+
+void
+foo ()
+{
+ int i;
+ asm (); // { dg-error "expected string-literal before" }
+ asm (1); // { dg-error "expected string-literal before" }
+ asm (int); // { dg-error "expected string-literal before" }
+ asm (: "=r" (i)); // { dg-error "expected string-literal before" }
+ asm (1 : "=r" (i)); // { dg-error "expected string-literal before" }
+ asm (int : "=r" (i)); // { dg-error "expected string-literal before" }
+ asm (: : "r" (i)); // { dg-error "expected string-literal before" }
+ asm (1 : : "r" (i)); // { dg-error "expected string-literal before" }
+ asm (int : : "r" (i)); // { dg-error "expected string-literal before" }
+ asm (: : : "memory"); // { dg-error "expected string-literal before" }
+ asm (1 : : : "memory"); // { dg-error "expected string-literal before" }
+}
diff --git a/gcc/testsuite/gcc.dg/pr37772.c b/gcc/testsuite/gcc.dg/pr37772.c
new file mode 100644
index 00000000000..26051c7e834
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr37772.c
@@ -0,0 +1,20 @@
+/* PR c/37772 */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+void
+foo ()
+{
+ int i;
+ asm (); /* { dg-error "expected string literal before" } */
+ asm (1); /* { dg-error "expected string literal before" } */
+ asm (int); /* { dg-error "expected string literal before" } */
+ asm (: "=r" (i)); /* { dg-error "expected string literal before" } */
+ asm (1 : "=r" (i)); /* { dg-error "expected string literal before" } */
+ asm (int : "=r" (i)); /* { dg-error "expected string literal before" } */
+ asm (: : "r" (i)); /* { dg-error "expected string literal before" } */
+ asm (1 : : "r" (i)); /* { dg-error "expected string literal before" } */
+ asm (int : : "r" (i)); /* { dg-error "expected string literal before" } */
+ asm (: : : "memory"); /* { dg-error "expected string literal before" } */
+ asm (1 : : : "memory"); /* { dg-error "expected string literal before" } */
+}