]> granicus.if.org Git - clang/commitdiff
position the caret properly on asm string diagnostics, e.g.:
authorChris Lattner <sabre@nondot.org>
Tue, 10 Mar 2009 23:57:07 +0000 (23:57 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 10 Mar 2009 23:57:07 +0000 (23:57 +0000)
Sema/asm.c:64:9: error: invalid % escape in inline assembly string
  asm("%!" : );   // expected-error {{invalid % escape in inline assembly string}}
      ~~^~

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

lib/AST/Stmt.cpp
lib/Sema/SemaStmt.cpp

index 6fa4033088958f0f081a3dedc21fbafc9d517bc9..8062884d7ea4f357afa4dffed620ec64ecbeca37 100644 (file)
@@ -288,7 +288,7 @@ unsigned AsmStmt::AnalyzeAsmString(llvm::SmallVectorImpl<AsmStringPiece>&Pieces,
       continue;
     }
     
-    DiagOffs = CurPtr-StrStart;
+    DiagOffs = CurPtr-StrStart-1;
     return diag::err_asm_invalid_escape;
   }
 }
index 55f556444dc8388480cfaa72718c3c5b69c9c8b1..32d295772cd949d7d398d7fc803f805d83f0c3e8 100644 (file)
@@ -967,9 +967,8 @@ Sema::OwningStmtResult Sema::ActOnAsmStmt(SourceLocation AsmLoc,
   llvm::SmallVector<AsmStmt::AsmStringPiece, 8> Pieces;
   unsigned DiagOffs;
   if (unsigned DiagID = NS->AnalyzeAsmString(Pieces, Context, DiagOffs)) {
-    // FIXME: get offsets in strings working.
-    // StringLiteralParser::getOffsetOfStringByte
-    Diag(AsmString->getLocStart(), DiagID) << AsmString->getSourceRange();
+    Diag(getLocationOfStringLiteralByte(AsmString, DiagOffs), DiagID)
+           << AsmString->getSourceRange();
     DeleteStmt(NS);
     return StmtError();
   }