Skip to content

Commit 9bbb019

Browse files
authored
Merge pull request #35673 from gottesmm/pr-ec4c368db157ffcc3b948ed3c7cfb5b5dd03117a
[ast] Fix a memory error in Diagnostic Emission.
2 parents 9aed7ce + 4c9e1b6 commit 9bbb019

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

lib/AST/DiagnosticEngine.cpp

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1062,18 +1062,21 @@ DiagnosticEngine::diagnosticInfoForDiagnostic(const Diagnostic &diagnostic) {
10621062
void DiagnosticEngine::emitDiagnostic(const Diagnostic &diagnostic) {
10631063
if (auto info = diagnosticInfoForDiagnostic(diagnostic)) {
10641064
SmallVector<DiagnosticInfo, 1> childInfo;
1065-
TinyPtrVector<DiagnosticInfo *> childInfoPtrs;
10661065
auto childNotes = diagnostic.getChildNotes();
1067-
for (unsigned idx = 0; idx < childNotes.size(); ++idx) {
1068-
if (auto child = diagnosticInfoForDiagnostic(childNotes[idx])) {
1069-
childInfo.push_back(*child);
1070-
childInfoPtrs.push_back(&childInfo[idx]);
1071-
}
1066+
for (unsigned i : indices(childNotes)) {
1067+
auto child = diagnosticInfoForDiagnostic(childNotes[i]);
1068+
assert(child);
1069+
assert(child->Kind == DiagnosticKind::Note &&
1070+
"Expected child diagnostics to all be notes?!");
1071+
childInfo.push_back(*child);
1072+
}
1073+
TinyPtrVector<DiagnosticInfo *> childInfoPtrs;
1074+
for (unsigned i : indices(childInfo)) {
1075+
childInfoPtrs.push_back(&childInfo[i]);
10721076
}
10731077
info->ChildDiagnosticInfo = childInfoPtrs;
1074-
1075-
SmallVector<std::string, 1> educationalNotePaths;
10761078

1079+
SmallVector<std::string, 1> educationalNotePaths;
10771080
auto associatedNotes = educationalNotes[(uint32_t)diagnostic.getID()];
10781081
while (associatedNotes && *associatedNotes) {
10791082
SmallString<128> notePath(getDiagnosticDocumentationPath());

0 commit comments

Comments
 (0)