================
@@ -390,76 +390,95 @@ buildInputAnnotations(const SourceMgr &SM, unsigned
CheckFileBufferID,
// How many diagnostics does each pattern have?
std::map<SMLoc, unsigned, CompareSMLoc> DiagCountPerPattern;
for (const FileCheckDiag &Diag : Diags)
- ++DiagCountPerPattern[Diag.CheckLoc];
+ ++DiagCountPerPattern[Diag.getMatchResultDiag().getCheckLoc()];
// How many diagnostics have we seen so far per pattern?
std::map<SMLoc, unsigned, CompareSMLoc> DiagIndexPerPattern;
// How many total diagnostics have we seen so far?
unsigned DiagIndex = 0;
// What's the widest label?
LabelWidth = 0;
+ // The label prefix that uniquely identifies the current MatchResultDiag and
+ // its MatchNoteDiag series.
+ std::string CurLabelPrefix;
for (const FileCheckDiag &Diag : Diags) {
InputAnnotation A;
A.DiagIndex = DiagIndex++;
+ if (const MatchResultDiag *MRD = dyn_cast<MatchResultDiag>(&Diag)) {
+ CurLabelPrefix.clear();
+ llvm::raw_string_ostream LabelStrm(CurLabelPrefix);
+ LabelStrm << GetCheckTypeAbbreviation(MRD->getCheckTy()) << ":";
+ unsigned CheckBufferID = SM.FindBufferContainingLoc(MRD->getCheckLoc());
+ if (CheckBufferID == CheckFileBufferID)
+ LabelStrm
+ << SM.getLineAndColumn(MRD->getCheckLoc(), CheckBufferID).first;
+ else if (ImpPatBufferIDRange.first <= CheckBufferID &&
+ CheckBufferID < ImpPatBufferIDRange.second)
+ LabelStrm << "imp" << (CheckBufferID - ImpPatBufferIDRange.first + 1);
+ else
+ llvm_unreachable("expected diagnostic's check location to be either in
"
+ "the check file or for an implicit pattern");
+ }
- // Build label, which uniquely identifies this check result.
- unsigned CheckBufferID = SM.FindBufferContainingLoc(Diag.CheckLoc);
- auto CheckLineAndCol = SM.getLineAndColumn(Diag.CheckLoc, CheckBufferID);
- llvm::raw_string_ostream Label(A.Label);
- Label << GetCheckTypeAbbreviation(Diag.CheckTy) << ":";
- if (CheckBufferID == CheckFileBufferID)
- Label << CheckLineAndCol.first;
- else if (ImpPatBufferIDRange.first <= CheckBufferID &&
- CheckBufferID < ImpPatBufferIDRange.second)
- Label << "imp" << (CheckBufferID - ImpPatBufferIDRange.first + 1);
- else
- llvm_unreachable("expected diagnostic's check location to be either in "
- "the check file or for an implicit pattern");
- if (DiagCountPerPattern[Diag.CheckLoc] > 1)
- Label << "'" << DiagIndexPerPattern[Diag.CheckLoc]++;
+ // Build label that uniquely identifies this FileCheckDiag.
+ llvm::raw_string_ostream LabelStrm(A.Label);
+ LabelStrm << CurLabelPrefix;
+ if (DiagCountPerPattern[Diag.getMatchResultDiag().getCheckLoc()] > 1)
+ LabelStrm
+ << "'"
+ << DiagIndexPerPattern[Diag.getMatchResultDiag().getCheckLoc()]++;
LabelWidth = std::max((std::string::size_type)LabelWidth, A.Label.size());
- A.Marker = GetMarker(Diag.MatchTy);
- if (!Diag.Note.empty()) {
- A.Marker.Note = Diag.Note;
- // It's less confusing if notes that don't actually have ranges don't
have
- // markers. For example, a marker for 'with "VAR" equal to "5"' would
- // seem to indicate where "VAR" matches, but the location we actually
have
- // for the marker simply points to the start of the match/search range
for
- // the full pattern of which the substitution is potentially just one
- // component.
- if (Diag.InputStartLine == Diag.InputEndLine &&
- Diag.InputStartCol == Diag.InputEndCol)
- A.Marker.Lead = ' ';
+ A.Marker = GetMarker(Diag.getMatchType());
+ std::optional<StringRef> CustomNote = std::nullopt;
----------------
MaskRay wrote:
`optional` defaults to `nullopt`. Why not just use `StringRef CustomNote`?
https://github.com/llvm/llvm-project/pull/195569
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits