diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2011-10-16 10:48:28 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2011-10-16 10:48:28 +0000 |
commit | 96fda0c4a7bb5502d82791f361997471c173b909 (patch) | |
tree | 3667f5a523c704bb1548c480805f86279987a87d /lib/CodeGen/CodeGenAction.cpp | |
parent | 176d1d7c576aeb35e6e5db1783694e925b117297 (diff) |
Convert inline asm source ranges into clang SourceRanges and print them with the instantiated note.
t.c:2:7: error: invalid operand for instruction
asm("movl 0(%rax), 0(%edx)");
^
<inline asm>:1:16: note: instantiated into assembly here
movl 0(%rax), 0(%edx)
^~~~~~~
1 error generated.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@142131 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CodeGenAction.cpp')
-rw-r--r-- | lib/CodeGen/CodeGenAction.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/lib/CodeGen/CodeGenAction.cpp b/lib/CodeGen/CodeGenAction.cpp index 68dd5c94dc..11d6075582 100644 --- a/lib/CodeGen/CodeGenAction.cpp +++ b/lib/CodeGen/CodeGenAction.cpp @@ -215,8 +215,17 @@ void BackendConsumer::InlineAsmDiagHandler2(const llvm::SMDiagnostic &D, if (LocCookie.isValid()) { Diags.Report(LocCookie, diag::err_fe_inline_asm).AddString(Message); - if (D.getLoc().isValid()) - Diags.Report(Loc, diag::note_fe_inline_asm_here); + if (D.getLoc().isValid()) { + DiagnosticBuilder B = Diags.Report(Loc, diag::note_fe_inline_asm_here); + // Convert the SMDiagnostic ranges into SourceRange and attach them + // to the diagnostic. + for (unsigned i = 0, e = D.getRanges().size(); i != e; ++i) { + std::pair<unsigned, unsigned> Range = D.getRanges()[i]; + unsigned Column = D.getColumnNo(); + B << SourceRange(Loc.getLocWithOffset(Range.first - Column), + Loc.getLocWithOffset(Range.second - Column)); + } + } return; } |