diff options
-rw-r--r-- | lib/Parse/ParseStmt.cpp | 5 | ||||
-rw-r--r-- | test/Parser/ms-inline-asm.c | 6 |
2 files changed, 11 insertions, 0 deletions
diff --git a/lib/Parse/ParseStmt.cpp b/lib/Parse/ParseStmt.cpp index dd5ccc2f5d..af7d538adb 100644 --- a/lib/Parse/ParseStmt.cpp +++ b/lib/Parse/ParseStmt.cpp @@ -1710,6 +1710,11 @@ StmtResult Parser::ParseMicrosoftAsmStatement(SourceLocation AsmLoc) { if (Tok.is(tok::eof)) break; + // The asm keyword is a statement separator, so multiple asm statements + // are allowed. + if (!InAsmComment && Tok.is(tok::kw_asm)) + break; + if (!InAsmComment && Tok.is(tok::semi)) { // A semicolon in an asm is the start of a comment. InAsmComment = true; diff --git a/test/Parser/ms-inline-asm.c b/test/Parser/ms-inline-asm.c index 3a1efb0984..1c8c881dec 100644 --- a/test/Parser/ms-inline-asm.c +++ b/test/Parser/ms-inline-asm.c @@ -27,6 +27,12 @@ int t7() { pop ebx } } +void t8() { + __asm nop __asm nop __asm nop +} +void t9() { + __asm nop __asm nop ; __asm nop +} int t_fail() { // expected-note {{to match this}} __asm __asm { // expected-error 3 {{expected}} expected-note {{to match this}} |