Commit Graph

1486 Commits

Author SHA1 Message Date
Alex Hoppen
6f22102bca Merge pull request #59996 from ahoppen/pr/more-dumping
Support dumping of null ASTNodes and ConstraintLocatorBuilder
2022-07-14 10:53:24 +02:00
Amritpan Kaur
65e32d77dd [CSBindings] Convert LiteralBindKind enum to String for use in printing type variable attributes. 2022-07-12 15:02:27 -07:00
Amritpan Kaur
ff2507be24 [ConstraintSystem] Convert TypeVariableOptions enum to String for use in printing. 2022-07-12 14:26:02 -07:00
Anthony Latsis
d74384cfcf Merge pull request #59931 from AnthonyLatsis/close-issues-3
Add regression tests to close several issues p. 3
2022-07-12 15:11:52 +03:00
Anthony Latsis
0a2293fd41 CSRanking: Check for timeouts during solution comparisons, which are time-consuming 2022-07-12 02:33:48 +03:00
Alex Hoppen
6416640794 [Sema] Support dumping of ConstraintLocatorBuilder 2022-07-11 11:45:06 +02:00
Doug Gregor
8ccaad3dec Merge pull request #59975 from DougGregor/cleanup-fix-behavior
Cleanup after recent refactoring for fix behaviors
2022-07-08 20:08:14 -07:00
Doug Gregor
732078bb1a Merge pull request #59973 from DougGregor/existential-erasure-coercion-configurable
Make the error for missing existential erasure coercions configurable.
2022-07-08 20:07:25 -07:00
Doug Gregor
db14ab140f Sink concurrency constraint fix behavior logic into "attempt" functions.
This is a cleaner pattern for the solver, thanks Pavel!
2022-07-08 13:33:14 -07:00
Doug Gregor
8a8efcb663 Drop ConstraintFix::diagfixBehavior() in favor of public const fixBehavior. 2022-07-08 13:25:00 -07:00
Doug Gregor
7436fb365a Rename CSFix::affectsSolutionScore() to impact(). 2022-07-08 13:03:12 -07:00
Doug Gregor
de7b840661 Replace CSFix::canApplySolution() with isFatal(). 2022-07-08 13:03:12 -07:00
Doug Gregor
3368dd4b6b Make the error for missing existential erasure coercions configurable. 2022-07-08 12:25:09 -07:00
Doug Gregor
b9afb79f50 Merge pull request #59963 from DougGregor/constraint-system-preconcurrency
[Constraint solver] Track "isolated by preconcurrency" in the solver.
2022-07-08 09:52:24 -07:00
Doug Gregor
5b537eab1b Merge pull request #59958 from DougGregor/constraint-solver-recoverable-error
[Constraint solver] Improve fix behaviors for better concurrency-related recovery and overloading
2022-07-08 09:51:53 -07:00
Doug Gregor
4fc4bd79e8 [Constraint solver] Track "isolated by preconcurrency" in the solver.
Rather than only setting the isolated-by-preconcurrency bit during
constraint application, track the closures it will be set for as part
of the constraint system and solution. Then, use that bit when
performing "strict concurrency context" checks and type adjustments,
so we don't treat an inferred-to-by-`@Sendable`-by-preconcurrency
closure in the solver as if it weren't related to preconcurrency.

Fixes the spurious warning from
https://github.com/apple/swift/issues/59910.
2022-07-07 23:46:30 -07:00
Doug Gregor
2e3aa67c02 [Constraint solver] Treat downgraded errors as "disfavored overloads".
This allows us to still maintain them in the score kind, but not treat
them as being as severe as an error requiring a fix.
2022-07-07 18:12:56 -07:00
Doug Gregor
c564698625 [Constraint solver] Improve modeling of fix behavior.
Rather than re-using `DiagnosticBehavior` to describe how a fix should
act, introduce `FixBehavior` to cover the differences between (e.g.)
always-as-awarning and downgrade-to-warning. While here, split the
`isWarning` predicate into two different predicates:

* `canApplySolution`: Whether we can still apply a solution when it
contains this particular fix.
* `affectsSolutionScore`: Whether

These two predicates are currently tied together, because that's the
existing behavior, but we don't necessarily want them to stay that way.
2022-07-07 12:17:11 -07:00
Alex Hoppen
da07d2deb2 [Sema] Add dump function to dump SolutionApplicationTargetsKey 2022-07-07 09:58:48 +02:00
Amritpan Kaur
f3dd7f68a8 [Constraint] Eliminate repetitive locators to make useful information easier to read. 2022-07-05 14:20:08 -07:00
Doug Gregor
218a3f79e0 [Constraint solver] Downgrade/ignore concurrency issues more generally.
Instead of the `warning` Boolean threaded through the solver's
diagnostics, thread `DiagnosticBehavior` to be used as the behavior
limit. Use this for concurrency checking (specifically dropped
`@Sendable` and dropped global actors) so the solver gets more control
over these diagnostics.

This change restores the diagnostics to a usable state after the prior
change, which introduced extra noise. The only change from existing
beavior is that dropping a global actor from a function type is now
always a warning in Swift < 6. This is partly intentional, because
there are some places where dropping the global actor is well-formed.
2022-07-01 11:45:44 -07:00
Holly Borla
48ada412b7 Merge pull request #59821 from hborla/remove-reuse-prechecked-type
[ConstraintSystem] Remove `ConstraintSystemFlags::ReusePrecheckedType`.
2022-07-01 08:12:47 -07:00
Doug Gregor
248b72bbff Track the pre-adjusted "reference" type for declaration reference. 2022-06-30 17:00:32 -07:00
Doug Gregor
1063e8126e [Constraint system] Track the original opened type for a selected overload. 2022-06-30 17:00:31 -07:00
Doug Gregor
045df94bca Delay @preconcurrency-related type adjustments until the last moment.
This allows us to retain the full opened type before adjustment when
needed, but should otherwise not change anything.
2022-06-30 16:59:54 -07:00
Holly Borla
38d81584e0 [ConstraintSystem] Remove ConstraintSystemFlags::ReusePrecheckedType. 2022-06-30 13:30:58 -07:00
Pavel Yaskevich
3fd3ff0637 [TypeChecker] Adjust Double<->CGFloat conversion to always preserve its location
Unfortunately current approach of making a conversion independent of location
doesn't work when conversion is required for multiple arguments to the
same call because solver expects that either there are no Double<->CGFloat
conversions, or one of them has already been applied which is not the case.

The reason why locations weren't preserved in the first place is due to
how a solution is applied to AST - AST is mutated first and then, if there
are any conversions, they are applied to the already mutated version of
original AST. This creates a problem for Double<->CGFloat which depends
on an overload choice of injected call and it's impossible to find it based
on the mutated AST. But it turns out that this is only an issue in two
specific cases - conversions against contextual type and after optional injection.
This situations could be mitigated by dropping parts of the locator which are
unimportant for the Double<->CGFloat conversion - anchor in case of contextual
and `OptionalPayload` element(s) in case of optional injection.

Resolves: https://github.com/apple/swift/issues/59374
2022-06-28 13:47:47 -07:00
Anthony Latsis
d76e74391f Merge pull request #59526 from AnthonyLatsis/closure_result_mismatch_diagQoI
Sema, DiagQoI: Fix and tailor diagnosis of explicit closure result type conflicts
2022-06-21 00:19:52 +03:00
Anthony Latsis
a07f2b4889 Sema, DiagQoI: Fix and tailor diagnosis of explicit closure result type conflicts 2022-06-20 22:20:32 +03:00
Becca Royal-Gordon
9b5f89963b [NFC] Serialize ObjC selectors for protocols
The ObjCMethodLookupTable for protocols was not being serialized and rebuilt on load, so NominalTypeDecl::lookupDirect() on selectors was not working correctly for deserialized types. Correct this oversight.
2022-06-16 14:07:49 -07:00
Pavel Yaskevich
7ba07ae3ba Merge pull request #59210 from xedin/conflicting-patterns-in-case
[Diagnostics] Diagnose conflicting pattern variables
2022-06-14 11:30:34 -07:00
Luciano Almeida
c9f10040f7 Merge pull request #59277 from LucianoPAlmeida/dictionary-array-literals
[Sema] Allow TreatArrayLiteralAsDictionary fix to handle literals with more than one element
2022-06-07 09:39:45 -03:00
Luciano Almeida
c6f00fae98 [Sema] Allow TreatArrayLiteralAsDictionary fix to handle literals with more than one element 2022-06-05 22:36:35 -03:00
Pavel Yaskevich
f15a0b16cb [CSFix] Detect conflicting pattern variables
The fix indentifies the conflicting variables and the expected
"join" type e.g. `case .a(let x), .b(let x)` where `a(Int)` and
`b(String)`.
2022-06-03 16:31:27 -07:00
Pavel Yaskevich
ef0523fe29 [ConstraintSystem] NFC: Remove obsolete ValueWitness constraint 2022-05-30 23:17:41 -07:00
Pavel Yaskevich
b7860ea055 [TypeChecker] Split for-in sequence into parsed and type-checked versions 2022-05-30 23:17:41 -07:00
Pavel Yaskevich
86165291aa [TypeChecker] Change the way for-in statement in type-checked
Instead of asking SILGen to build calls to `makeIterator` and
`$generator.next()`, let's synthesize and type-check them
together with the rest of for-in preamble. This greatly simplifies
interaction between Sema and SILGen for for-in statements.
2022-05-30 23:17:41 -07:00
Pavel Yaskevich
3327559758 [TypeChecker] IDE: Adjust typeCheckForCodeCompletion to support all targets
The dependency on target being an expression is artificial,
`typeCheckForCodeCompletion` is capable of type-checking any
type of target.
2022-05-30 23:17:41 -07:00
Pavel Yaskevich
22daa865b5 [ConstraintSystem] Make for-in solution application target standalone
Previously for-in target was actually an expression target, which means
certain type-checking behavior. These changes make it a standalone target
with custom behavior which would allow solver to introduce implicit
`makeIterator` and `next` calls and move some logic from SILGen.
2022-05-30 23:17:41 -07:00
Pavel Yaskevich
689e9e3861 Merge pull request #42559 from xedin/se-0352-as-any-coercion
[TypeChecker] SE-0352: Require coercion if result type contains existential(s) that would loose generic requirements
2022-05-27 09:44:31 -07:00
Pavel Yaskevich
0a5b3f0727 [TypeChecker] SE-0324: Extend Swift -> C pointer conversions to inout
Fixes an oversight where `inout` -> C pointer conversion wasn't covered
by implementation of new pointer conversion semantics proposed by SE-0324.

Resolves: rdar://92583588
2022-05-25 20:55:22 -07:00
Pavel Yaskevich
773ea6b10c [TypeChecker] Require a coercion if result of protocol member access would loose information
Accessing members on the protocol could result in existential opening and subsequence
result erasure, which requires explicit coercion if there is any loss of generic requirements.
2022-05-25 16:07:06 -07:00
Pavel Yaskevich
fc1ed430b9 [CSFix] Implement missing existential coercion fix 2022-05-25 16:07:05 -07:00
Pavel Yaskevich
8306724d81 [CSFix] Add a skeleton fix to require explicit existential coercion 2022-05-25 16:07:05 -07:00
Pavel Yaskevich
f3ff87b6f4 [Diagnostics] Diagnose re-labeling failures in ambiguity conditions
If all solutions point to the same overload choice that needs
re-labeling it's safe to diagnose it as if there was no ambiguity
because the call site is static.
2022-05-13 14:25:14 -07:00
Alex Hoppen
1843f22066 Merge pull request #58787 from ahoppen/pr/shorthand-closure-info
[CursorInfo] Report values shadowed using shorthand syntax as secondary results
2022-05-13 16:28:47 +02:00
Alex Hoppen
2b364930fc [CursorInfo] Report values shadowed using shorthand syntax as secondary results
When a variable is re-declared using shorthand syntax (`[foo]` closure capture or `if let foo {`), the user doesn’t perceive this as a new variable declaration. Thus, we should return the original declaration as a secondary result.

rdar://91311033
rdar://75455650
2022-05-11 08:05:26 +02:00
Alex Hoppen
9dbd5829de [CodeCompletion] Support type checking attributes even if they are not part of the AST
The code completion might occur inside an attriubte that isn’t part of the AST because it’s missing a `VarDecl` that it could be attached to. In these cases, record the `CustomAttr` and type check it standalone, pretending it was part of a `DeclContext`.

This also fixes a few issues where code completion previously wouldn’t find the attribute constructor call and thus wasn’t providing code completion inside the property wrapper.

rdar://92842803
2022-05-07 08:58:52 +02:00
Pavel Yaskevich
2c140bdf4d Merge pull request #58503 from xedin/rdar-92366212
[ConstraintSystem] Fail `~=` synthesis if constraint generation fails
2022-04-29 10:19:01 -07:00
Pavel Yaskevich
b0f7aefb8e [ConstraintSystem] NFC: Warn if result of generate* is unused
Not checking success of constraint generation could lead to crashes
e.g. when follow-up code accesses something that hasn't been processed
due to error.
2022-04-28 18:02:08 -07:00