- Changed PathDiagnosticPiece::getLocation() to return a PathDiagnosticLocation
instead of a FullSourceLoc. This resulted in a bunch of small edits in various
clients.
- Updated BugReporter to include an alternate PathDiagnostic generation
algorithm for PathDiagnosticClients desiring more control-flow pieces.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68193 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Frontend/PlistDiagnostics.cpp b/lib/Frontend/PlistDiagnostics.cpp
index 0c146e5..75fad19 100644
--- a/lib/Frontend/PlistDiagnostics.cpp
+++ b/lib/Frontend/PlistDiagnostics.cpp
@@ -40,7 +40,7 @@
~PlistDiagnostics();
void HandlePathDiagnostic(const PathDiagnostic* D);
- PathGenerationScheme getGenerationScheme() const { return Extensive; }
+ PathGenerationScheme getGenerationScheme() const { return Minimal; }
bool supportsLogicalOpControlFlow() const { return true; }
bool supportsAllBlockEdges() const { return true; }
};
@@ -56,7 +56,7 @@
}
static void AddFID(FIDMap &FIDs, llvm::SmallVectorImpl<FileID> &V,
- SourceManager* SM, SourceLocation L) {
+ const SourceManager* SM, SourceLocation L) {
FileID FID = SM->getFileID(SM->getInstantiationLoc(L));
FIDMap::iterator I = FIDs.find(FID);
@@ -65,7 +65,8 @@
V.push_back(FID);
}
-static unsigned GetFID(const FIDMap& FIDs, SourceManager* SM, SourceLocation L){
+static unsigned GetFID(const FIDMap& FIDs, const SourceManager* SM,
+ SourceLocation L) {
FileID FID = SM->getFileID(SM->getInstantiationLoc(L));
FIDMap::const_iterator I = FIDs.find(FID);
assert(I != FIDs.end());
@@ -77,7 +78,7 @@
return o;
}
-static void EmitLocation(llvm::raw_ostream& o, SourceManager* SM,
+static void EmitLocation(llvm::raw_ostream& o, const SourceManager* SM,
SourceLocation L, const FIDMap& FM,
const unsigned indent) {
@@ -91,8 +92,15 @@
Indent(o, indent) << "</dict>\n";
}
-static void EmitRange(llvm::raw_ostream& o, SourceManager* SM, SourceRange R,
- const FIDMap& FM, const unsigned indent) {
+static void EmitLocation(llvm::raw_ostream& o, const SourceManager* SM,
+ const PathDiagnosticLocation &L, const FIDMap& FM,
+ const unsigned indent) {
+ EmitLocation(o, SM, L.asLocation(), FM, indent);
+}
+
+static void EmitRange(llvm::raw_ostream& o, const SourceManager* SM,
+ SourceRange R, const FIDMap& FM,
+ const unsigned indent) {
Indent(o, indent) << "<array>\n";
EmitLocation(o, SM, R.getBegin(), FM, indent+1);
@@ -120,7 +128,7 @@
static void ReportControlFlow(llvm::raw_ostream& o,
const PathDiagnosticControlFlowPiece& P,
- const FIDMap& FM, SourceManager *SM,
+ const FIDMap& FM, const SourceManager *SM,
unsigned indent) {
Indent(o, indent) << "<dict>\n";
@@ -167,7 +175,8 @@
}
static void ReportEvent(llvm::raw_ostream& o, const PathDiagnosticPiece& P,
- const FIDMap& FM, SourceManager* SM, unsigned indent) {
+ const FIDMap& FM, const SourceManager* SM,
+ unsigned indent) {
Indent(o, indent) << "<dict>\n";
++indent;
@@ -175,7 +184,7 @@
Indent(o, indent) << "<key>kind</key><string>event</string>\n";
// Output the location.
- FullSourceLoc L = P.getLocation();
+ FullSourceLoc L = P.getLocation().asLocation();
Indent(o, indent) << "<key>location</key>\n";
EmitLocation(o, SM, L, FM, indent);
@@ -211,7 +220,7 @@
static void ReportMacro(llvm::raw_ostream& o,
const PathDiagnosticMacroPiece& P,
- const FIDMap& FM, SourceManager *SM,
+ const FIDMap& FM, const SourceManager *SM,
unsigned indent) {
for (PathDiagnosticMacroPiece::const_iterator I=P.begin(), E=P.end();
@@ -231,7 +240,7 @@
}
static void ReportDiag(llvm::raw_ostream& o, const PathDiagnosticPiece& P,
- const FIDMap& FM, SourceManager* SM) {
+ const FIDMap& FM, const SourceManager* SM) {
unsigned indent = 4;
@@ -267,7 +276,7 @@
// ranges of the diagnostics.
FIDMap FM;
llvm::SmallVector<FileID, 10> Fids;
- SourceManager* SM = 0;
+ const SourceManager* SM = 0;
if (!BatchedDiags.empty())
SM = &(*BatchedDiags.begin())->begin()->getLocation().getManager();
@@ -278,7 +287,7 @@
const PathDiagnostic *D = *DI;
for (PathDiagnostic::const_iterator I=D->begin(), E=D->end(); I!=E; ++I) {
- AddFID(FM, Fids, SM, I->getLocation());
+ AddFID(FM, Fids, SM, I->getLocation().asLocation());
for (PathDiagnosticPiece::range_iterator RI=I->ranges_begin(),
RE=I->ranges_end(); RI!=RE; ++RI) {