diff options
| author | Chris Lattner <sabre@nondot.org> | 2010-06-15 00:03:12 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2010-06-15 00:03:12 +0000 |
| commit | c7ed7ea390d03bb02c2f03a651b42781af2fa43a (patch) | |
| tree | 72f7a9b5a566f6126c43ff17bebf170fe9601204 /clang/lib/Frontend/CodeGenAction.cpp | |
| parent | 4f6e8deec4cbf0f80158d6d1f535093315f289cc (diff) | |
| download | bcm5719-llvm-c7ed7ea390d03bb02c2f03a651b42781af2fa43a.tar.gz bcm5719-llvm-c7ed7ea390d03bb02c2f03a651b42781af2fa43a.zip | |
fix the inline asm diagnostics to emit the error on the primary
source code location instead of on the note. Previously we generated:
<inline asm>:1:2: error: unrecognized instruction
barf
^
t.c:4:8: note: generated from here
asm ("barf");
^
Now we generate:
t.c:4:8: error: unrecognized instruction
asm ("barf");
^
<inline asm>:1:2: note: instantated into assembly here
barf
^
llvm-svn: 105978
Diffstat (limited to 'clang/lib/Frontend/CodeGenAction.cpp')
| -rw-r--r-- | clang/lib/Frontend/CodeGenAction.cpp | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/clang/lib/Frontend/CodeGenAction.cpp b/clang/lib/Frontend/CodeGenAction.cpp index 22b3bd416d8..dce9f3d2168 100644 --- a/clang/lib/Frontend/CodeGenAction.cpp +++ b/clang/lib/Frontend/CodeGenAction.cpp @@ -200,19 +200,28 @@ void BackendConsumer::InlineAsmDiagHandler2(const llvm::SMDiagnostic &D, if (Message.startswith("error: ")) Message = Message.substr(7); - // There are two cases: the SMDiagnostic could have a inline asm source - // location or it might not. If it does, translate the location. + // If the SMDiagnostic has an inline asm source location, translate it. FullSourceLoc Loc; if (D.getLoc() != SMLoc()) Loc = ConvertBackendLocation(D, Context->getSourceManager()); - Diags.Report(Loc, diag::err_fe_inline_asm).AddString(Message); + - // This could be a problem with no clang-level source location information. - // In this case, LocCookie is invalid. If there is source level information, - // print an "generated from" note. - if (LocCookie.isValid()) + // If this problem has clang-level source location information, report the + // issue as being an error in the source with a note showing the instantiated + // code. + if (LocCookie.isValid()) { Diags.Report(FullSourceLoc(LocCookie, Context->getSourceManager()), - diag::note_fe_inline_asm_here); + diag::err_fe_inline_asm).AddString(Message); + + if (D.getLoc().isValid()) + Diags.Report(Loc, diag::note_fe_inline_asm_here); + return; + } + + // Otherwise, report the backend error as occuring in the generated .s file. + // If Loc is invalid, we still need to report the error, it just gets no + // location info. + Diags.Report(Loc, diag::err_fe_inline_asm).AddString(Message); } // |

