Skip to content

Commit ae7466f

Browse files
authored
Merge pull request #61895 from zoecarver/add-flag-for-c-frt
Put C foreign refernece types behind a flag.
2 parents 23fe168 + bf652b6 commit ae7466f

File tree

5 files changed

+15
-1
lines changed

5 files changed

+15
-1
lines changed

include/swift/Basic/LangOptions.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,8 @@ namespace swift {
278278
/// disabled because it is not complete.
279279
bool EnableCXXInterop = false;
280280

281+
bool CForeignReferenceTypes = false;
282+
281283
/// Imports getters and setters as computed properties.
282284
bool CxxInteropGettersSettersAsProperties = false;
283285

include/swift/Option/Options.td

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -634,6 +634,11 @@ def enable_experimental_cxx_interop :
634634
Flags<[FrontendOption, HelpHidden, ModuleInterfaceOption]>,
635635
HelpText<"Enable experimental C++ interop code generation and config directives">;
636636

637+
def experimental_c_foreign_reference_types :
638+
Flag<["-"], "experimental-c-foreign-reference-types">,
639+
Flags<[FrontendOption, HelpHidden, ModuleInterfaceOption]>,
640+
HelpText<"Enable experimental C foreign references types (with reference coutning).">;
641+
637642
def enable_experimental_cxx_interop_in_clang_header :
638643
Flag<["-"], "enable-experimental-cxx-interop-in-clang-header">,
639644
Flags<[FrontendOption, NoDriverOption, HelpHidden]>,

lib/ClangImporter/ImportDecl.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1945,6 +1945,10 @@ namespace {
19451945
}
19461946

19471947
bool recordHasReferenceSemantics(const clang::RecordDecl *decl) {
1948+
if (!isa<clang::CXXRecordDecl>(decl) &&
1949+
!Impl.SwiftContext.LangOpts.CForeignReferenceTypes)
1950+
return false;
1951+
19481952
auto semanticsKind = evaluateOrDefault(
19491953
Impl.SwiftContext.evaluator,
19501954
CxxRecordSemantics({decl, Impl.SwiftContext}), {});

lib/Frontend/CompilerInvocation.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -892,6 +892,9 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
892892
Args.hasFlag(OPT_enable_objc_interop, OPT_disable_objc_interop,
893893
Target.isOSDarwin());
894894

895+
Opts.CForeignReferenceTypes =
896+
Args.hasArg(OPT_experimental_c_foreign_reference_types);
897+
895898
Opts.CxxInteropGettersSettersAsProperties = Args.hasArg(OPT_cxx_interop_getters_setters_as_properties);
896899

897900
Opts.VerifyAllSubstitutionMaps |= Args.hasArg(OPT_verify_all_substitution_maps);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-run-simple-swift(-I %S/Inputs/ -Xfrontend -validate-tbd-against-ir=none)
1+
// RUN: %target-run-simple-swift(-I %S/Inputs/ -Xfrontend -validate-tbd-against-ir=none -Xfrontend -experimental-c-foreign-reference-types)
22
//
33
// REQUIRES: executable_test
44
// TODO: This should work without ObjC interop in the future rdar://97497120

0 commit comments

Comments
 (0)