summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2010-07-22 07:11:21 +0000
committerChandler Carruth <chandlerc@gmail.com>2010-07-22 07:11:21 +0000
commit3c31aa3a4412eceb7818f3b63910c3e1396c50e4 (patch)
tree9b4cfb0fc64798eaf0a3f034ed76f0cde97b25c9
parent96f2e9e418b969e8f7376830eebb8e41ca2da3f6 (diff)
downloadbcm5719-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.cpp18
-rw-r--r--clang/test/Parser/asm.c3
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() {
OpenPOWER on IntegriCloud