Commit Graph

1251 Commits

Author SHA1 Message Date
Kavon Farvardin
2893e3dd8d Sema: reword inverse-on-extension message
We should be saying "can't suppress Copyable" instead, since you can't
"suppress" ~Copyable.
2024-06-12 14:44:22 -07:00
Kavon Farvardin
ec4a125f3e NCGenerics: ext's might not infer invertible req's
If the extension adds conformance to an invertible protocol, it's
confusing for people to also infer conditional requirements on the
generic parameters for those invertible protocols. This came up in the
review of SE-427.
2024-06-12 14:44:22 -07:00
Kavon Farvardin
8090e39a30 NCGenerics: fix "vague diagnostic for locator"
resolves the assertion failure in rdar://125196271 but not the
underlying issue.
2024-06-04 15:11:44 -07:00
Kavon Farvardin
c9cfe28e6d NCGenerics: improve diagnostics
Removing the old, ad-hoc diagnostics code improves the diagnostics we
emit, since the existing diagnostics for missing conformances is already
pretty good.

rdar://127369509
2024-06-04 15:06:32 -07:00
Kavon Farvardin
41577b3b55 Test: add a little test case 2024-05-20 18:56:53 -07:00
Kavon Farvardin
0420310623 NCGenerics: it's no longer "experimental"
resolves rdar://127701059
2024-05-08 10:49:12 -07:00
Kavon Farvardin
b3d548218b NCGenerics: omit flag in interfaces
Also cleans-up legacy code and tests that are no longer needed.
2024-04-18 21:57:44 -07:00
Kavon Farvardin
179bc4b605 Merge pull request #72820 from kavon/conditional-copyable-restriction
NCGenerics: restrict conditional Copyable reqs
2024-04-09 17:56:34 -07:00
Slava Pestov
480592a7d5 Merge pull request #72847 from slavapestov/fix-rdar123645784
Fix two problems with opaque return types -vs- parameter packs
2024-04-05 07:31:34 -04:00
Slava Pestov
6d3229a420 Sema: Update tuple conformance test case to use pack iteration
Unfortunately SILGen still blows up when emitting witness thunks here.
2024-04-04 19:36:25 -04:00
Kavon Farvardin
215c4e1c25 NCGenerics: restrict conditional Copyable reqs
It doesn't really make sense for a conditional conformance requirement
for `Copyable` to depend on any other requirement other than other
`Copyable` conformance requirements.

resolves rdar://124967739
2024-04-04 14:20:28 -07:00
Slava Pestov
454e5cff67 Merge pull request #72825 from slavapestov/two-minor-fixes-and-tests
RequirementMachine: Fix two minor crash on invalid bugs
2024-04-03 22:42:24 -04:00
Kavon Farvardin
e759a28f56 Merge pull request #72786 from kavon/ncgenerics-associatedtype-restriction
NCGenerics: introduce `SuppressedAssociatedTypes`
2024-04-03 16:28:54 -07:00
Slava Pestov
61dbaf892d RequirementMachine: Fix crash with protocol typealias having unbound generic type
Make sure we don't try to introduce an implicit same-type requirement
in this case.

Fixes rdar://problem/63731199.
2024-04-03 17:47:39 -04:00
Slava Pestov
31114f2cfd Add regression test for rdar://94848868 2024-04-03 16:48:02 -04:00
Slava Pestov
03467a1927 Add test case for rdar://124697829
This was fixed by 6cd5468cce.
2024-04-03 14:10:36 -04:00
Kavon Farvardin
30983530b6 NCGenerics: introduce SuppressedAssociatedTypes
The model for associated types hasn't been fully worked-out for
noncopyable generics, but there is some support already that is being
used by the stdlib for an internal-only (and rather cursed) protocol
`_Pointer` to support `UnsafePointer`, etc.

This patch gates the existing experimental support for associated types
behind a feature flag. This flag doesn't emit feature-guards in
interfaces, since support for it is tied closely to NoncopyableGenerics
and has been there from its early days.
2024-04-02 16:53:36 -07:00
Doug Gregor
bd696f9c05 Enable failable initializers for noncopyable types
Noncopyable types were prevented from having failable initializers
because `Optional` itself didn't support noncopyable types. Now
`Optional` does, so lift this restriction and add a test.
2024-04-01 17:29:41 -07:00
Slava Pestov
bee9fee58b RequirementMachine: Don't call ProtocolDecl::getSuperclass() in concrete contraction
This changes the minimized signature in a very narrow edge case.

If you have

    class C : P {}

and also

    protocol P : C {}
    protocol P where Self : C {}

then <T where T : P, T : C> now becomes <T : P> both with spellings;
before, the first one gave <T : P> and the second <T : C>.
2024-03-21 14:49:05 -04:00
Slava Pestov
bc85d66b96 AST: Don't call ProtocolDecl::getSuperclass() in lookupExistentialConformance() 2024-03-21 14:49:04 -04:00
Karoy Lorentey
4b1477cc2c [test] Update tests for new stdlib 2024-03-18 11:08:32 -07:00
Kavon Farvardin
f18c7f909a Test: fix and enable test
After removing the implicit conditional conformance synthesis for
inverses, this test wasn't updated.
2024-03-14 23:10:44 -07:00
Kavon Farvardin
47676b2248 Test: fix a number of NCGenerics-specific tests 2024-03-14 23:10:44 -07:00
Kavon Farvardin
102ccbc70b Test: updates for NoncopyableGenerics
These tests of the type system are being updated because of the new
presence of Copyable and Escapable conformances & conformance
requirements.
2024-03-14 23:10:44 -07:00
Kavon Farvardin
341ff24150 Test: fold together similar NCGenerics tests 2024-03-14 23:10:44 -07:00
Kavon Farvardin
af933c6723 Sema: remove TypeResolver::diagnoseMoveOnlyGeneric 2024-03-14 23:10:44 -07:00
Kavon Farvardin
71de500845 Test: update inverse_copyable_requirement.swift 2024-03-14 23:10:44 -07:00
Slava Pestov
3a4d831e52 AST: Fix crash-on-invalid when writing ~ followed by a non-protocol
Also reword some diagnostics. We don't want to talk about 'invert' or
'inverse'.
2024-03-11 14:36:21 -04:00
Slava Pestov
5afdb987e2 Merge pull request #72146 from slavapestov/ncgenerics-fixes-9
Non-copyable generics fixes, part 9
2024-03-07 22:14:33 -05:00
Slava Pestov
af8c8f1671 Sema: Remove non-experimental associated type inference 2024-03-07 17:30:17 -05:00
Slava Pestov
708586baea Sema: Remove a usage of hasInverseMarking()
This addresses some duplicate diagnostics from the previous commit.
2024-03-07 15:07:48 -05:00
Slava Pestov
41df661160 AST: Use a builtin conformance for unconditional Copyable/Escapable
This generalizes what we were already doing for classes.
2024-03-07 15:07:47 -05:00
Slava Pestov
dcea491dbe Sema: Remove inference of conditional Copyable conformance from generic parameters 2024-03-06 22:47:54 -05:00
Slava Pestov
10a2ddb95e RequirementMachine: Fix MaxConcreteNesting check to take initial rules into account
Fixes rdar://123357717.
2024-03-06 21:42:49 -05:00
Kavon Farvardin
19a5bb007e Test: more existential coverage 2024-03-02 09:57:04 -08:00
Holly Borla
9ba481ad53 [Diagnostics] Clarify the wording of error_in_future_swift_version. 2024-03-01 12:05:51 -08:00
Slava Pestov
1b99dd2451 RequirementMachine: Tweak RewriteSystem::recordConflict() heuristic again 2024-02-29 18:13:28 -05:00
Slava Pestov
4a1b0c80cd RequirementMachine: Install placeholder requirement signature if completion fails
I did this if there was a request cycle but forgot the other obvious case.
2024-02-29 18:13:28 -05:00
Slava Pestov
2f4ed5a949 Sema: Clean up diagnoseMissingOwnership()
- Pass down the TypeResolution instance so we can get the generic
  signature. This ensures we always use the correct signature in
  SIL mode.

- Don't diagnose if the type contains error types.
2024-02-29 18:13:28 -05:00
Slava Pestov
d3aa3a8db9 Adjust XFAILs 2024-02-29 13:55:48 -05:00
Kavon Farvardin
18f00668ce NCGenerics: fix ExistentialAny handling
The checking for ExistentialAny diagnostics needed to be updated to both
 handle the new Copyable/Escapable protocols that appear in the Any and
 AnyObject existential layouts.

resolves rdar://123332844
2024-02-27 14:15:34 -08:00
Slava Pestov
48f46f0e3c Sema: Redo the normalization in TypeResolver::resolveCompositionType() 2024-02-24 07:25:59 -05:00
Slava Pestov
1267f87251 AST: Fancier getPlaceholderRequirementSignature() 2024-02-24 07:25:59 -05:00
Slava Pestov
512a15939d Sema: Fix handling of inverse requirements in checkProtocolRefinementRequirements() 2024-02-24 07:25:59 -05:00
Slava Pestov
bd06653ee9 AST: Expand defaults in InheritedProtocolsRequest::evaluate() 2024-02-24 07:25:59 -05:00
Slava Pestov
dde28e96a2 AST: Don't call getDirectlyInheritedNominalTypeDecls() on a protocol in ConformanceLookupTable 2024-02-24 07:25:59 -05:00
Meghana Gupta
ca73cba046 Enable lifetime dependence inference when NonescapableTypes is on 2024-02-23 01:49:47 -08:00
Kavon Farvardin
84b309d506 NCGenerics: conformances can depend on Copyable 2024-02-21 22:38:23 -08:00
Pavel Yaskevich
28e13d57c4 Merge pull request #71752 from xedin/add-test-case-for-ncg-objc-protocols
[Tests] NFC: Add a test-case for self-conforming protocols and Copyab…
2024-02-21 09:28:27 -08:00
Slava Pestov
e7d7f6f69f RequirementMachine: Add Copyable/Escapable requirements to 'placeholder' generic signatures
If we fail to build a generic signature (or requirement signature of a
protocol) because of a request cycle or because Knuth-Bendix completion
failed, we would create a placeholder signature with no requirements.

However in a move-only world, a completely unconstrained generic
parameter might generate spurious diagnostics when used in a copyable
way. For this reason, let's outfit these placeholder signatures with
a default set of conformance requirements to Copyable and Escapable.
2024-02-20 18:26:05 -05:00