Merge pull request #84435 from egorzhdan/egorzhdan/do-not-generate-interface-twice

[cxx-interop] Avoid trying to generate module interfaces twice
This commit is contained in:
Egor Zhdan
2025-10-07 17:50:11 +01:00
committed by GitHub
3 changed files with 7 additions and 22 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -790,27 +790,9 @@ 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<const char *> 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;
}
}
IFaceGenRef->reportEditorInfo(Consumer);
// reportEditorInfo requires exclusive access to the AST, so don't add this