Skip to content

Commit 19830a9

Browse files
authored
Merge pull request #65161 from xymus/deser-safety-misc
[Serialization] Compatibility fixes to deserialization safety and access-level
2 parents 21fa110 + 5080898 commit 19830a9

File tree

4 files changed

+22
-7
lines changed

4 files changed

+22
-7
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))

lib/Serialization/Serialization.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3146,7 +3146,7 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
31463146
// A decl is safe if formally accessible publicly.
31473147
auto accessScope = value->getFormalAccessScope(/*useDC=*/nullptr,
31483148
/*treatUsableFromInlineAsPublic=*/true);
3149-
if (accessScope.isPublic())
3149+
if (accessScope.isPublic() || accessScope.isPackage())
31503150
return true;
31513151

31523152
if (auto accessor = dyn_cast<AccessorDecl>(value))

test/Sema/package-only-references.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@
1717
// RUN: -package-name MyPackage -I %t \
1818
// RUN: -enable-experimental-feature AccessLevelOnImport
1919

20+
// RUN: %target-swift-frontend -typecheck %t/Client.swift -I %t \
21+
// RUN: -package-name MyPackage -I %t \
22+
// RUN: -enable-deserialization-safety \
23+
// RUN: -enable-experimental-feature AccessLevelOnImport
24+
2025
/// A client outside of the package raises errors.
2126
// RUN: %target-swift-frontend -typecheck %t/Client.swift -I %t \
2227
// RUN: -package-name NotMyPackage -I %t \

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)