Skip to content

Commit 5080898

Browse files
committed
[Serialization] Disable deserialization safety along with access control
Disabling access control is fundamentally incompatible with deserialization safety. Let's turn off safety automatically when in use. This was reported by a few tests: stdlib/Dictionary.swift stdlib/Set.swift stdlib/SetOperations.swift.gyb stdlib/SwiftNativeNSBase.swift
1 parent 35da8fb commit 5080898

File tree

2 files changed

+16
-6
lines changed

2 files changed

+16
-6
lines changed

lib/Frontend/CompilerInvocation.cpp

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -563,6 +563,17 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
563563
OPT_disable_deserialization_safety)) {
564564
Opts.EnableDeserializationSafety
565565
= A->getOption().matches(OPT_enable_deserialization_safety);
566+
} else if (auto A = Args.getLastArg(OPT_enable_access_control,
567+
OPT_disable_access_control)) {
568+
// Disable deserialization safety along with access control.
569+
Opts.EnableDeserializationSafety
570+
= A->getOption().matches(OPT_enable_access_control);
571+
}
572+
573+
if (auto A = Args.getLastArg(OPT_enable_access_control,
574+
OPT_disable_access_control)) {
575+
Opts.EnableAccessControl
576+
= A->getOption().matches(OPT_enable_access_control);
566577
}
567578

568579
// Whether '/.../' regex literals are enabled. This implies experimental
@@ -616,12 +627,6 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
616627
Args.hasArg(OPT_warn_on_potentially_unavailable_enum_case);
617628
Opts.WarnOnEditorPlaceholder |= Args.hasArg(OPT_warn_on_editor_placeholder);
618629

619-
if (auto A = Args.getLastArg(OPT_enable_access_control,
620-
OPT_disable_access_control)) {
621-
Opts.EnableAccessControl
622-
= A->getOption().matches(OPT_enable_access_control);
623-
}
624-
625630
if (auto A = Args.getLastArg(OPT_disable_typo_correction,
626631
OPT_typo_correction_limit)) {
627632
if (A->getOption().matches(OPT_disable_typo_correction))

test/Serialization/Safety/skip-reading-internal-details.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@
1818
// RUN: -disable-deserialization-safety 2>&1 \
1919
// RUN: | %FileCheck --check-prefixes=NEEDED,UNSAFE %s
2020

21+
// RUN: %target-swift-frontend -typecheck %t/Client.swift -I %t \
22+
// RUN: -verify -Xllvm -debug-only=Serialization \
23+
// RUN: -disable-access-control 2>&1 \
24+
// RUN: | %FileCheck --check-prefixes=NEEDED,UNSAFE %s
25+
2126
// RUN: %target-swift-frontend -typecheck %t/Client.swift -I %t \
2227
// RUN: -verify -Xllvm -debug-only=Serialization \
2328
// RUN: -enable-deserialization-safety 2>&1 \

0 commit comments

Comments
 (0)