Skip to content

Commit 36f6f06

Browse files
[ScanDependencies] Fix a memory leak in dependency graph
Fix a memory leak from #75134. (cherry picked from commit 180e8d4)
1 parent c1ea526 commit 36f6f06

File tree

2 files changed

+7
-5
lines changed

2 files changed

+7
-5
lines changed

lib/DependencyScan/ScanDependencies.cpp

Lines changed: 3 additions & 5 deletions
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;

tools/libSwiftScan/libSwiftScan.cpp

Lines changed: 4 additions & 0 deletions
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)