Skip to content

Commit e42f05f

Browse files
authored
Merge pull request #81294 from artemcm/DepScanParallelDiagnosticConsumer_62
[6.2 🍒][Dependency Scanning] Always use a locking diagnostic consumer
2 parents 11b77bf + d355233 commit e42f05f

File tree

3 files changed

+11
-80
lines changed

3 files changed

+11
-80
lines changed

include/swift/DependencyScan/DependencyScanningTool.h

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class DependencyScanDiagnosticCollector : public DiagnosticConsumer {
4040
std::optional<ScannerImportStatementInfo::ImportDiagnosticLocationInfo> ImportLocation;
4141
};
4242
std::vector<ScannerDiagnosticInfo> Diagnostics;
43+
llvm::sys::SmartMutex<true> ScanningDiagnosticConsumerStateLock;
4344

4445
void handleDiagnostic(SourceManager &SM, const DiagnosticInfo &Info) override;
4546

@@ -55,19 +56,6 @@ class DependencyScanDiagnosticCollector : public DiagnosticConsumer {
5556
}
5657
};
5758

58-
/// Locking variant of the above diagnostic collector that guards accesses to
59-
/// its state with a lock.
60-
class LockingDependencyScanDiagnosticCollector
61-
: public DependencyScanDiagnosticCollector {
62-
private:
63-
void addDiagnostic(SourceManager &SM, const DiagnosticInfo &Info) override;
64-
llvm::sys::SmartMutex<true> ScanningDiagnosticConsumerStateLock;
65-
66-
public:
67-
friend DependencyScanningTool;
68-
LockingDependencyScanDiagnosticCollector() {}
69-
};
70-
7159
/// Given a set of arguments to a print-target-info frontend tool query, produce the
7260
/// JSON target info.
7361
llvm::ErrorOr<swiftscan_string_ref_t> getTargetInfo(ArrayRef<const char *> Command,
@@ -97,11 +85,6 @@ class DependencyScanningTool {
9785
llvm::ErrorOr<swiftscan_import_set_t>
9886
getImports(ArrayRef<const char *> Command, StringRef WorkingDirectory);
9987

100-
/// Query diagnostics consumed so far.
101-
std::vector<DependencyScanDiagnosticCollector::ScannerDiagnosticInfo> getDiagnostics();
102-
/// Discared the collection of diagnostics encountered so far.
103-
void resetDiagnostics();
104-
10588
/// Using the specified invocation command, instantiate a CompilerInstance
10689
/// that will be used for this scan.
10790
llvm::ErrorOr<ScanQueryInstance>
@@ -116,9 +99,6 @@ class DependencyScanningTool {
11699

117100
/// Shared state mutual-exclusivity lock
118101
llvm::sys::SmartMutex<true> DependencyScanningToolStateLock;
119-
120-
/// A shared consumer that accumulates encountered diagnostics.
121-
LockingDependencyScanDiagnosticCollector CDC;
122102
llvm::BumpPtrAllocator Alloc;
123103
llvm::StringSaver Saver;
124104
};

lib/DependencyScan/DependencyScanningTool.cpp

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ void DependencyScanDiagnosticCollector::handleDiagnostic(SourceManager &SM,
7474

7575
void DependencyScanDiagnosticCollector::addDiagnostic(
7676
SourceManager &SM, const DiagnosticInfo &Info) {
77+
llvm::sys::SmartScopedLock<true> Lock(ScanningDiagnosticConsumerStateLock);
78+
7779
// Determine what kind of diagnostic we're emitting.
7880
llvm::SourceMgr::DiagKind SMKind;
7981
switch (Info.Kind) {
@@ -129,12 +131,6 @@ void DependencyScanDiagnosticCollector::addDiagnostic(
129131
}
130132
}
131133

132-
void LockingDependencyScanDiagnosticCollector::addDiagnostic(
133-
SourceManager &SM, const DiagnosticInfo &Info) {
134-
llvm::sys::SmartScopedLock<true> Lock(ScanningDiagnosticConsumerStateLock);
135-
DependencyScanDiagnosticCollector::addDiagnostic(SM, Info);
136-
}
137-
138134
swiftscan_diagnostic_set_t *mapCollectedDiagnosticsForOutput(
139135
const DependencyScanDiagnosticCollector *diagnosticCollector) {
140136
auto collectedDiagnostics = diagnosticCollector->getDiagnostics();
@@ -263,7 +259,7 @@ static swiftscan_import_set_t generateHollowDiagnosticOutputImportSet(
263259

264260
DependencyScanningTool::DependencyScanningTool()
265261
: ScanningService(std::make_unique<SwiftDependencyScanningService>()),
266-
CDC(), Alloc(), Saver(Alloc) {}
262+
Alloc(), Saver(Alloc) {}
267263

268264
llvm::ErrorOr<swiftscan_dependency_graph_t>
269265
DependencyScanningTool::getDependencies(
@@ -272,7 +268,8 @@ DependencyScanningTool::getDependencies(
272268
StringRef WorkingDirectory) {
273269
// There may be errors as early as in instance initialization, so we must ensure
274270
// we can catch those.
275-
auto ScanDiagnosticConsumer = std::make_shared<DependencyScanDiagnosticCollector>();
271+
auto ScanDiagnosticConsumer =
272+
std::make_shared<DependencyScanDiagnosticCollector>();
276273

277274
// The primary instance used to scan the query Swift source-code
278275
auto QueryContextOrErr = initCompilerInstanceForScan(Command,
@@ -329,18 +326,6 @@ DependencyScanningTool::getImports(ArrayRef<const char *> Command,
329326
return std::move(*DependenciesOrErr);
330327
}
331328

332-
std::vector<
333-
DependencyScanDiagnosticCollector::ScannerDiagnosticInfo>
334-
DependencyScanningTool::getDiagnostics() {
335-
llvm::sys::SmartScopedLock<true> Lock(DependencyScanningToolStateLock);
336-
return CDC.Diagnostics;
337-
}
338-
339-
void DependencyScanningTool::resetDiagnostics() {
340-
llvm::sys::SmartScopedLock<true> Lock(DependencyScanningToolStateLock);
341-
CDC.reset();
342-
}
343-
344329
llvm::ErrorOr<ScanQueryInstance>
345330
DependencyScanningTool::initCompilerInstanceForScan(
346331
ArrayRef<const char *> CommandArgs,
@@ -356,10 +341,6 @@ DependencyScanningTool::initCompilerInstanceForScan(
356341

357342
// State unique to an individual scan
358343
auto Instance = std::make_unique<CompilerInstance>();
359-
360-
// FIXME: The shared CDC must be deprecated once all clients have switched
361-
// to using per-scan diagnostic output embedded in the `swiftscan_dependency_graph_s`
362-
Instance->addDiagnosticConsumer(&CDC);
363344
Instance->addDiagnosticConsumer(scannerDiagnosticsCollector.get());
364345

365346
// Basic error checking on the arguments

lib/Tooling/libSwiftScan/libSwiftScan.cpp

Lines changed: 5 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -589,45 +589,15 @@ swiftscan_compiler_supported_features_query() {
589589
//=== Scanner Diagnostics -------------------------------------------------===//
590590
swiftscan_diagnostic_set_t*
591591
swiftscan_scanner_diagnostics_query(swiftscan_scanner_t scanner) {
592-
DependencyScanningTool *ScanningTool = unwrap(scanner);
593-
auto Diagnostics = ScanningTool->getDiagnostics();
594-
auto NumDiagnostics = Diagnostics.size();
595-
596-
swiftscan_diagnostic_set_t *Result = new swiftscan_diagnostic_set_t;
597-
Result->count = NumDiagnostics;
598-
Result->diagnostics = new swiftscan_diagnostic_info_t[NumDiagnostics];
599-
600-
for (size_t i = 0; i < NumDiagnostics; ++i) {
601-
const auto &Diagnostic = Diagnostics[i];
602-
swiftscan_diagnostic_info_s *DiagnosticInfo = new swiftscan_diagnostic_info_s;
603-
DiagnosticInfo->message = swift::c_string_utils::create_clone(Diagnostic.Message.c_str());
604-
switch (Diagnostic.Severity) {
605-
case llvm::SourceMgr::DK_Error:
606-
DiagnosticInfo->severity = SWIFTSCAN_DIAGNOSTIC_SEVERITY_ERROR;
607-
break;
608-
case llvm::SourceMgr::DK_Warning:
609-
DiagnosticInfo->severity = SWIFTSCAN_DIAGNOSTIC_SEVERITY_WARNING;
610-
break;
611-
case llvm::SourceMgr::DK_Note:
612-
DiagnosticInfo->severity = SWIFTSCAN_DIAGNOSTIC_SEVERITY_NOTE;
613-
break;
614-
case llvm::SourceMgr::DK_Remark:
615-
DiagnosticInfo->severity = SWIFTSCAN_DIAGNOSTIC_SEVERITY_REMARK;
616-
break;
617-
}
618-
// swiftscan_scanner_diagnostics_query is deprecated,
619-
// so it does not support source locations.
620-
DiagnosticInfo->source_location = nullptr;
621-
Result->diagnostics[i] = DiagnosticInfo;
622-
}
623-
624-
return Result;
592+
// This method is deprecated
593+
swiftscan_diagnostic_set_t *set = new swiftscan_diagnostic_set_t;
594+
set->count = 0;
595+
return set;
625596
}
626597

627598
void
628599
swiftscan_scanner_diagnostics_reset(swiftscan_scanner_t scanner) {
629-
DependencyScanningTool *ScanningTool = unwrap(scanner);
630-
ScanningTool->resetDiagnostics();
600+
// This method is deprecated
631601
}
632602

633603
swiftscan_string_ref_t

0 commit comments

Comments
 (0)