Skip to content

Commit 727d3fe

Browse files
authored
Merge pull request #58852 from ahoppen/pr/ubuntu-22-failure
[SourceKit] Pass the main swift executable path when constructing a compiler invocation
2 parents dcce7fc + 1525f6b commit 727d3fe

File tree

16 files changed

+77
-27
lines changed

16 files changed

+77
-27
lines changed

include/swift/IDE/Utils.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ bool initCompilerInvocation(
8989
FrontendOptions::ActionType Action, DiagnosticEngine &Diags,
9090
StringRef UnresolvedPrimaryFile,
9191
llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> FileSystem,
92+
const std::string &swiftExecutablePath,
9293
const std::string &runtimeResourcePath,
9394
const std::string &diagnosticDocumentationPath, time_t sessionTimestamp,
9495
std::string &Error);

lib/IDE/Utils.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,7 @@ bool ide::initCompilerInvocation(
276276
FrontendOptions::ActionType Action, DiagnosticEngine &Diags,
277277
StringRef UnresolvedPrimaryFile,
278278
llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> FileSystem,
279+
const std::string &swiftExecutablePath,
279280
const std::string &runtimeResourcePath,
280281
const std::string &diagnosticDocumentationPath, time_t sessionTimestamp,
281282
std::string &Error) {
@@ -299,7 +300,9 @@ bool ide::initCompilerInvocation(
299300
driver::getSingleFrontendInvocationFromDriverArguments(
300301
Args, Diags,
301302
[&](ArrayRef<const char *> FrontendArgs) {
302-
return Invocation.parseArgs(FrontendArgs, Diags);
303+
return Invocation.parseArgs(
304+
FrontendArgs, Diags, /*ConfigurationFileBuffers=*/nullptr,
305+
/*workingDirectory=*/"", swiftExecutablePath);
303306
},
304307
/*ForceNoOutputs=*/true);
305308

test/SourceKit/Misc/match-module-cache-with-compiler.swift

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,6 @@
33

44
// REQUIRES: shell
55

6-
// https://github.com/apple/swift/issues/58786
7-
// UNSUPPORTED: OS=linux-gnu
8-
96
// RUN: %empty-directory(%t)
107

118
// RUN: COMPILER_ARGS=( \

tools/SourceKit/include/SourceKit/Core/Context.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,9 @@ class SlowRequestSimulator {
169169
};
170170

171171
class Context {
172+
/// The path of the swift-frontend executable.
173+
/// Used to find clang relative to it.
174+
std::string SwiftExecutablePath;
172175
std::string RuntimeLibPath;
173176
std::string DiagnosticDocumentationPath;
174177
std::unique_ptr<LangSupport> SwiftLang;
@@ -178,12 +181,15 @@ class Context {
178181
std::shared_ptr<SlowRequestSimulator> SlowRequestSim;
179182

180183
public:
181-
Context(StringRef RuntimeLibPath, StringRef DiagnosticDocumentationPath,
184+
Context(StringRef SwiftExecutablePath, StringRef RuntimeLibPath,
185+
StringRef DiagnosticDocumentationPath,
182186
llvm::function_ref<std::unique_ptr<LangSupport>(Context &)>
183187
LangSupportFactoryFn,
184188
bool shouldDispatchNotificationsOnMain = true);
185189
~Context();
186190

191+
StringRef getSwiftExecutablePath() const { return SwiftExecutablePath; }
192+
187193
StringRef getRuntimeLibPath() const { return RuntimeLibPath; }
188194
StringRef getDiagnosticDocumentationPath() const {
189195
return DiagnosticDocumentationPath;

tools/SourceKit/lib/Core/Context.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,12 @@ GlobalConfig::getCompletionOpts() const {
3636
}
3737

3838
SourceKit::Context::Context(
39-
StringRef RuntimeLibPath, StringRef DiagnosticDocumentationPath,
39+
StringRef SwiftExecutablePath, StringRef RuntimeLibPath,
40+
StringRef DiagnosticDocumentationPath,
4041
llvm::function_ref<std::unique_ptr<LangSupport>(Context &)>
4142
LangSupportFactoryFn,
4243
bool shouldDispatchNotificationsOnMain)
43-
: RuntimeLibPath(RuntimeLibPath),
44+
: SwiftExecutablePath(SwiftExecutablePath), RuntimeLibPath(RuntimeLibPath),
4445
DiagnosticDocumentationPath(DiagnosticDocumentationPath),
4546
NotificationCtr(
4647
new NotificationCenter(shouldDispatchNotificationsOnMain)),

tools/SourceKit/lib/SwiftLang/SwiftASTManager.cpp

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -552,10 +552,11 @@ struct SwiftASTManager::Implementation {
552552
std::shared_ptr<SwiftEditorDocumentFileMap> EditorDocs,
553553
std::shared_ptr<GlobalConfig> Config,
554554
std::shared_ptr<SwiftStatistics> Stats,
555-
std::shared_ptr<RequestTracker> ReqTracker, StringRef RuntimeResourcePath,
556-
StringRef DiagnosticDocumentationPath)
555+
std::shared_ptr<RequestTracker> ReqTracker, StringRef SwiftExecutablePath,
556+
StringRef RuntimeResourcePath, StringRef DiagnosticDocumentationPath)
557557
: EditorDocs(EditorDocs), Config(Config), Stats(Stats),
558-
ReqTracker(ReqTracker), RuntimeResourcePath(RuntimeResourcePath),
558+
ReqTracker(ReqTracker), SwiftExecutablePath(SwiftExecutablePath),
559+
RuntimeResourcePath(RuntimeResourcePath),
559560
DiagnosticDocumentationPath(DiagnosticDocumentationPath),
560561
SessionTimestamp(llvm::sys::toTimeT(std::chrono::system_clock::now())) {
561562
}
@@ -564,6 +565,9 @@ struct SwiftASTManager::Implementation {
564565
std::shared_ptr<GlobalConfig> Config;
565566
std::shared_ptr<SwiftStatistics> Stats;
566567
std::shared_ptr<RequestTracker> ReqTracker;
568+
/// The path of the swift-frontend executable.
569+
/// Used to find clang relative to it.
570+
std::string SwiftExecutablePath;
567571
std::string RuntimeResourcePath;
568572
std::string DiagnosticDocumentationPath;
569573
SourceManager SourceMgr;
@@ -633,10 +637,10 @@ SwiftASTManager::SwiftASTManager(
633637
std::shared_ptr<SwiftEditorDocumentFileMap> EditorDocs,
634638
std::shared_ptr<GlobalConfig> Config,
635639
std::shared_ptr<SwiftStatistics> Stats,
636-
std::shared_ptr<RequestTracker> ReqTracker, StringRef RuntimeResourcePath,
637-
StringRef DiagnosticDocumentationPath)
640+
std::shared_ptr<RequestTracker> ReqTracker, StringRef SwiftExecutablePath,
641+
StringRef RuntimeResourcePath, StringRef DiagnosticDocumentationPath)
638642
: Impl(*new Implementation(EditorDocs, Config, Stats, ReqTracker,
639-
RuntimeResourcePath,
643+
SwiftExecutablePath, RuntimeResourcePath,
640644
DiagnosticDocumentationPath)) {}
641645

642646
SwiftASTManager::~SwiftASTManager() {
@@ -673,8 +677,8 @@ bool SwiftASTManager::initCompilerInvocation(
673677
std::string &Error) {
674678
return ide::initCompilerInvocation(
675679
Invocation, OrigArgs, Action, Diags, UnresolvedPrimaryFile, FileSystem,
676-
Impl.RuntimeResourcePath, Impl.DiagnosticDocumentationPath,
677-
Impl.SessionTimestamp, Error);
680+
Impl.SwiftExecutablePath, Impl.RuntimeResourcePath,
681+
Impl.DiagnosticDocumentationPath, Impl.SessionTimestamp, Error);
678682
}
679683

680684
bool SwiftASTManager::initCompilerInvocation(

tools/SourceKit/lib/SwiftLang/SwiftASTManager.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ class SwiftASTManager : public std::enable_shared_from_this<SwiftASTManager> {
235235
std::shared_ptr<GlobalConfig> Config,
236236
std::shared_ptr<SwiftStatistics> Stats,
237237
std::shared_ptr<RequestTracker> ReqTracker,
238+
StringRef SwiftExecutablePath,
238239
StringRef RuntimeResourcePath,
239240
StringRef DiagnosticDocumentationPath);
240241
~SwiftASTManager();

tools/SourceKit/lib/SwiftLang/SwiftLangSupport.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,7 @@ configureCompletionInstance(std::shared_ptr<CompletionInstance> CompletionInst,
272272

273273
SwiftLangSupport::SwiftLangSupport(SourceKit::Context &SKCtx)
274274
: NotificationCtr(SKCtx.getNotificationCenter()),
275+
SwiftExecutablePath(SKCtx.getSwiftExecutablePath()),
275276
ReqTracker(SKCtx.getRequestTracker()), CCCache(new SwiftCompletionCache),
276277
CompileManager(RuntimeResourcePath, DiagnosticDocumentationPath) {
277278
llvm::SmallString<128> LibPath(SKCtx.getRuntimeLibPath());
@@ -283,7 +284,7 @@ SwiftLangSupport::SwiftLangSupport(SourceKit::Context &SKCtx)
283284
EditorDocuments = std::make_shared<SwiftEditorDocumentFileMap>();
284285
ASTMgr = std::make_shared<SwiftASTManager>(
285286
EditorDocuments, SKCtx.getGlobalConfiguration(), Stats, ReqTracker,
286-
RuntimeResourcePath, DiagnosticDocumentationPath);
287+
SwiftExecutablePath, RuntimeResourcePath, DiagnosticDocumentationPath);
287288

288289
CompletionInst = std::make_shared<CompletionInstance>();
289290

tools/SourceKit/lib/SwiftLang/SwiftLangSupport.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,9 @@ struct SwiftStatistics {
350350

351351
class SwiftLangSupport : public LangSupport {
352352
std::shared_ptr<NotificationCenter> NotificationCtr;
353+
/// The path of the swift-frontend executable.
354+
/// Used to find clang relative to it.
355+
std::string SwiftExecutablePath;
353356
std::string RuntimeResourcePath;
354357
std::string DiagnosticDocumentationPath;
355358
std::shared_ptr<SwiftASTManager> ASTMgr;

tools/SourceKit/tools/sourcekitd/bin/InProc/sourcekitdInProc-darwin.exports

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ sourcekitd_variant_uid_get_value
7070
_ZN10sourcekitd13cancelRequestEPKv
7171
_ZN10sourcekitd13enableLoggingEN4llvm9StringRefE
7272
_ZN10sourcekitd13handleRequestEPvPKvNSt3__18functionIFvS0_EEE
73-
_ZN10sourcekitd17initializeServiceEN4llvm9StringRefES1_NSt3__18functionIFvPvEEE
73+
_ZN10sourcekitd17initializeServiceEN4llvm9StringRefES1_S1_NSt3__18functionIFvPvEEE
7474
_ZN10sourcekitd24createErrorRequestFailedEN4llvm9StringRefE
7575
_ZN10sourcekitd24disposeCancellationTokenEPKv
7676
_ZN9SourceKit6Logger12LoggingLevelE

0 commit comments

Comments
 (0)