sink a call to getInstantiationLoc to eliminate an assertion.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@64755 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Driver/TextDiagnosticPrinter.cpp b/lib/Driver/TextDiagnosticPrinter.cpp
index 6421435..c6a8a23 100644
--- a/lib/Driver/TextDiagnosticPrinter.cpp
+++ b/lib/Driver/TextDiagnosticPrinter.cpp
@@ -104,7 +104,9 @@
void TextDiagnosticPrinter::EmitCaretDiagnostic(const DiagnosticInfo &Info,
SourceLocation Loc,
SourceManager &SM) {
- assert(Loc.isFileID() && "Shouldn't have instantiation locs here");
+ // We always emit diagnostics about the instantiation points, not the spelling
+ // points. This more closely correlates to what the user writes.
+ Loc = SM.getInstantiationLoc(Loc);
// Decompose the location into a FID/Offset pair.
std::pair<FileID, unsigned> LocInfo = SM.getDecomposedLoc(Loc);
@@ -228,10 +230,9 @@
// Cache the LastLoc, it allows us to omit duplicate source/caret spewage.
LastLoc = Info.getLocation();
- // Inspect the actual instantiation point of the diagnostic, we don't care
+ // Inspect the actual source location of the diagnostic, we don't care
// about presumed locations anymore.
- FullSourceLoc ILoc = Info.getLocation().getInstantiationLoc();
- EmitCaretDiagnostic(Info, ILoc, ILoc.getManager());
+ EmitCaretDiagnostic(Info, LastLoc, LastLoc.getManager());
}
OS.flush();