]> granicus.if.org Git - clang/commitdiff
[ms-inline asm] Address a FIXME by computing the number of asm statements when
authorChad Rosier <mcrosier@apple.com>
Wed, 15 Aug 2012 21:08:52 +0000 (21:08 +0000)
committerChad Rosier <mcrosier@apple.com>
Wed, 15 Aug 2012 21:08:52 +0000 (21:08 +0000)
building the AsmString.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@161988 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaStmt.cpp

index 2aabd9ee79fe27132067ae13464184b1ed04f946..f2fd7e5312283fab40c214580fe3ccddf3501449 100644 (file)
@@ -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(),