From a610bcd752279dcf4f8137c03d66b7e0dfbfbe28 Mon Sep 17 00:00:00 2001 From: Egor Zhdan Date: Mon, 22 Sep 2025 15:59:53 +0100 Subject: [PATCH] [cxx-interop] Avoid trying to generate module interfaces twice This reverts most of 72050c5385e7a93643399e2daca006f445e778d1, which led to decreased performance of jump-to-definition. Instead of re-attempting to generate a module interface with C++ interop enabled, Swift should rely on the IDE to pass the correct `-cxx-interoperability-mode=` value to SourceKit. rdar://149061322 --- .../InterfaceGen/gen_clang_cxx_module.swift | 5 ++++- ...gen_clang_mixed_lang_fmwk_cxx_module.swift | 2 +- .../lib/SwiftLang/SwiftEditorInterfaceGen.cpp | 22 ++----------------- 3 files changed, 7 insertions(+), 22 deletions(-) diff --git a/test/SourceKit/InterfaceGen/gen_clang_cxx_module.swift b/test/SourceKit/InterfaceGen/gen_clang_cxx_module.swift index 2bb9a31c2da0f..ee7f19af9a439 100644 --- a/test/SourceKit/InterfaceGen/gen_clang_cxx_module.swift +++ b/test/SourceKit/InterfaceGen/gen_clang_cxx_module.swift @@ -1,7 +1,10 @@ // RUN: %empty-directory(%t) // RUN: split-file %s %t -// RUN: %sourcekitd-test -req=interface-gen -module CxxModule -- -Xfrontend -disable-implicit-concurrency-module-import -Xfrontend -disable-implicit-string-processing-module-import -I %t/Inputs -target %target-triple %clang-importer-sdk-nosource | %FileCheck %s +// The interface should fail to generate with C++ interop disabled: +// RUN: not %sourcekitd-test -req=interface-gen -module CxxModule -- -Xfrontend -disable-implicit-concurrency-module-import -Xfrontend -disable-implicit-string-processing-module-import -I %t/Inputs -target %target-triple %clang-importer-sdk-nosource + +// With C++ interop enabled, it should succeed: // RUN: %sourcekitd-test -req=interface-gen -module CxxModule -- -Xfrontend -disable-implicit-concurrency-module-import -Xfrontend -disable-implicit-string-processing-module-import -cxx-interoperability-mode=default -I %t/Inputs -target %target-triple %clang-importer-sdk-nosource | %FileCheck %s diff --git a/test/SourceKit/InterfaceGen/gen_clang_mixed_lang_fmwk_cxx_module.swift b/test/SourceKit/InterfaceGen/gen_clang_mixed_lang_fmwk_cxx_module.swift index 413dda8adb16f..07fd707fd3b83 100644 --- a/test/SourceKit/InterfaceGen/gen_clang_mixed_lang_fmwk_cxx_module.swift +++ b/test/SourceKit/InterfaceGen/gen_clang_mixed_lang_fmwk_cxx_module.swift @@ -3,7 +3,7 @@ // RUN: %target-swift-frontend -emit-module %t/TestFmSwift.swift -module-name TestFm -enable-experimental-cxx-interop -F %t -o %t/TestFm.swiftmodule -import-underlying-module -// RUN: %sourcekitd-test -req=interface-gen -module TestFm -- -Xfrontend -disable-implicit-concurrency-module-import -Xfrontend -disable-implicit-string-processing-module-import -I %t -target %target-triple %clang-importer-sdk-nosource | %FileCheck %s +// RUN: %sourcekitd-test -req=interface-gen -module TestFm -- -cxx-interoperability-mode=default -Xfrontend -disable-implicit-concurrency-module-import -Xfrontend -disable-implicit-string-processing-module-import -I %t -target %target-triple %clang-importer-sdk-nosource | %FileCheck %s //--- TestFm.framework/Headers/TestFm.h #pragma once diff --git a/tools/SourceKit/lib/SwiftLang/SwiftEditorInterfaceGen.cpp b/tools/SourceKit/lib/SwiftLang/SwiftEditorInterfaceGen.cpp index c46f297a4b482..20562beeda137 100644 --- a/tools/SourceKit/lib/SwiftLang/SwiftEditorInterfaceGen.cpp +++ b/tools/SourceKit/lib/SwiftLang/SwiftEditorInterfaceGen.cpp @@ -790,26 +790,8 @@ void SwiftLangSupport::editorOpenInterface( SynthesizedExtensions, InterestedUSR); if (!IFaceGenRef) { - // Retry to generate a module interface with C++ interop enabled, - // if the first attempt failed. - bool retryWithCxxEnabled = true; - for (const auto &arg: Args) { - if (StringRef(arg).starts_with("-cxx-interoperability-mode=") || - StringRef(arg).starts_with("-enable-experimental-cxx-interop")) { - retryWithCxxEnabled = false; - break; - } - } - if (retryWithCxxEnabled) { - std::vector AdjustedArgs(Args.begin(), Args.end()); - AdjustedArgs.push_back("-cxx-interoperability-mode=default"); - return editorOpenInterface(Consumer, Name, ModuleName, Group, AdjustedArgs, - SynthesizedExtensions, InterestedUSR); - } - else { - Consumer.handleRequestError(ErrMsg.c_str()); - return; - } + Consumer.handleRequestError(ErrMsg.c_str()); + return; } IFaceGenRef->reportEditorInfo(Consumer);