Index: include/clang/Tooling/Core/Diagnostic.h =================================================================== --- include/clang/Tooling/Core/Diagnostic.h +++ include/clang/Tooling/Core/Diagnostic.h @@ -62,7 +62,7 @@ Diagnostic(llvm::StringRef DiagnosticName, const DiagnosticMessage &Message, const SmallVector &Notes, Level DiagLevel, - llvm::StringRef BuildDirectory); + llvm::StringRef BuildDirectory, ArrayRef Ranges); /// Name identifying the Diagnostic. std::string DiagnosticName; @@ -84,6 +84,10 @@ /// /// Note: it is empty in unittest. std::string BuildDirectory; + + /// Extra source ranges associated with the diagnostic (in addition to the + /// location of the Message above). + ArrayRef Ranges; }; /// Collection of Diagnostics generated from a single translation unit. Index: include/clang/Tooling/DiagnosticsYaml.h =================================================================== --- include/clang/Tooling/DiagnosticsYaml.h +++ include/clang/Tooling/DiagnosticsYaml.h @@ -58,11 +58,12 @@ NormalizedDiagnostic(const IO &, const clang::tooling::Diagnostic &D) : DiagnosticName(D.DiagnosticName), Message(D.Message), Notes(D.Notes), - DiagLevel(D.DiagLevel), BuildDirectory(D.BuildDirectory) {} + DiagLevel(D.DiagLevel), BuildDirectory(D.BuildDirectory), + Ranges(D.Ranges) {} clang::tooling::Diagnostic denormalize(const IO &) { return clang::tooling::Diagnostic(DiagnosticName, Message, Notes, - DiagLevel, BuildDirectory); + DiagLevel, BuildDirectory, Ranges); } std::string DiagnosticName; @@ -71,6 +72,7 @@ SmallVector Notes; clang::tooling::Diagnostic::Level DiagLevel; std::string BuildDirectory; + ArrayRef Ranges; }; static void mapping(IO &Io, clang::tooling::Diagnostic &D) { Index: lib/Tooling/Core/Diagnostic.cpp =================================================================== --- lib/Tooling/Core/Diagnostic.cpp +++ lib/Tooling/Core/Diagnostic.cpp @@ -42,9 +42,10 @@ Diagnostic::Diagnostic(llvm::StringRef DiagnosticName, const DiagnosticMessage &Message, const SmallVector &Notes, - Level DiagLevel, llvm::StringRef BuildDirectory) + Level DiagLevel, llvm::StringRef BuildDirectory, + ArrayRef Ranges) : DiagnosticName(DiagnosticName), Message(Message), Notes(Notes), - DiagLevel(DiagLevel), BuildDirectory(BuildDirectory) {} + DiagLevel(DiagLevel), BuildDirectory(BuildDirectory), Ranges(Ranges) {} const llvm::StringMap *selectFirstFix(const Diagnostic& D) { if (!D.Message.Fix.empty())