Skip to content

Commit 315a763

Browse files
Merge pull request #72218 from aschwaighofer/fragile_resilient_protocols
IRGen: Add code to support building fragile resilient protocol witnesses
2 parents b065540 + 9639e00 commit 315a763

19 files changed

+166
-4
lines changed

include/swift/AST/IRGenOptions.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,8 @@ class IRGenOptions {
467467
/// Use relative (and constant) protocol witness tables.
468468
unsigned UseRelativeProtocolWitnessTables : 1;
469469

470+
unsigned UseFragileResilientProtocolWitnesses : 1;
471+
470472
/// The number of threads for multi-threaded code generation.
471473
unsigned NumThreads = 0;
472474

@@ -555,6 +557,7 @@ class IRGenOptions {
555557
EmitGenericRODatas(false), NoPreallocatedInstantiationCaches(false),
556558
DisableReadonlyStaticObjects(false), CollocatedMetadataFunctions(false),
557559
ColocateTypeDescriptors(true), UseRelativeProtocolWitnessTables(false),
560+
UseFragileResilientProtocolWitnesses(false),
558561
CmdArgs(), SanitizeCoverage(llvm::SanitizerCoverageOptions()),
559562
TypeInfoFilter(TypeInfoDumpFilter::All),
560563
PlatformCCallingConvention(llvm::CallingConv::C), UseCASBackend(false),

include/swift/IRGen/TBDGen.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ struct TBDGenOptions {
4747
/// Whether LLVM IR Witness Method Elimination is enabled.
4848
bool WitnessMethodElimination = false;
4949

50+
/// Whether resilient protocols should be emitted fragile.
51+
bool FragileResilientProtocols = false;
52+
5053
/// The install_name to use in the TBD file.
5154
std::string InstallName;
5255

@@ -78,6 +81,7 @@ struct TBDGenOptions {
7881
lhs.PublicOrPackageSymbolsOnly == rhs.PublicOrPackageSymbolsOnly &&
7982
lhs.VirtualFunctionElimination == rhs.VirtualFunctionElimination &&
8083
lhs.WitnessMethodElimination == rhs.WitnessMethodElimination &&
84+
lhs.FragileResilientProtocols == rhs.FragileResilientProtocols &&
8185
lhs.InstallName == rhs.InstallName &&
8286
lhs.ModuleLinkName == rhs.ModuleLinkName &&
8387
lhs.CurrentVersion == rhs.CurrentVersion &&
@@ -95,7 +99,7 @@ struct TBDGenOptions {
9599
return hash_combine(
96100
opts.HasMultipleIGMs, opts.IsInstallAPI, opts.LinkerDirectivesOnly,
97101
opts.PublicOrPackageSymbolsOnly, opts.VirtualFunctionElimination,
98-
opts.WitnessMethodElimination,
102+
opts.WitnessMethodElimination, opts.FragileResilientProtocols,
99103
opts.InstallName, opts.ModuleLinkName,
100104
opts.CurrentVersion, opts.CompatibilityVersion,
101105
opts.ModuleInstallNameMapPath,

include/swift/Option/FrontendOptions.td

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1259,6 +1259,12 @@ def enable_relative_protocol_witness_tables :
12591259
def disable_relative_protocol_witness_tables :
12601260
Flag<["-"], "disable-relative-protocol-witness-tables">,
12611261
HelpText<"Disable relative protocol witness tables">;
1262+
def enable_fragile_resilient_protocol_witnesses :
1263+
Flag<["-"], "enable-fragile-relative-protocol-tables">,
1264+
HelpText<"Enable relative protocol witness tables">;
1265+
def disable_fragile_resilient_protocol_witnesses :
1266+
Flag<["-"], "disable-fragile-relative-protocol-tables">,
1267+
HelpText<"Disable relative protocol witness tables">;
12621268

12631269
def enable_new_llvm_pass_manager :
12641270
Flag<["-"], "enable-new-llvm-pass-manager">,

include/swift/SIL/SILSymbolVisitor.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ struct SILSymbolVisitorOptions {
3939

4040
/// Whether LLVM IR Witness Method Elimination is enabled.
4141
bool WitnessMethodElimination = false;
42+
43+
/// Whether resilient protocols should be emitted fragile.
44+
bool FragileResilientProtocols = false;
4245
};
4346

4447
/// Context for `SILSymbolVisitor` symbol enumeration.

lib/Frontend/CompilerInvocation.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2525,6 +2525,8 @@ static bool ParseTBDGenArgs(TBDGenOptions &Opts, ArgList &Args,
25252525

25262526
Opts.VirtualFunctionElimination = Args.hasArg(OPT_enable_llvm_vfe);
25272527
Opts.WitnessMethodElimination = Args.hasArg(OPT_enable_llvm_wme);
2528+
Opts.FragileResilientProtocols =
2529+
Args.hasArg(OPT_enable_fragile_resilient_protocol_witnesses);
25282530

25292531
if (const Arg *A = Args.getLastArg(OPT_tbd_compatibility_version)) {
25302532
Opts.CompatibilityVersion = A->getValue();
@@ -3046,6 +3048,10 @@ static bool ParseIRGenArgs(IRGenOptions &Opts, ArgList &Args,
30463048
Args.hasFlag(OPT_enable_relative_protocol_witness_tables,
30473049
OPT_disable_relative_protocol_witness_tables,
30483050
Opts.UseRelativeProtocolWitnessTables);
3051+
Opts.UseFragileResilientProtocolWitnesses =
3052+
Args.hasFlag(OPT_enable_fragile_resilient_protocol_witnesses,
3053+
OPT_disable_fragile_resilient_protocol_witnesses,
3054+
Opts.UseFragileResilientProtocolWitnesses);
30493055
Opts.EnableLargeLoadableTypesReg2Mem =
30503056
Args.hasFlag(OPT_enable_large_loadable_types_reg2mem,
30513057
OPT_disable_large_loadable_types_reg2mem,

lib/IRGen/GenDecl.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6015,6 +6015,11 @@ bool IRGenModule::isResilient(NominalTypeDecl *D,
60156015
ClassDecl *asViewedFromRootClass) {
60166016
assert(!asViewedFromRootClass || isa<ClassDecl>(D));
60176017

6018+
// Ignore resilient protocols if requested.
6019+
if (isa<ProtocolDecl>(D) && IRGen.Opts.UseFragileResilientProtocolWitnesses) {
6020+
return false;
6021+
}
6022+
60186023
if (D->getModuleContext()->getBypassResilience())
60196024
return false;
60206025
if (expansion == ResilienceExpansion::Maximal &&

lib/IRGen/GenProto.cpp

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -953,7 +953,10 @@ bool IRGenModule::isResilientConformance(
953953
const NormalProtocolConformance *conformance) {
954954
// If the protocol is not resilient, the conformance is not resilient
955955
// either.
956-
if (!conformance->getProtocol()->isResilient())
956+
bool shouldTreatProtocolNonResilient =
957+
IRGen.Opts.UseFragileResilientProtocolWitnesses;
958+
if (!conformance->getProtocol()->isResilient() ||
959+
shouldTreatProtocolNonResilient)
957960
return false;
958961

959962
auto *conformanceModule = conformance->getDeclContext()->getParentModule();
@@ -2167,6 +2170,7 @@ namespace {
21672170
void addResilientWitnesses() {
21682171
if (Description.resilientWitnesses.empty())
21692172
return;
2173+
assert(!IGM.IRGen.Opts.UseFragileResilientProtocolWitnesses);
21702174

21712175
Flags = Flags.withHasResilientWitnesses(true);
21722176

@@ -2540,6 +2544,17 @@ void IRGenModule::emitSILWitnessTable(SILWitnessTable *wt) {
25402544
bool isResilient = isResilientConformance(conf);
25412545
bool useRelativeProtocolWitnessTable =
25422546
IRGen.Opts.UseRelativeProtocolWitnessTables;
2547+
if (useRelativeProtocolWitnessTable &&
2548+
!conf->getConditionalRequirements().empty()) {
2549+
auto sig = conf->getGenericSignature();
2550+
sig->forEachParam([&](GenericTypeParamType *param, bool canonical) {
2551+
if (param->isParameterPack()) {
2552+
#ifndef NDEBUG
2553+
wt->dump();
2554+
#endif
2555+
llvm::report_fatal_error("use of relative protcol witness tables not supported");
2556+
}});
2557+
}
25432558
if (!isResilient) {
25442559
// Build the witness table.
25452560
ConstantInitBuilder builder(*this);

lib/IRGen/TBDGen.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,6 +511,7 @@ void TBDGenVisitor::visit(const TBDGenDescriptor &desc) {
511511
opts.PublicOrPackageSymbolsOnly = Opts.PublicOrPackageSymbolsOnly;
512512
opts.WitnessMethodElimination = Opts.WitnessMethodElimination;
513513
opts.VirtualFunctionElimination = Opts.VirtualFunctionElimination;
514+
opts.FragileResilientProtocols = Opts.FragileResilientProtocols;
514515

515516
auto silVisitorCtx = SILSymbolVisitorContext(SwiftModule, opts);
516517
auto visitorCtx = IRSymbolVisitorContext{UniversalLinkInfo, silVisitorCtx};

lib/SIL/IR/SILSymbolVisitor.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,8 @@ class SILSymbolVisitorImpl : public ASTVisitor<SILSymbolVisitorImpl> {
269269
// We cannot emit the witness table symbol if the protocol is imported
270270
// from another module and it's resilient, because initialization of that
271271
// protocol is necessary in this case
272-
if (!rootConformance->getProtocol()->isResilient(
272+
if (Ctx.getOpts().FragileResilientProtocols ||
273+
!rootConformance->getProtocol()->isResilient(
273274
IDC->getAsGenericContext()->getParentModule(),
274275
ResilienceExpansion::Maximal))
275276
Visitor.addProtocolWitnessTable(rootConformance);

stdlib/cmake/modules/AddSwiftStdlib.cmake

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,10 @@ function(_add_target_variant_c_compile_flags)
453453
list(APPEND result "-DSWIFT_STDLIB_USE_RELATIVE_PROTOCOL_WITNESS_TABLES")
454454
endif()
455455

456+
if(SWIFT_STDLIB_USE_FRAGILE_RESILIENT_PROTOCOL_WITNESS_TABLES)
457+
list(APPEND result "-DSWIFT_STDLIB_USE_FRAGILE_RESILIENT_PROTOCOL_WITNESS_TABLES")
458+
endif()
459+
456460
if(SWIFT_STDLIB_OVERRIDABLE_RETAIN_RELEASE)
457461
list(APPEND result "-DSWIFT_STDLIB_OVERRIDABLE_RETAIN_RELEASE")
458462
endif()

stdlib/cmake/modules/StdlibOptions.cmake

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,10 @@ option(SWIFT_STDLIB_USE_RELATIVE_PROTOCOL_WITNESS_TABLES
270270
"Use relative protocol witness tables"
271271
FALSE)
272272

273+
option(SWIFT_STDLIB_USE_FRAGILE_RESILIENT_PROTOCOL_WITNESS_TABLES
274+
"Use fragile protocol witness tables for resilient protocols"
275+
FALSE)
276+
273277
if("${SWIFT_HOST_VARIANT_SDK}" IN_LIST SWIFT_DARWIN_PLATFORMS)
274278
set(SWIFT_STDLIB_INSTALL_PARENT_MODULE_FOR_SHIMS_default TRUE)
275279
else()

stdlib/cmake/modules/SwiftSource.cmake

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -629,6 +629,11 @@ function(_compile_swift_files
629629
list(APPEND swift_flags "-Xfrontend" "-swift-async-frame-pointer=never")
630630
endif()
631631

632+
if (SWIFT_STDLIB_USE_FRAGILE_RESILIENT_PROTOCOL_WITNESS_TABLES)
633+
list(APPEND swift_flags "-Xfrontend" "-enable-fragile-relative-protocol-tables")
634+
list(APPEND swift_flags "-enable-library-evolution")
635+
endif()
636+
632637
if(SWIFT_STDLIB_DISABLE_INSTANTIATION_CACHES)
633638
list(APPEND swift_flags "-Xfrontend" "-disable-preallocated-instantiation-caches")
634639
endif()
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
public protocol ResilientProto {
2+
associatedtype T
3+
func impl()
4+
}
5+
6+
7+
public struct ResilientStruct<T> : ResilientProto {
8+
var x : T?
9+
public init(_ t: T) {
10+
x = t
11+
}
12+
public func impl() {
13+
print(x)
14+
}
15+
}

test/IRGen/relative_protocol_witness_table.swift

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,21 @@
11
// RUN: %target-swift-frontend -enable-relative-protocol-witness-tables -module-name A -primary-file %s -emit-ir | %FileCheck %s --check-prefix=CHECK-%target-cpu --check-prefix=CHECK
22

3+
// Test with resilience enabled.
4+
// In this mode we still assume protocols to be "fragile"/non changeable.
5+
// RUN: %target-swift-frontend -enable-resilience -enable-fragile-relative-protocol-tables -enable-relative-protocol-witness-tables -module-name A -primary-file %s -I %t -emit-ir | %FileCheck %s --check-prefix=CHECK-%target-cpu --check-prefix=CHECK
6+
// RUN: %empty-directory(%t)
7+
// RUN: %target-swift-frontend -emit-module -enable-fragile-relative-protocol-tables -enable-library-evolution -enable-relative-protocol-witness-tables -emit-module-path=%t/resilient.swiftmodule -module-name=resilient %S/Inputs/relative_protocol_witness_tables2.swift
8+
// Inputs/relative_protocol_witness_tables2.swift
9+
// RUN: %target-swift-frontend -enable-fragile-relative-protocol-tables -enable-relative-protocol-witness-tables -module-name A -primary-file %s -I %t -emit-ir -DWITH_RESILIENCE | %FileCheck %s --check-prefix=CHECK-%target-cpu --check-prefix=CHECK
10+
// RUN: %target-swift-frontend -enable-fragile-relative-protocol-tables -enable-relative-protocol-witness-tables -module-name A -primary-file %s -I %t -emit-ir -DWITH_RESILIENCE | %FileCheck %s --check-prefix=EVO
11+
// RUN: not --crash %target-swift-frontend -enable-fragile-relative-protocol-tables -enable-relative-protocol-witness-tables -module-name A -primary-file %s -I %t -emit-ir -DWITH_RESILIENCE -DEXPECT_CRASH 2>&1 | %FileCheck %s --check-prefix=CRASH
12+
313
// REQUIRES: CPU=x86_64 || CPU=arm64 || CPU=arm64e
414

15+
#if WITH_RESILIENCE
16+
import resilient
17+
#endif
18+
519
func testVWT<T>(_ t: T) {
620
var local = t
721
}
@@ -323,3 +337,30 @@ func instantiate_conditional_conformance_2nd<T>(_ t : T) where T: Sub, T.S == T
323337
// CHECK: [[T26:%.*]] = call ptr @swift_getWitnessTableRelative({{.*}}@"$s1A1XVyxGAA4BaseA2aERzlMc{{.*}}, ptr {{.*}}, ptr [[T24]])
324338
// CHECK: [[T28:%.*]] = getelementptr inbounds ptr, ptr [[C0]], i32 1
325339
// CHECK: store ptr [[T26]], ptr [[T28]]
340+
341+
#if WITH_RESILIENCE
342+
public func requireFormallyResilientWitness<T: ResilientProto> (_ t: T) {
343+
t.impl()
344+
}
345+
346+
// EVO: define{{.*}} swiftcc void @"$s1A27useFormallyResilientWitnessyyF"()
347+
// EVO: call swiftcc void @"$s1A31requireFormallyResilientWitnessyyx9resilient0C5ProtoRzlF"(ptr noalias %4, ptr %1, ptr @"$s9resilient15ResilientStructVyxGAA0B5ProtoAAWP")
348+
public func useFormallyResilientWitness() {
349+
requireFormallyResilientWitness(ResilientStruct(1))
350+
}
351+
#endif
352+
353+
#if EXPECT_CRASH
354+
protocol P {
355+
func p()
356+
}
357+
358+
@available(SwiftStdlib 5.9, *)
359+
struct G<each T> {}
360+
361+
@available(SwiftStdlib 5.9, *)
362+
extension G: P where repeat each T: P {
363+
func p() {}
364+
}
365+
// CRASH: not supported
366+
#endif

test/lit.cfg

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1174,7 +1174,7 @@ if run_vendor == 'apple':
11741174

11751175
# TODO: consider making the addition of these flags dependent on the CMake
11761176
# setting for hermetic seal at link
1177-
if not config.swift_freestanding_is_darwin:
1177+
if not config.swift_freestanding_is_darwin and not config.swift_stdlib_use_use_fragile_resilient_protocol_witness_tables:
11781178
swift_execution_tests_extra_flags += ' -experimental-hermetic-seal-at-link -lto=llvm-full'
11791179

11801180
if not config.swift_freestanding_is_darwin:
@@ -1186,6 +1186,9 @@ if run_vendor == 'apple':
11861186
if config.swift_stdlib_use_relative_protocol_witness_tables:
11871187
swift_execution_tests_extra_flags += ' -Xfrontend -enable-relative-protocol-witness-tables -Xfrontend -swift-async-frame-pointer=never'
11881188

1189+
if config.swift_stdlib_use_use_fragile_resilient_protocol_witness_tables:
1190+
swift_execution_tests_extra_flags += ' -Xfrontend -enable-fragile-relative-protocol-tables'
1191+
11891192
# Build a resource dir for freestanding tests.
11901193
new_resource_dir = os.path.join(config.test_exec_root, "resource_dir")
11911194
if not os.path.exists(new_resource_dir): os.mkdir(new_resource_dir)

test/lit.site.cfg.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ if "@SWIFT_ENABLE_SYNCHRONIZATION@" == "TRUE":
162162

163163
config.swift_freestanding_is_darwin = "@SWIFT_FREESTANDING_IS_DARWIN@" == "TRUE"
164164
config.swift_stdlib_use_relative_protocol_witness_tables = "@SWIFT_STDLIB_USE_RELATIVE_PROTOCOL_WITNESS_TABLES@" == "TRUE"
165+
config.swift_stdlib_use_use_fragile_resilient_protocol_witness_tables = "@SWIFT_STDLIB_USE_FRAGILE_RESILIENT_PROTOCOL_WITNESS_TABLES@" == "TRUE"
165166
config.swift_enable_dispatch = "@SWIFT_ENABLE_DISPATCH@" == "TRUE"
166167
config.swift_stdlib_enable_objc_interop = "@SWIFT_STDLIB_ENABLE_OBJC_INTEROP@" == "TRUE"
167168
# Configured in DarwinSDKs.cmake

utils/build-presets.ini

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2730,6 +2730,42 @@ swift-stdlib-use-relative-protocol-witness-tables=1
27302730
test
27312731
validation-test
27322732

2733+
[preset: stdlib_S_standalone_minimal_macho_arm64_relative_resilient_protocol_witness_table,build,test]
2734+
mixin-preset=
2735+
stdlib_base_standalone
2736+
mixin_stdlib_minimal
2737+
2738+
build-subdir=stdlib_S_standalone
2739+
min-size-release
2740+
assertions
2741+
swift-stdlib-enable-assertions=false
2742+
2743+
verbose-build
2744+
2745+
swift-primary-variant-sdk=FREESTANDING
2746+
swift-primary-variant-arch=arm64
2747+
swift-freestanding-flavor=apple
2748+
swift-freestanding-sdk=macosx
2749+
stdlib-deployment-targets=freestanding-arm64
2750+
2751+
# For now, until clang/swiftc works correctly with "none-macho" as the OS part of target triple.
2752+
swift-freestanding-triple-name=macosx11.0
2753+
swift-freestanding-module-name=macos
2754+
swift-freestanding-archs=arm64
2755+
2756+
# For lit tests, we are producing dynamic executables with statically linked stdlib into the executable.
2757+
swift-runtime-static-image-inspection=0
2758+
2759+
swift-stdlib-experimental-hermetic-seal-at-link=0
2760+
swift-stdlib-lto=
2761+
swift-enable-runtime-function-counters=0
2762+
swift-stdlib-use-relative-protocol-witness-tables=1
2763+
swift-stdlib-use-fragile-resilient-protocol-witness-tables=1
2764+
2765+
test
2766+
validation-test
2767+
only-non-executable-test
2768+
27332769
[preset: stdlib_S_standalone_darwin_x86_64,build]
27342770
mixin-preset=
27352771
stdlib_S_standalone,build

utils/build-script-impl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ KNOWN_SETTINGS=(
227227
swift-stdlib-tracing "" "whether to enable tracing signposts for the stdlib; default is 1 on Darwin platforms, 0 otherwise"
228228
swift-stdlib-concurrency-tracing "" "whether to enable tracing signposts for concurrency; default is 1 on Darwin platforms, 0 otherwise"
229229
swift-stdlib-use-relative-protocol-witness-tables "0" "whether to use relative protocol witness table"
230+
swift-stdlib-use-fragile-resilient-protocol-witness-tables "0" "whether to use fragile resilient protocol witness table"
230231
swift-enable-runtime-function-counters "" "whether to enable runtime function counters"
231232
swift-stdlib-os-versioning "1" "whether to build stdlib with availability based on OS versions (Darwin only)"
232233
swift-stdlib-has-commandline "1" "whether to build stdlib with the CommandLine enum and support for argv/argc"
@@ -2003,6 +2004,13 @@ for host in "${ALL_HOSTS[@]}"; do
20032004
)
20042005
fi
20052006

2007+
if [[ "${SWIFT_STDLIB_USE_FRAGILE_RESILIENT_PROTOCOL_WITNESS_TABLES}" ]] ; then
2008+
cmake_options=(
2009+
"${cmake_options[@]}"
2010+
-DSWIFT_STDLIB_USE_FRAGILE_RESILIENT_PROTOCOL_WITNESS_TABLES:BOOL=$(true_false "${SWIFT_STDLIB_USE_FRAGILE_RESILIENT_PROTOCOL_WITNESS_TABLES}")
2011+
)
2012+
fi
2013+
20062014
if [[ "${SWIFT_RUNTIME_FIXED_BACKTRACER_PATH}" ]] ; then
20072015
cmake_options=(
20082016
"${cmake_options[@]}"

validation-test/lit.site.cfg.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ if "@SWIFT_STDLIB_ENABLE_DEBUG_PRECONDITIONS_IN_RELEASE@" == "TRUE":
141141

142142
config.swift_freestanding_is_darwin = "@SWIFT_FREESTANDING_IS_DARWIN@" == "TRUE"
143143
config.swift_stdlib_use_relative_protocol_witness_tables = "@SWIFT_STDLIB_USE_RELATIVE_PROTOCOL_WITNESS_TABLES@" == "TRUE"
144+
config.swift_stdlib_use_use_fragile_resilient_protocol_witness_tables = "@SWIFT_STDLIB_USE_FRAGILE_RESILIENT_PROTOCOL_WITNESS_TABLES@" == "TRUE"
144145
config.swift_enable_dispatch = "@SWIFT_ENABLE_DISPATCH@" == "TRUE"
145146
config.swift_stdlib_enable_objc_interop = "@SWIFT_STDLIB_ENABLE_OBJC_INTEROP@" == "TRUE"
146147
# Configured in DarwinSDKs.cmake

0 commit comments

Comments
 (0)