diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2010-07-22 07:11:21 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2010-07-22 07:11:21 +0000 |
commit | 3c31aa3a4412eceb7818f3b63910c3e1396c50e4 (patch) | |
tree | 9b4cfb0fc64798eaf0a3f034ed76f0cde97b25c9 | |
parent | 96f2e9e418b969e8f7376830eebb8e41ca2da3f6 (diff) | |
download | bcm5719-llvm-3c31aa3a4412eceb7818f3b63910c3e1396c50e4.tar.gz bcm5719-llvm-3c31aa3a4412eceb7818f3b63910c3e1396c50e4.zip |
Fix PR7673 by allowing an empty clobbers section in an ASM statement.
llvm-svn: 109087
-rw-r--r-- | clang/lib/Parse/ParseStmt.cpp | 18 | ||||
-rw-r--r-- | clang/test/Parser/asm.c | 3 |
2 files changed, 12 insertions, 9 deletions
diff --git a/clang/lib/Parse/ParseStmt.cpp b/clang/lib/Parse/ParseStmt.cpp index c908ed9caec..baf8488e741 100644 --- a/clang/lib/Parse/ParseStmt.cpp +++ b/clang/lib/Parse/ParseStmt.cpp @@ -1367,17 +1367,19 @@ Parser::OwningStmtResult Parser::ParseAsmStatement(bool &msAsm) { if (!AteExtraColon) ConsumeToken(); - // Parse the asm-string list for clobbers. - while (1) { - OwningExprResult Clobber(ParseAsmStringLiteral()); + // Parse the asm-string list for clobbers if present. + if (Tok.isNot(tok::r_paren)) { + while (1) { + OwningExprResult Clobber(ParseAsmStringLiteral()); - if (Clobber.isInvalid()) - break; + if (Clobber.isInvalid()) + break; - Clobbers.push_back(Clobber.release()); + Clobbers.push_back(Clobber.release()); - if (Tok.isNot(tok::comma)) break; - ConsumeToken(); + if (Tok.isNot(tok::comma)) break; + ConsumeToken(); + } } } diff --git a/clang/test/Parser/asm.c b/clang/test/Parser/asm.c index df2e16feea5..90818261513 100644 --- a/clang/test/Parser/asm.c +++ b/clang/test/Parser/asm.c @@ -1,7 +1,8 @@ // RUN: %clang_cc1 -fsyntax-only -verify %s void f1() { - asm ("ret" : : :); // expected-error {{expected string literal}} + // PR7673: Some versions of GCC support an empty clobbers section. + asm ("ret" : : :); } void f2() { |