File tree Expand file tree Collapse file tree 3 files changed +17
-7
lines changed
include/swift/DependencyScan Expand file tree Collapse file tree 3 files changed +17
-7
lines changed Original file line number Diff line number Diff line change @@ -39,10 +39,11 @@ class DependencyScannerDiagnosticCollectingConsumer : public DiagnosticConsumer
39
39
40
40
void handleDiagnostic (SourceManager &SM,
41
41
const DiagnosticInfo &Info) override ;
42
- ScannerDiagnosticInfo convertDiagnosticInfo (SourceManager &SM,
43
- const DiagnosticInfo &Info);
44
42
void addDiagnostic (SourceManager &SM, const DiagnosticInfo &Info);
45
43
std::vector<ScannerDiagnosticInfo> Diagnostics;
44
+ // FIXME: For now, we isolate access to shared state of this object
45
+ // but we really should make sure that it doesn't get shared.
46
+ llvm::sys::SmartMutex<true > ScanningDiagnosticConsumerStateLock;
46
47
};
47
48
48
49
@@ -91,8 +92,8 @@ class DependencyScanningTool {
91
92
bool loadCache (llvm::StringRef path);
92
93
// / Discard the tool's current `SharedCache` and start anew.
93
94
void resetCache ();
94
-
95
- const std::vector<DependencyScannerDiagnosticCollectingConsumer::ScannerDiagnosticInfo>& getDiagnostics () const { return CDC. Diagnostics ; }
95
+ // / Query diagnostics consumed so far.
96
+ std::vector<DependencyScannerDiagnosticCollectingConsumer::ScannerDiagnosticInfo> getDiagnostics ();
96
97
// / Discared the collection of diagnostics encountered so far.
97
98
void resetDiagnostics ();
98
99
Original file line number Diff line number Diff line change @@ -77,6 +77,7 @@ void DependencyScannerDiagnosticCollectingConsumer::handleDiagnostic(SourceManag
77
77
}
78
78
79
79
void DependencyScannerDiagnosticCollectingConsumer::addDiagnostic (SourceManager &SM, const DiagnosticInfo &Info) {
80
+ llvm::sys::SmartScopedLock<true > Lock (ScanningDiagnosticConsumerStateLock);
80
81
// Determine what kind of diagnostic we're emitting.
81
82
llvm::SourceMgr::DiagKind SMKind;
82
83
switch (Info.Kind ) {
@@ -219,6 +220,13 @@ void DependencyScanningTool::resetCache() {
219
220
ScanningService.reset (new SwiftDependencyScanningService ());
220
221
}
221
222
223
+ std::vector<
224
+ DependencyScannerDiagnosticCollectingConsumer::ScannerDiagnosticInfo>
225
+ DependencyScanningTool::getDiagnostics () {
226
+ llvm::sys::SmartScopedLock<true > Lock (DependencyScanningToolStateLock);
227
+ return CDC.Diagnostics ;
228
+ }
229
+
222
230
void DependencyScanningTool::resetDiagnostics () {
223
231
llvm::sys::SmartScopedLock<true > Lock (DependencyScanningToolStateLock);
224
232
CDC.reset ();
Original file line number Diff line number Diff line change @@ -613,14 +613,15 @@ swiftscan_compiler_supported_features_query() {
613
613
swiftscan_diagnostic_set_t *
614
614
swiftscan_scanner_diagnostics_query (swiftscan_scanner_t scanner) {
615
615
DependencyScanningTool *ScanningTool = unwrap (scanner);
616
- auto NumDiagnostics = ScanningTool->getDiagnostics ().size ();
617
-
616
+ auto Diagnostics = ScanningTool->getDiagnostics ();
617
+ auto NumDiagnostics = Diagnostics.size ();
618
+
618
619
swiftscan_diagnostic_set_t *Result = new swiftscan_diagnostic_set_t ;
619
620
Result->count = NumDiagnostics;
620
621
Result->diagnostics = new swiftscan_diagnostic_info_t [NumDiagnostics];
621
622
622
623
for (size_t i = 0 ; i < NumDiagnostics; ++i) {
623
- const auto &Diagnostic = ScanningTool-> getDiagnostics () [i];
624
+ const auto &Diagnostic = Diagnostics [i];
624
625
swiftscan_diagnostic_info_s *DiagnosticInfo = new swiftscan_diagnostic_info_s;
625
626
DiagnosticInfo->message = swift::c_string_utils::create_clone (Diagnostic.Message .c_str ());
626
627
switch (Diagnostic.Severity ) {
You can’t perform that action at this time.
0 commit comments