From 2ff0f42a962fec5a6300b5986297b417db173e6a Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 10 Mar 2009 23:57:07 +0000 Subject: [PATCH] position the caret properly on asm string diagnostics, e.g.: 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 | 2 +- lib/Sema/SemaStmt.cpp | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/AST/Stmt.cpp b/lib/AST/Stmt.cpp index 6fa4033088..8062884d7e 100644 --- a/lib/AST/Stmt.cpp +++ b/lib/AST/Stmt.cpp @@ -288,7 +288,7 @@ unsigned AsmStmt::AnalyzeAsmString(llvm::SmallVectorImpl&Pieces, continue; } - DiagOffs = CurPtr-StrStart; + DiagOffs = CurPtr-StrStart-1; return diag::err_asm_invalid_escape; } } diff --git a/lib/Sema/SemaStmt.cpp b/lib/Sema/SemaStmt.cpp index 55f556444d..32d295772c 100644 --- a/lib/Sema/SemaStmt.cpp +++ b/lib/Sema/SemaStmt.cpp @@ -967,9 +967,8 @@ Sema::OwningStmtResult Sema::ActOnAsmStmt(SourceLocation AsmLoc, llvm::SmallVector 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(); } -- 2.40.0