summaryrefslogtreecommitdiffstats
path: root/clang/lib/Parse/ParseStmtAsm.cpp
diff options
context:
space:
mode:
authorErich Keane <erich.keane@intel.com>2019-05-30 15:38:02 +0000
committerErich Keane <erich.keane@intel.com>2019-05-30 15:38:02 +0000
commitd0f34fd19850c79f8741301c3bfe0312ca24324c (patch)
treed11a14843235915243dc65478eb97f80753ceb8c /clang/lib/Parse/ParseStmtAsm.cpp
parente6ddde57e27e03054fd0a7cd627ce7917559a690 (diff)
downloadbcm5719-llvm-d0f34fd19850c79f8741301c3bfe0312ca24324c.tar.gz
bcm5719-llvm-d0f34fd19850c79f8741301c3bfe0312ca24324c.zip
Revert "clang support gnu asm goto."
This reverts commit 954ec09aed4f2be04bb5f4e10dbb4ea8bd19ef9a. Reverting due to test failures as requested by Jennifer Yu. Conflicts: clang/test/CodeGen/asm-goto.c llvm-svn: 362106
Diffstat (limited to 'clang/lib/Parse/ParseStmtAsm.cpp')
-rw-r--r--clang/lib/Parse/ParseStmtAsm.cpp68
1 files changed, 10 insertions, 58 deletions
diff --git a/clang/lib/Parse/ParseStmtAsm.cpp b/clang/lib/Parse/ParseStmtAsm.cpp
index 75f3ac396e1..c63808a472b 100644
--- a/clang/lib/Parse/ParseStmtAsm.cpp
+++ b/clang/lib/Parse/ParseStmtAsm.cpp
@@ -710,12 +710,12 @@ StmtResult Parser::ParseAsmStatement(bool &msAsm) {
// Remember if this was a volatile asm.
bool isVolatile = DS.getTypeQualifiers() & DeclSpec::TQ_volatile;
- // Remember if this was a goto asm.
- bool isGotoAsm = false;
+ // TODO: support "asm goto" constructs (PR#9295).
if (Tok.is(tok::kw_goto)) {
- isGotoAsm = true;
- ConsumeToken();
+ Diag(Tok, diag::err_asm_goto_not_supported_yet);
+ SkipUntil(tok::r_paren, StopAtSemi);
+ return StmtError();
}
if (Tok.isNot(tok::l_paren)) {
@@ -753,8 +753,7 @@ StmtResult Parser::ParseAsmStatement(bool &msAsm) {
return Actions.ActOnGCCAsmStmt(AsmLoc, /*isSimple*/ true, isVolatile,
/*NumOutputs*/ 0, /*NumInputs*/ 0, nullptr,
Constraints, Exprs, AsmString.get(),
- Clobbers, /*NumLabels*/ 0,
- T.getCloseLocation());
+ Clobbers, T.getCloseLocation());
}
// Parse Outputs, if present.
@@ -764,12 +763,6 @@ StmtResult Parser::ParseAsmStatement(bool &msAsm) {
AteExtraColon = Tok.is(tok::coloncolon);
ConsumeToken();
- if (!AteExtraColon && isGotoAsm && Tok.isNot(tok::colon)) {
- Diag(Tok, diag::err_asm_goto_cannot_have_output);
- SkipUntil(tok::r_paren, StopAtSemi);
- return StmtError();
- }
-
if (!AteExtraColon && ParseAsmOperandsOpt(Names, Constraints, Exprs))
return StmtError();
}
@@ -796,15 +789,12 @@ StmtResult Parser::ParseAsmStatement(bool &msAsm) {
unsigned NumInputs = Names.size() - NumOutputs;
// Parse the clobbers, if present.
- if (AteExtraColon || Tok.is(tok::colon) || Tok.is(tok::coloncolon)) {
- if (AteExtraColon)
- AteExtraColon = false;
- else {
- AteExtraColon = Tok.is(tok::coloncolon);
+ if (AteExtraColon || Tok.is(tok::colon)) {
+ if (!AteExtraColon)
ConsumeToken();
- }
+
// Parse the asm-string list for clobbers if present.
- if (!AteExtraColon && isTokenStringLiteral()) {
+ if (Tok.isNot(tok::r_paren)) {
while (1) {
ExprResult Clobber(ParseAsmStringLiteral());
@@ -818,49 +808,11 @@ StmtResult Parser::ParseAsmStatement(bool &msAsm) {
}
}
}
- if (!isGotoAsm && (Tok.isNot(tok::r_paren) || AteExtraColon)) {
- Diag(Tok, diag::err_expected) << tok::r_paren;
- SkipUntil(tok::r_paren, StopAtSemi);
- return StmtError();
- }
-
- // Parse the goto label, if present.
- unsigned NumLabels = 0;
- if (AteExtraColon || Tok.is(tok::colon)) {
- if (!AteExtraColon)
- ConsumeToken();
- while (true) {
- if (Tok.isNot(tok::identifier)) {
- Diag(Tok, diag::err_expected) << tok::identifier;
- SkipUntil(tok::r_paren, StopAtSemi);
- return StmtError();
- }
- LabelDecl *LD = Actions.LookupOrCreateLabel(Tok.getIdentifierInfo(),
- Tok.getLocation());
- Names.push_back(Tok.getIdentifierInfo());
- if (!LD) {
- SkipUntil(tok::r_paren, StopAtSemi);
- return StmtError();
- }
- ExprResult Res =
- Actions.ActOnAddrLabel(Tok.getLocation(), Tok.getLocation(), LD);
- Exprs.push_back(Res.get());
- NumLabels++;
- ConsumeToken();
- if (!TryConsumeToken(tok::comma))
- break;
- }
- } else if (isGotoAsm) {
- Diag(Tok, diag::err_expected) << tok::colon;
- SkipUntil(tok::r_paren, StopAtSemi);
- return StmtError();
- }
T.consumeClose();
return Actions.ActOnGCCAsmStmt(
AsmLoc, false, isVolatile, NumOutputs, NumInputs, Names.data(),
- Constraints, Exprs, AsmString.get(), Clobbers, NumLabels,
- T.getCloseLocation());
+ Constraints, Exprs, AsmString.get(), Clobbers, T.getCloseLocation());
}
/// ParseAsmOperands - Parse the asm-operands production as used by
OpenPOWER on IntegriCloud