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 | 712faa2708f8f0de8cdee9c7d5437e8818f0d134 (patch) | |
tree | 4b7d48314f80c317917ea4d83f264694049f04dc /clang/lib/Sema/SemaStmt.cpp | |
parent | e9753b06401bc00694c496a569352db1276f1bb1 (diff) | |
download | bcm5719-llvm-712faa2708f8f0de8cdee9c7d5437e8818f0d134.tar.gz bcm5719-llvm-712faa2708f8f0de8cdee9c7d5437e8818f0d134.zip |
[ms-inline asm] Address a FIXME by computing the number of asm statements when
building the AsmString.
llvm-svn: 161988
Diffstat (limited to 'clang/lib/Sema/SemaStmt.cpp')
-rw-r--r-- | clang/lib/Sema/SemaStmt.cpp | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp index 2aabd9ee79f..f2fd7e53122 100644 --- a/clang/lib/Sema/SemaStmt.cpp +++ b/clang/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(), |