Index: lib/Parse/ParseStmtAsm.cpp |
diff --git a/lib/Parse/ParseStmtAsm.cpp b/lib/Parse/ParseStmtAsm.cpp |
index 85eff1712d26966fc2a5c99cc329a6f0d12df589..8ba9f15f0a40dde6aca0c1ba151db044a9b66f15 100644 |
--- a/lib/Parse/ParseStmtAsm.cpp |
+++ b/lib/Parse/ParseStmtAsm.cpp |
@@ -616,10 +616,6 @@ StmtResult Parser::ParseAsmStatement(bool &msAsm) { |
return ParseMicrosoftAsmStatement(AsmLoc); |
} |
- // Check if GNU-style inline Asm is disabled. |
- if (!getLangOpts().GNUAsm) |
- Diag(AsmLoc, diag::err_gnu_inline_asm_disabled); |
- |
DeclSpec DS(AttrFactory); |
SourceLocation Loc = Tok.getLocation(); |
ParseTypeQualifierListOpt(DS, AR_VendorAttributesParsed); |
@@ -644,6 +640,15 @@ StmtResult Parser::ParseAsmStatement(bool &msAsm) { |
T.consumeOpen(); |
ExprResult AsmString(ParseAsmStringLiteral()); |
+ |
+ // Check if GNU-style InlineAsm is disabled. |
+ // Error on anything other than empty string. |
+ if (!(getLangOpts().GNUAsm || AsmString.isInvalid())) { |
+ const auto *SL = cast<StringLiteral>(AsmString.get()); |
+ if (!SL->getString().trim().empty()) |
+ Diag(Loc, diag::err_gnu_inline_asm_disabled); |
+ } |
+ |
if (AsmString.isInvalid()) { |
// Consume up to and including the closing paren. |
T.skipToEnd(); |