diff options
author | Chad Rosier <mcrosier@apple.com> | 2012-08-15 21:08:52 +0000 |
---|---|---|
committer | Chad Rosier <mcrosier@apple.com> | 2012-08-15 21:08:52 +0000 |
commit | bec224b33b383c993d127ef7f618ce27df7105e6 (patch) | |
tree | 2c3e044a78aef0f05de058628dc038f1048791dc /lib/Sema/SemaStmt.cpp | |
parent | da29ac527063fc9714547088bf841bfa30557bf0 (diff) |
[ms-inline asm] Address a FIXME by computing the number of asm statements when
building the AsmString.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@161988 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaStmt.cpp')
-rw-r--r-- | lib/Sema/SemaStmt.cpp | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/lib/Sema/SemaStmt.cpp b/lib/Sema/SemaStmt.cpp index 2aabd9ee79..f2fd7e5312 100644 --- a/lib/Sema/SemaStmt.cpp +++ b/lib/Sema/SemaStmt.cpp @@ -2840,17 +2840,20 @@ static void patchMSAsmStrings(Sema &SemaRef, bool &IsSimple, // Build the unmodified MSAsmString. static std::string buildMSAsmString(Sema &SemaRef, - ArrayRef<Token> AsmToks) { + ArrayRef<Token> AsmToks, + unsigned &NumAsmStrings) { assert (!AsmToks.empty() && "Didn't expect an empty AsmToks!"); SmallString<512> Asm; SmallString<512> TokenBuf; TokenBuf.resize(512); + NumAsmStrings = 0; for (unsigned i = 0, e = AsmToks.size(); i < e; ++i) { bool isNewAsm = i == 0 || AsmToks[i].isAtStartOfLine() || AsmToks[i].is(tok::kw_asm); if (isNewAsm) { + ++NumAsmStrings; if (i) Asm += '\n'; if (AsmToks[i].is(tok::kw_asm)) { @@ -2889,18 +2892,12 @@ StmtResult Sema::ActOnMSAsmStmt(SourceLocation AsmLoc, return Owned(NS); } - std::string AsmString = buildMSAsmString(*this, AsmToks); + unsigned NumAsmStrings; + std::string AsmString = buildMSAsmString(*this, AsmToks, NumAsmStrings); bool IsSimple; std::vector<std::string> PatchedAsmStrings; - - // FIXME: Count this while parsing. - unsigned NumAsmStrings = 0; - for (unsigned i = 0, e = AsmToks.size(); i != e; ++i) - if (i == 0 || AsmToks[i].isAtStartOfLine() || AsmToks[i].is(tok::kw_asm)) - ++NumAsmStrings; - - PatchedAsmStrings.resize(NumAsmStrings ? NumAsmStrings : 1); + PatchedAsmStrings.resize(NumAsmStrings); // Rewrite operands to appease the AsmParser. patchMSAsmStrings(*this, IsSimple, AsmLoc, AsmToks, Context.getTargetInfo(), |