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();