mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Merge pull request #84111 from artemcm/62_1_DepScanWorkersNoShareDiagEngine
[6.2.1 🍒][Dependency Scanning] Give each scanner worker a unique Diagnostic Engine
This commit is contained in:
@@ -64,8 +64,9 @@ llvm::ErrorOr<swiftscan_string_ref_t> getTargetInfo(ArrayRef<const char *> Comma
|
||||
return c_string_utils::create_clone(ResultStr.c_str());
|
||||
}
|
||||
|
||||
void DependencyScanDiagnosticCollector::handleDiagnostic(SourceManager &SM,
|
||||
void ThreadSafeDiagnosticCollector::handleDiagnostic(SourceManager &SM,
|
||||
const DiagnosticInfo &Info) {
|
||||
llvm::sys::SmartScopedLock<true> Lock(DiagnosticConsumerStateLock);
|
||||
addDiagnostic(SM, Info);
|
||||
for (auto ChildInfo : Info.ChildDiagnosticInfo) {
|
||||
addDiagnostic(SM, *ChildInfo);
|
||||
@@ -74,8 +75,6 @@ void DependencyScanDiagnosticCollector::handleDiagnostic(SourceManager &SM,
|
||||
|
||||
void DependencyScanDiagnosticCollector::addDiagnostic(
|
||||
SourceManager &SM, const DiagnosticInfo &Info) {
|
||||
llvm::sys::SmartScopedLock<true> Lock(ScanningDiagnosticConsumerStateLock);
|
||||
|
||||
// Determine what kind of diagnostic we're emitting.
|
||||
llvm::SourceMgr::DiagKind SMKind;
|
||||
switch (Info.Kind) {
|
||||
|
||||
@@ -200,6 +200,13 @@ ModuleDependencyScanningWorker::ModuleDependencyScanningWorker(
|
||||
// Create a scanner-specific Invocation and ASTContext.
|
||||
workerCompilerInvocation =
|
||||
std::make_unique<CompilerInvocation>(ScanCompilerInvocation);
|
||||
|
||||
// Instantiate a worker-specific diagnostic engine and copy over
|
||||
// the scanner's diagnostic consumers (expected to be thread-safe).
|
||||
workerDiagnosticEngine = std::make_unique<DiagnosticEngine>(ScanASTContext.SourceMgr);
|
||||
for (auto &scannerDiagConsumer : Diagnostics.getConsumers())
|
||||
workerDiagnosticEngine->addConsumer(*scannerDiagConsumer);
|
||||
|
||||
workerASTContext = std::unique_ptr<ASTContext>(
|
||||
ASTContext::get(workerCompilerInvocation->getLangOptions(),
|
||||
workerCompilerInvocation->getTypeCheckerOptions(),
|
||||
@@ -209,7 +216,8 @@ ModuleDependencyScanningWorker::ModuleDependencyScanningWorker(
|
||||
workerCompilerInvocation->getSymbolGraphOptions(),
|
||||
workerCompilerInvocation->getCASOptions(),
|
||||
workerCompilerInvocation->getSerializationOptions(),
|
||||
ScanASTContext.SourceMgr, Diagnostics));
|
||||
ScanASTContext.SourceMgr, *workerDiagnosticEngine));
|
||||
|
||||
auto loader = std::make_unique<PluginLoader>(
|
||||
*workerASTContext, /*DepTracker=*/nullptr,
|
||||
workerCompilerInvocation->getFrontendOptions().CacheReplayPrefixMap,
|
||||
|
||||
Reference in New Issue
Block a user