Skip to content

Commit 7ca4041

Browse files
authored
Merge pull request #75267 from kavon/revert-backcompat-removal
Revert "NCGenerics: remove the reverse-condfail workaround"
2 parents ad8b0f3 + 1fa02fb commit 7ca4041

File tree

5 files changed

+52
-0
lines changed

5 files changed

+52
-0
lines changed

include/swift/Basic/Features.def

+2
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,8 @@ EXPERIMENTAL_FEATURE(DebugDescriptionMacro, true)
393393

394394
EXPERIMENTAL_FEATURE(ReinitializeConsumeInMultiBlockDefer, false)
395395

396+
EXPERIMENTAL_FEATURE(SE427NoInferenceOnExtension, false)
397+
396398
#undef EXPERIMENTAL_FEATURE_EXCLUDED_FROM_MODULE_INTERFACE
397399
#undef EXPERIMENTAL_FEATURE
398400
#undef UPCOMING_FEATURE

lib/AST/FeatureSet.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ UNINTERESTING_FEATURE(CImplementation)
220220
UNINTERESTING_FEATURE(Sensitive)
221221
UNINTERESTING_FEATURE(DebugDescriptionMacro)
222222
UNINTERESTING_FEATURE(ReinitializeConsumeInMultiBlockDefer)
223+
UNINTERESTING_FEATURE(SE427NoInferenceOnExtension)
223224

224225
// ----------------------------------------------------------------------------
225226
// MARK: - FeatureSet

lib/Sema/TypeCheckGeneric.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -788,6 +788,15 @@ GenericSignatureRequest::evaluate(Evaluator &evaluator,
788788
// to invertible protocols. This forces people to write out the conditions.
789789
inferInvertibleReqs = !ext->isAddingConformanceToInvertible();
790790

791+
// FIXME: to workaround a reverse condfail, always infer the requirements if
792+
// the extension is in a swiftinterface file. This is temporary and should
793+
// be removed soon. (rdar://130424971)
794+
if (auto *sf = ext->getOutermostParentSourceFile()) {
795+
if (sf->Kind == SourceFileKind::Interface
796+
&& !ctx.LangOpts.hasFeature(Feature::SE427NoInferenceOnExtension))
797+
inferInvertibleReqs = true;
798+
}
799+
791800
collectAdditionalExtensionRequirements(ext->getExtendedType(), extraReqs);
792801

793802
auto *extendedNominal = ext->getExtendedNominal();

test/ModuleInterface/noncopyable_generics.swift

+8
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
// RUN: %empty-directory(%t)
22

3+
// Due to SE427NoInferenceOnExtension not being in production
4+
// REQUIRES: asserts
5+
36
// RUN: %target-swift-frontend -swift-version 5 -enable-library-evolution -emit-module \
47
// RUN: -enable-experimental-feature SuppressedAssociatedTypes \
58
// RUN: -enable-experimental-feature NonescapableTypes \
9+
// RUN: -enable-experimental-feature SE427NoInferenceOnExtension \
610
// RUN: -o %t/NoncopyableGenerics_Misc.swiftmodule \
711
// RUN: -emit-module-interface-path %t/NoncopyableGenerics_Misc.swiftinterface \
812
// RUN: %S/Inputs/NoncopyableGenerics_Misc.swift
913

1014
// RUN: %target-swift-frontend -swift-version 5 -enable-library-evolution -emit-module \
1115
// RUN: -enable-experimental-feature SuppressedAssociatedTypes \
1216
// RUN: -enable-experimental-feature NonescapableTypes \
17+
// RUN: -enable-experimental-feature SE427NoInferenceOnExtension \
1318
// RUN: -o %t/Swiftskell.swiftmodule \
1419
// RUN: -emit-module-interface-path %t/Swiftskell.swiftinterface \
1520
// RUN: %S/../Inputs/Swiftskell.swift
@@ -24,16 +29,19 @@
2429
// RUN: %target-swift-frontend -compile-module-from-interface \
2530
// RUN: -enable-experimental-feature SuppressedAssociatedTypes \
2631
// RUN: -enable-experimental-feature NonescapableTypes \
32+
// RUN: -enable-experimental-feature SE427NoInferenceOnExtension \
2733
// RUN: %t/NoncopyableGenerics_Misc.swiftinterface -o %t/NoncopyableGenerics_Misc.swiftmodule
2834

2935
// RUN: %target-swift-frontend -compile-module-from-interface \
3036
// RUN: -enable-experimental-feature SuppressedAssociatedTypes \
3137
// RUN: -enable-experimental-feature NonescapableTypes \
38+
// RUN: -enable-experimental-feature SE427NoInferenceOnExtension \
3239
// RUN: %t/Swiftskell.swiftinterface -o %t/Swiftskell.swiftmodule
3340

3441
// RUN: %target-swift-frontend -emit-silgen -I %t %s \
3542
// RUN: -enable-experimental-feature SuppressedAssociatedTypes \
3643
// RUN: -enable-experimental-feature NonescapableTypes \
44+
// RUN: -enable-experimental-feature SE427NoInferenceOnExtension \
3745
// RUN: -o %t/final.silgen
3846

3947
// RUN: %FileCheck %s --check-prefix=CHECK-SILGEN < %t/final.silgen
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: split-file %s %t
3+
// RUN: %target-swift-typecheck-module-from-interface(%t/bug.swiftinterface) -I %t
4+
5+
//--- bug.swiftinterface
6+
7+
// swift-interface-format-version: 1.0
8+
// swift-compiler-version: Apple Swift version 6.0 effective-5.10 (swiftlang-6.0.0.4.52 clang-1600.0.21.1.3)
9+
// swift-module-flags: -enable-objc-interop -enable-library-evolution -module-name bug
10+
import Swift
11+
import _Concurrency
12+
import _StringProcessing
13+
import _SwiftConcurrencyShims
14+
#if compiler(>=5.3) && $NoncopyableGenerics
15+
public enum Maybe<Wrapped> : ~Swift.Copyable where Wrapped : ~Copyable {
16+
case just(Wrapped)
17+
case none
18+
}
19+
#else
20+
public enum Maybe<Wrapped> {
21+
case just(Wrapped)
22+
case none
23+
}
24+
#endif
25+
#if compiler(>=5.3) && $NoncopyableGenerics
26+
extension bug.Maybe : Swift.Copyable {
27+
}
28+
#else
29+
extension bug.Maybe {
30+
}
31+
#endif
32+

0 commit comments

Comments
 (0)