diff options
author | Jakub Jelinek <jakub@redhat.com> | 2009-04-01 13:45:14 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2009-04-01 13:45:14 +0000 |
commit | 0b4557a878f9e9266231d8820605fe756bd707e4 (patch) | |
tree | e21e24469f7f4ee4ef13210aa45c8f8c78a2eaa9 | |
parent | 5c52956b86ca3e77b0e9b5a9204c98210dec5730 (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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/c-parser.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/asm11.C | 20 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr37772.c | 20 |
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" } */ +} |