Skip to content

Commit 569ca00

Browse files
authored
Merge pull request #82680 from swiftlang/egorzhdan/enable-c-frt
[cxx-interop] Enable foreign reference types in C interop
2 parents d499b14 + 9178af3 commit 569ca00

File tree

6 files changed

+14
-13
lines changed

6 files changed

+14
-13
lines changed

include/swift/Basic/LangOptions.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -355,8 +355,6 @@ namespace swift {
355355
return CXXStdlib == PlatformDefaultCXXStdlib;
356356
}
357357

358-
bool CForeignReferenceTypes = false;
359-
360358
/// Imports getters and setters as computed properties.
361359
bool CxxInteropGettersSettersAsProperties = false;
362360

include/swift/Option/Options.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -867,7 +867,7 @@ def cxx_interoperability_mode :
867867
def experimental_c_foreign_reference_types :
868868
Flag<["-"], "experimental-c-foreign-reference-types">,
869869
Flags<[FrontendOption, HelpHidden, ModuleInterfaceOption]>,
870-
HelpText<"Enable experimental C foreign references types (with reference counting).">;
870+
HelpText<"Enable experimental C foreign references types. Deprecated, has no effect.">;
871871

872872
def experimental_hermetic_seal_at_link:
873873
Flag<["-"], "experimental-hermetic-seal-at-link">,

lib/ClangImporter/ImportDecl.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -169,10 +169,6 @@ void ClangImporter::Implementation::makeComputed(AbstractStorageDecl *storage,
169169
bool importer::recordHasReferenceSemantics(
170170
const clang::RecordDecl *decl,
171171
ClangImporter::Implementation *importerImpl) {
172-
if (!isa<clang::CXXRecordDecl>(decl) &&
173-
!importerImpl->SwiftContext.LangOpts.CForeignReferenceTypes)
174-
return false;
175-
176172
// At this point decl might not be fully imported into Swift yet, which
177173
// means we might not have asked Clang to generate its implicit members, such
178174
// as copy or move constructors. This would cause CxxRecordSemanticsRequest to

lib/Frontend/CompilerInvocation.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1580,8 +1580,9 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
15801580
Args.hasFlag(OPT_enable_objc_interop, OPT_disable_objc_interop,
15811581
Target.isOSDarwin() && !Opts.hasFeature(Feature::Embedded));
15821582

1583-
Opts.CForeignReferenceTypes =
1584-
Args.hasArg(OPT_experimental_c_foreign_reference_types);
1583+
if (Args.hasArg(OPT_experimental_c_foreign_reference_types))
1584+
Diags.diagnose(SourceLoc(), diag::warn_flag_deprecated,
1585+
"-experimental-c-foreign-reference-types");
15851586

15861587
Opts.CxxInteropGettersSettersAsProperties = Args.hasArg(OPT_cxx_interop_getters_setters_as_properties);
15871588
Opts.RequireCxxInteropToImportCxxInteropModule =
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// RUN: %target-build-swift %s -I %S/Inputs/ -Xfrontend -experimental-c-foreign-reference-types 2>&1 | %FileCheck %s
2+
3+
// CHECK: <unknown>:0: warning: flag '-experimental-c-foreign-reference-types' is deprecated
4+
5+
import ForeignReference

test/Interop/C/struct/foreign-reference.swift

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
// RUN: %target-run-simple-swift(-I %S/Inputs/ -Xfrontend -validate-tbd-against-ir=none -Xfrontend -experimental-c-foreign-reference-types -Onone -D NO_OPTIMIZATIONS)
2-
// RUN: %target-run-simple-swift(-I %S/Inputs/ -Xfrontend -validate-tbd-against-ir=none -Xfrontend -experimental-c-foreign-reference-types -O)
1+
// RUN: %target-run-simple-swift(-I %S/Inputs/ -Xfrontend -validate-tbd-against-ir=none -Onone -D NO_OPTIMIZATIONS)
2+
// RUN: %target-run-simple-swift(-I %S/Inputs/ -Xfrontend -validate-tbd-against-ir=none -O)
33
//
44
// REQUIRES: executable_test
5-
// TODO: This should work without ObjC interop in the future rdar://97497120
6-
// REQUIRES: objc_interop
5+
6+
// XFAIL: OS=windows-msvc
7+
// FIXME: Runtime support for C++ foreign reference types is missing on Windows (https://github.com/swiftlang/swift/issues/82643)
78

89
import StdlibUnittest
910
import ForeignReference

0 commit comments

Comments
 (0)