[cfe-commits] r169367 - /cfe/trunk/lib/Frontend/DiagnosticRenderer.cpp
Richard Smith
richard-llvm at metafoo.co.uk
Wed Dec 5 01:47:49 PST 2012
Author: rsmith
Date: Wed Dec 5 03:47:49 2012
New Revision: 169367
URL: http://llvm.org/viewvc/llvm-project?rev=169367&view=rev
Log:
Minor reorganization. No functionality change.
Modified:
cfe/trunk/lib/Frontend/DiagnosticRenderer.cpp
Modified: cfe/trunk/lib/Frontend/DiagnosticRenderer.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/DiagnosticRenderer.cpp?rev=169367&r1=169366&r2=169367&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/DiagnosticRenderer.cpp (original)
+++ cfe/trunk/lib/Frontend/DiagnosticRenderer.cpp Wed Dec 5 03:47:49 2012
@@ -123,32 +123,17 @@
const SourceManager *SM,
DiagOrStoredDiag D) {
assert(SM || Loc.isInvalid());
-
+
beginDiagnostic(D, Level);
-
- SourceLocation ExpandedLoc = Loc;
- PresumedLoc PLoc;
- if (Loc.isValid()) {
- // Perform the same walk as emitMacroExpansions, to find the ultimate
- // expansion location for the diagnostic.
- while (ExpandedLoc.isMacroID())
- ExpandedLoc = SM->getImmediateMacroCallerLoc(ExpandedLoc);
- PLoc = SM->getPresumedLoc(ExpandedLoc, DiagOpts->ShowPresumedLoc);
-
- // First, if this diagnostic is not in the main file, print out the
- // "included from" lines.
- emitIncludeStack(ExpandedLoc, PLoc, Level, *SM);
- }
-
- // Next, emit the actual diagnostic message.
- emitDiagnosticMessage(ExpandedLoc, PLoc, Level, Message, Ranges, SM, D);
-
- // Only recurse if we have a valid location.
- if (Loc.isValid()) {
+
+ if (!Loc.isValid())
+ // If we have no source location, just emit the diagnostic message.
+ emitDiagnosticMessage(Loc, PresumedLoc(), Level, Message, Ranges, SM, D);
+ else {
// Get the ranges into a local array we can hack on.
SmallVector<CharSourceRange, 20> MutableRanges(Ranges.begin(),
Ranges.end());
-
+
llvm::SmallVector<FixItHint, 8> MergedFixits;
if (!FixItHints.empty()) {
mergeFixits(FixItHints, *SM, LangOpts, MergedFixits);
@@ -161,20 +146,35 @@
if (I->RemoveRange.isValid())
MutableRanges.push_back(I->RemoveRange);
- emitCaret(ExpandedLoc, Level, MutableRanges, FixItHints, *SM);
+ SourceLocation UnexpandedLoc = Loc;
+
+ // Perform the same walk as emitMacroExpansions, to find the ultimate
+ // expansion location for the diagnostic.
+ while (Loc.isMacroID())
+ Loc = SM->getImmediateMacroCallerLoc(Loc);
+
+ PresumedLoc PLoc = SM->getPresumedLoc(Loc, DiagOpts->ShowPresumedLoc);
+
+ // First, if this diagnostic is not in the main file, print out the
+ // "included from" lines.
+ emitIncludeStack(Loc, PLoc, Level, *SM);
- // If this location is within a macro, walk from the unexpanded location
- // up to ExpandedLoc and produce a macro backtrace.
- if (Loc.isMacroID()) {
+ // Next, emit the actual diagnostic message and caret.
+ emitDiagnosticMessage(Loc, PLoc, Level, Message, Ranges, SM, D);
+ emitCaret(Loc, Level, MutableRanges, FixItHints, *SM);
+
+ // If this location is within a macro, walk from UnexpandedLoc up to Loc
+ // and produce a macro backtrace.
+ if (UnexpandedLoc.isValid() && UnexpandedLoc.isMacroID()) {
unsigned MacroDepth = 0;
- emitMacroExpansions(Loc, Level, MutableRanges, FixItHints, *SM,
+ emitMacroExpansions(UnexpandedLoc, Level, MutableRanges, FixItHints, *SM,
MacroDepth);
}
}
-
+
LastLoc = Loc;
LastLevel = Level;
-
+
endDiagnostic(D, Level);
}
@@ -314,7 +314,7 @@
static void mapDiagnosticRanges(
SourceLocation CaretLoc,
ArrayRef<CharSourceRange> Ranges,
- SmallVectorImpl<CharSourceRange>& SpellingRanges,
+ SmallVectorImpl<CharSourceRange> &SpellingRanges,
const SourceManager *SM) {
FileID CaretLocFileID = SM->getFileID(CaretLoc);
More information about the cfe-commits
mailing list