Skip to content

Commit ed93685

Browse files
[ScanDependencies] Fix a memory leak in dependency graph
Fix a memory leak from #75134.
1 parent a3bf1fc commit ed93685

File tree

4 files changed

+9
-10
lines changed

4 files changed

+9
-10
lines changed

Diff for: lib/DependencyScan/DependencyScanJSON.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ static void
247247
writeMacroDependencies(llvm::raw_ostream &out,
248248
const swiftscan_macro_dependency_set_t *macro_deps,
249249
unsigned indentLevel, bool trailingComma) {
250-
if (macro_deps->count == 0)
250+
if (!macro_deps)
251251
return;
252252

253253
out.indent(indentLevel * 2);

Diff for: lib/DependencyScan/DependencyScanningTool.cpp

+1-4
Original file line numberDiff line numberDiff line change
@@ -214,9 +214,6 @@ static swiftscan_dependency_graph_t generateHollowDiagnosticOutput(
214214
// Hollow info details
215215
swiftscan_module_details_s *hollowDetails = new swiftscan_module_details_s;
216216
hollowDetails->kind = SWIFTSCAN_DEPENDENCY_INFO_SWIFT_TEXTUAL;
217-
swiftscan_macro_dependency_set_t *hollowMacroSet = new swiftscan_macro_dependency_set_t;
218-
hollowMacroSet->count = 0;
219-
hollowMacroSet->macro_dependencies = nullptr;
220217
hollowDetails->swift_textual_details = {c_string_utils::create_null(),
221218
c_string_utils::create_empty_set(),
222219
c_string_utils::create_null(),
@@ -232,7 +229,7 @@ static swiftscan_dependency_graph_t generateHollowDiagnosticOutput(
232229
c_string_utils::create_null(),
233230
c_string_utils::create_null(),
234231
c_string_utils::create_null(),
235-
hollowMacroSet};
232+
nullptr};
236233
hollowMainModuleInfo->details = hollowDetails;
237234

238235
// Empty Link Library set

Diff for: lib/DependencyScan/ScanDependencies.cpp

+3-5
Original file line numberDiff line numberDiff line change
@@ -591,12 +591,10 @@ static void bridgeDependencyIDs(const ArrayRef<ModuleDependencyID> dependencies,
591591

592592
static swiftscan_macro_dependency_set_t *createMacroDependencySet(
593593
const std::map<std::string, MacroPluginDependency> &macroDeps) {
594+
if (macroDeps.empty())
595+
return nullptr;
596+
594597
swiftscan_macro_dependency_set_t *set = new swiftscan_macro_dependency_set_t;
595-
if (macroDeps.empty()) {
596-
set->count = 0;
597-
set->macro_dependencies = nullptr;
598-
return set;
599-
}
600598
set->count = macroDeps.size();
601599
set->macro_dependencies = new swiftscan_macro_dependency_t[set->count];
602600
unsigned SI = 0;

Diff for: tools/libSwiftScan/libSwiftScan.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,16 @@ DEFINE_SIMPLE_CONVERSION_FUNCTIONS(DependencyScanningTool, swiftscan_scanner_t)
3131
//=== Private Cleanup Functions -------------------------------------------===//
3232
void swiftscan_macro_dependency_dispose(
3333
swiftscan_macro_dependency_set_t *macro) {
34+
if (!macro)
35+
return;
36+
3437
for (unsigned i = 0; i < macro->count; ++i) {
3538
swiftscan_string_dispose(macro->macro_dependencies[i]->moduleName);
3639
swiftscan_string_dispose(macro->macro_dependencies[i]->libraryPath);
3740
swiftscan_string_dispose(macro->macro_dependencies[i]->executablePath);
3841
delete macro->macro_dependencies[i];
3942
}
43+
delete[] macro->macro_dependencies;
4044
delete macro;
4145
}
4246

0 commit comments

Comments
 (0)