summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaStmt.cpp
diff options
context:
space:
mode:
authorChad Rosier <mcrosier@apple.com>2012-08-15 21:08:52 +0000
committerChad Rosier <mcrosier@apple.com>2012-08-15 21:08:52 +0000
commit712faa2708f8f0de8cdee9c7d5437e8818f0d134 (patch)
tree4b7d48314f80c317917ea4d83f264694049f04dc /clang/lib/Sema/SemaStmt.cpp
parente9753b06401bc00694c496a569352db1276f1bb1 (diff)
downloadbcm5719-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.cpp17
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(),
OpenPOWER on IntegriCloud