Commit Graph

1119 Commits

Author SHA1 Message Date
Slava Pestov
595a7a530b RequirementMachine: Fix potential 'pollution' from installing an invalid requirement machine
If the substitution terms of a concrete type symbol contain unresolved
name symbols, we have an invalid requirement that is dropped from the
minimized signature. In this case, the rewrite system used for minimization
cannot be installed as the official rewrite system for this generic
signature, because building a rewrite system from the signature will
produce a different result.

This might be the cause of the crash in rdar://114111159.
2023-08-21 23:36:37 -04:00
Nishith Shah
8e2e625543 [Diagnostics] Use imperative msg for protocol conformance & switch-case fixits
This commit changes fixit messages from a question/suggestion to an
imperative message for protocol conformances and switch-case. Addresses
https://github.com/apple/swift/issues/67510.
2023-08-13 22:34:26 -07:00
Slava Pestov
c26cafc47a AST: Remove bogus PackExpansionType logic in lookupConformance() 2023-08-09 18:28:22 -04:00
Slava Pestov
971faebb61 Sema: Allow deriving hashValue witness in a tuple conformance to Hashable 2023-08-09 17:42:25 -04:00
Slava Pestov
979acd9025 AST/Sema: Fix a couple of minor issues with tuple conformances and add a new test case
The progress on variadic generics means we can now implement useful
witnesses in a tuple conformance. The feature remains very incomplete
though, today we crash in SILGen.
2023-08-04 16:33:47 -04:00
Slava Pestov
7ce6f37729 RequirementMachine: Correct concrete type unification with pack expansion on both sides 2023-07-25 02:47:46 -04:00
Slava Pestov
747b060389 RequirementMachine: Correct desugaring of same-type requirements with pack expansion on both sides 2023-07-25 02:47:45 -04:00
Holly Borla
43c300408b [NFC] Update additional parameter pack tests. 2023-07-20 15:36:20 -07:00
Slava Pestov
3f45c17336 AST: Fill in ASTContext::getSwift59Availability() 2023-07-07 13:57:13 -04:00
Slava Pestov
dca00debec RequirementMachine: Same-type requirements imply same-shape requirements
We want `T.A == U.B` to imply `shape(T) == shape(U)` if T (and thus U)
is a parameter pack.

To do this, we introduce some new rewrite rules:

1) For each associated type symbol `[P:A]`, a rule `([P:A].[shape] => [P:A])`.
2) For each non-pack generic parameter `τ_d_i`, a rule `τ_d_i.[shape] => [shape]`.

Now consider a rewrite rule `(τ_d_i.[P:A] => τ_D_I.[Q:B])`. The left-hand
side overlaps with the rule `([P:A].[shape] => [shape])` on the term
`τ_d_i.[P:A].[shape]`. Resolving the overlap gives us a new rule

    t_d_i.[shape] => T_D_I.[shape]

If T is a term corresponding to some type parameter, we say that `T.[shape]` is
a shape term. If `T'.[shape]` is a reduced term, we say that T' is the reduced
shape of T.

Recall that shape requirements are represented as rules of the form:

    τ_d_i.[shape] => τ_D_I.[shape]

Now, the rules of the first kind reduce our shape term `T.[shape]` to
`τ_d_i.[shape]`, where `τ_d_i` is the root generic parameter of T.

If `τ_d_i` is not a pack, a rule of the second kind reduces it to `[shape]`,
so the reduced shape of a non-pack parameter T is the empty term.

Otherwise, if `τ_d_i` is a pack, `τ_d_i.[shape]` might reduce to `τ_D_I.[shape]`
via a shape requirement. In this case, `τ_D_I` is the reduced shape of T.

Fixes rdar://problem/101813873.
2023-07-03 15:41:09 -04:00
Holly Borla
35bd5099ab Merge pull request #66632 from hborla/pack-diagnostics
[Diagnostics] Suppress printing explicit pack types in the ASTPrinter instead of stripping `PackType` out of diagnostic arguments.
2023-06-14 16:10:58 -07:00
Holly Borla
e42667bde6 [Diagnostics] Suppress printing explicit pack types in the ASTPrinter instead of
stripping PackType out of diagnostic arguments.

There are places in the type printing code that assume the substitution for a
type parameter pack is always a pack, and violating that invariant will crash
the compiler. We also never want to print 'Pack{...}' in diagnostics anyway,
so the print option is a better approach and fixes a few existing tests that still
contained 'Pack{...}' in error messages.
2023-06-14 11:57:18 -07:00
Slava Pestov
68e22e1fb1 AST: Fix logic error in TypeMatcher::visitParameterizedProtocolType()
Fixes https://github.com/apple/swift/issues/63410.
2023-06-14 13:09:01 -04:00
Slava Pestov
55a253a80b Sema: Variadic generic type aliases don't require runtime support 2023-06-06 14:18:37 -04:00
nate-chandler
9d474bc28d Merge pull request #65983 from nate-chandler/rdar108963047
[RequirementMachine] InferredGenericSignatureRequest uses valid location for generic signature requirements.
2023-05-18 07:05:47 -07:00
Nate Chandler
594e690a00 [Test] Added new redundancy warnings.
Now that `InferredGenericSignatureRequest` creates
`StructuralRequirement`s from of the generic signature with valid source
locations, additional redundancy warnings are produced.  Update tests
with the new warnings.
2023-05-17 15:16:23 -07:00
Nate Chandler
32156b5a99 [RequirementMachine] Used loc in sig reqs.
`InferredGenericSignatureRequest` creates `StructuralRequirement`s for
the requirements of the generic signature that is passed to it (if one
is).

Previously, it used invalid `SourceLoc`s for these requirements.  The
result was that when errors that were emitted as a result of those
`StructuralRequirement`s (during concrete type contraction), they would
also have invalid `SourceLoc`s.  The effect was that those errors were
ignored during `diagnoseRequirementErrors`.

Here, use the available loc for those requirements.

rdar://108963047
2023-05-17 15:16:23 -07:00
Nate Chandler
876915e339 [Test] Moved objc part of requirement_inference.
Gave it its own file to be guarded with REQUIRES: objc_interop.
2023-05-17 15:16:23 -07:00
Slava Pestov
e9e6a51c82 Unconditionally enable variadic generic types now that SE-0398 has been accepted 2023-05-15 23:32:52 -04:00
Anthony Latsis
3f629315a9 Merge pull request #65731 from AnthonyLatsis/always-print-any
ASTPrinter: Turn on explicit `any` printing for everything and remove the option to disable it
2023-05-16 03:27:36 +03:00
Slava Pestov
4318a36be6 Sema: Availability checking for variadic generic types 2023-05-12 22:50:25 -04:00
Anthony Latsis
7f6d3bcd41 ASTPrinter: Turn on explicit any printing for everything and remove the option to disable it 2023-05-13 02:55:49 +03:00
Slava Pestov
8f71dc928f Sema: Diagnose variadic enums, and inheritance from variadic classes
These are just temporary limitations.
2023-05-08 12:57:33 -04:00
Slava Pestov
2e9fd98933 Sema: Diagnose variadic types with more than one type parameter pack 2023-05-08 12:57:33 -04:00
Slava Pestov
290701cb4d Sema: Ban shadowing generic parameters from outer scopes
Code like that is usually indicative of programmer error, and does not
round-trip through module interface files since there is no source
syntax to refer to an outer generic parameter.

For source compatibility this is a warning, but becomes an error with
-swift-version 6.

Fixes rdar://problem/108385980 and https://github.com/apple/swift/issues/62767.
2023-04-25 17:41:23 -04:00
Slava Pestov
df5d531dc6 ASTPrinter: Fix printing of pack requirements
Also remove the flag for printing 'each' and make it always on.
2023-04-19 13:04:51 -04:00
Holly Borla
336da919fe [Features] Add a dedicated experimental feature flag for tuple conformances. 2023-04-15 17:23:25 -07:00
Holly Borla
234b5dc660 [SE-0393] Require the repeat keyword for generic requirement expansions. 2023-04-12 22:04:01 -07:00
Slava Pestov
b6b51cf4cf AST: Checking of pack requirements 2023-03-17 22:18:55 -04:00
Alex Hoppen
a05ab76249 Re-enable test/Generics/requirement_machine_diagnostics.swift
The underlying issue should be fixed by https://github.com/apple/swift-syntax/pull/1399

rdar://106457182
2023-03-10 15:08:41 -08:00
Nate Chandler
ee3fb5e4eb [Test] Disabled test failing in macOS PR testing.
rdar://106457182
2023-03-08 15:51:44 -08:00
Anthony Latsis
31a71c8125 Merge pull request #63545 from AnthonyLatsis/robust-fixit-verifications
DiagnosticVerifier: Implement defaulting behavior for lines in expected fix-it replacement range
2023-03-08 20:10:24 +03:00
Anthony Latsis
14b70f306b DiagnosticVerifier: Default expected fix-it start line to the diagnostic's 2023-03-08 12:10:27 +03:00
Pavel Yaskevich
8b63ce8273 Merge pull request #64143 from xedin/ambiguity-diag-improvements
[ConstraintSystem] A couple of improvements to ambiguity diagnostics
2023-03-07 11:57:51 -08:00
Pavel Yaskevich
342e5f6725 Merge pull request #64036 from xedin/rdar-106054263
[CSSimplify] Detect and diagnose generic argument mismatches individually
2023-03-06 10:18:09 -08:00
Pavel Yaskevich
4f2a1752c2 [ConstraintSystem] Produce ambiguity notes based on the fix aggregate
It shouldn't matter how many fixes does the solution have overall,
what matter is how many fixes are there for the location in question.
2023-03-06 10:17:51 -08:00
Pavel Yaskevich
b7745b04bd [CSSimplify] Detect and diagnose generic argument mismatches individually
Generic arguments types are not always resolved enough to enable
aggregated mismatch fixes, which means that the solver should be
able to handle standalone generic argument matching constraints
and create a fix per mismatch location to coalesce them during
diagnostics.

Resolves: rdar://106054263
2023-03-04 21:57:53 -08:00
Sophia Poirier
70cffb06f3 [Variadic Generics] type parameter pack syntax change: T... -> each T 2023-03-02 14:42:28 -08:00
Sophia Poirier
e8361dd8cd [Variadic Generics] fix tests incorrect pack expansion syntax in some tests, but also disable them due to triggering a constraints checker assertion 2023-01-27 16:50:40 -08:00
Holly Borla
679825063a [RequirementMachine] Only skip Sendable requirements inferred from preconcurrency
decls if the decl we're inferring the generic signature for is not itself
preconcurrency.
2023-01-19 20:28:50 -08:00
Holly Borla
d526e4c0e7 [RequirementMachine] Skip Sendable conformance requirements from preconcurrency
declarations in requirement inference.
2023-01-19 20:28:30 -08:00
Alexis Laferrière
32abd32ab3 [Test] Disable deserialization safety in test breaking access control 2023-01-11 15:11:11 -08:00
Holly Borla
6725f365ba [Variadic Generics] Update tests for syntax changes. 2023-01-07 09:50:14 -08:00
Slava Pestov
d602465dbf Parse: Allow an empty generic argument list, for variadic types 2022-11-29 22:15:55 -05:00
Slava Pestov
3dc7a2decd Sema: Fix substMemberTypeWithBase() for non-generic typealias with 'where' clause
getContextSubstitutionMap() builds a substitution map for the generic signature of
the parent context, which is wrong if the typealias has its own 'where' clause.
2022-11-28 23:57:53 -05:00
Slava Pestov
07b0c5c948 ASTPrinter: Print shape requirements in a way that parses 2022-11-12 02:13:54 -05:00
Holly Borla
c1dcb9c6f1 [FrontendOptions] Remove bespoke experimental feature flags for ImplicitSome and
VariadicGenerics in favor of -enable-experimental-feature X.
2022-11-11 10:14:08 -08:00
Slava Pestov
318e404ad5 Sema: Narrow SwiftUI type witness matching compatibility hack to building a swiftinterface
Fixes rdar://problem/91451771.
2022-11-03 00:20:35 -04:00
Slava Pestov
23abf74c0a RequirementMachine: Better error recovery from invalid protocol inheritance clauses
getInheritedProtocols() skips type resolution and directly resolves
TypeReprs to TypeDecls.

On the other hand, when building a protocol requirement signature,
we use type resolution to resolve inheritance clause entries so
that we can properly support parameterized protocol types, and
protocol compositions that contain classes.

Since a TypeRepr with an invalid sub-component resolves to an
ErrorType, this meant that in invalid code, the first list of
protocols might contain protocols that don't appear in the second.

This broke rewrite system invariants. Fix this by checking if
type resolution failed when building the requirement signature of
a protocol, and if so, also look at getInheritedProtocols().

Fixes https://github.com/apple/swift/issues/61020.
2022-11-01 11:05:36 -04:00
Holly Borla
6bd387e9fb Merge pull request #61775 from hborla/tuple-conformance-test
[NFC] Add a test case for user-defined tuple conformances.
2022-10-31 17:38:31 -07:00