Commit Graph

1259 Commits

Author SHA1 Message Date
Pavel Yaskevich
4e7a089717 [ConstraintSolver] Fix handling of defaultable constraint in getPotentialBindings
While trying to find a fixed type for a given type variable, check if
it has representative and if it does, reflect that in the returned type.

Resolves: rdar://problem/34670592
2017-09-29 00:08:07 -07:00
Slava Pestov
a1aaa4e141 Sema: Remove a bogus assertion
Fixes <rdar://problem/32727557>.
2017-09-28 13:06:58 -07:00
swift-ci
cf801104dd Merge pull request #12153 from xedin/pretty-potentinal-bindings-output 2017-09-27 21:16:57 -07:00
Pavel Yaskevich
c08610bb0b [ConstraintSolver] NFC: Prettify output of bindings in PotentialBindings 2017-09-27 20:47:20 -07:00
Slava Pestov
044af751f3 Sema: Fix a failure to emit a diagnostic
CSDiag was misinterpreting the result of checkGenericArguments().

A result of SubstitutionFailure does not mean a diagnostic was
emitted, only a result of Failure means that. This fixes a case
where we did not emit a diagnostic, result in a crash on invalid.

The diagnostic is still poor, but that's better than crashing.

Fixes <https://bugs.swift.org/browse/SR-5932>,
<rdar://problem/34522739>.
2017-09-27 16:39:06 -07:00
Pavel Yaskevich
3b06f2e897 Merge pull request #12072 from xedin/rdar-33429010
[ConstraintGraph] Don't try to contract edge of parameter bindings with `inout` attribute
2017-09-26 11:51:09 -07:00
Mark Lacey
37cb6a80b3 Make Type::join return Any by default.
For the moment, update the sole caller to not infer Any in cases where
neither argument was Any. This is in part because not all the cases are
handled here and the result of inferring Any will be to miss appropriate
bindings in certain cases. It is also in part because by inferring Any
we may end up deferring diagnostics until later in a function, which may
result in very hard to understand diagnostics for users.

This will be revisted once all the cases are properly handled here.
2017-09-24 16:20:00 -07:00
Pavel Yaskevich
80e4a2226b [ConstraintGraph] Don't try to contract edge of parameter bindings with inout attribute
Currently edge related to the parameter bindings is contracted
without properly checking if newly created equivalence class has
the same inout & l-value requirements. This patch improves the
situation by disallowing contraction of the edges related to parameter
binding constraint where left-hand side has `inout` attribute set.

Such guarantees that parameter can get `inout` type assigned when
argument gets `l-value` type.

Resolves: rdar://problem/33429010
2017-09-22 17:23:12 -07:00
David Zarzycki
6dfcec2204 [tests] Ensure that functions do not subtype autoclosures 2017-09-21 21:25:28 -04:00
Kacper Harasim
3902688b04 [Diagnostics] Resolves: SR-5324 Improved diagnostic when instance member of outer type is referenced from nested type (#11609)
* [Diagnostics] Improved error diagnostics when inner type references instance member of outer type

Resolves: SR-5324.
2017-09-19 14:08:16 -07:00
Luke Larson
e1f11d2275 Add a negative test for generic binding checks 2017-09-18 11:18:22 -07:00
swift-ci
6cf42ae70f Merge pull request #11932 from rudkx/fix-let-binding 2017-09-14 15:55:06 -07:00
Mark Lacey
5770748b56 Eliminate name duplication in test case. 2017-09-14 15:22:11 -07:00
Pavel Yaskevich
d5fb892515 [ConstraintSolver] NFC: Cleanup dead-code related to contraction of subtype constraints in matchTypes
Since we no longer allow constraction of subtype constraints, workaround
which exists in `matchTypes`, for situations where left-hand side of such
constraint is going to be wrapped in `inout` type, is no longer required.

Resolves: rdar://problem/34137342, rdar://problem/34136625
2017-09-13 15:43:50 -07:00
John McCall
171d45d8c9 Move more of the signature validation of accessors into Sema.
Use this to remove the last bit of the hack to suppres noescape on setter
arguments.  Add a more comprehensive test of noescape's interaction with
accessors.
2017-09-13 01:11:00 -04:00
Maxim Moiseev
6c7d93491f Merge pull request #11627 from moiseev/swift-2-artifacts
[stdlib] Remove the Grand Renaming artifacts of Swift 3 era
2017-09-05 11:41:18 -07:00
Jordan Rose
f8b7db4e76 Excise the terms "blacklist" and "whitelist" from Swift source. (#11687)
The etymology of these terms isn't about race, but "black" = "blocked"
and "white" = "allowed" isn't really a good look these days. In most
cases we weren't using these terms particularly precisely anyway, so
the rephrasing is actually an improvement.
2017-08-30 09:28:00 -07:00
swift-ci
45d971cb2a Merge pull request #11531 from mkchoi212/master 2017-08-29 12:18:03 -07:00
Mark Lacey
6c7af2578f Add a regression test for function argument conversions.
Add a test to ensure that for closures that take an argument of type ()
can be written with or without an explicit argument in Swift 3 and Swift
4.
2017-08-29 11:44:32 -07:00
Mark Lacey
9ff4bd51e8 Make closures.swift test compile in both Swift 3 and 4 modes.
Split out the things that are really specific to Swift 3 into a new
closures_swift3.swift.

In the process I found that two things that should compile without error
under -swift-version 4 do not, so those tests are currently in
closures_swift3.swift and I have opened new bugs for the issues:

https://bugs.swift.org/browse/SR-5791
https://bugs.swift.org/browse/SR-5792
2017-08-29 11:42:56 -07:00
Max Moiseev
4c0368a02a [test] Cleaning up tests 2017-08-29 10:04:39 -07:00
Slava Pestov
ce12e643b7 Sema: Fix crash when we try to generate constraints for invalid code
Perhaps we shouldn't visit AST nodes for which pre-checking failed
at all, but that would be a bigger change.

Fixes <rdar://problem/34077439>.
2017-08-28 18:09:51 -07:00
Mike JS. Choi
3745d6b896 [Diagnostics] Provide contextual type when diagnosing invalid if-exp
Resolves [SR-910](https://bugs.swift.org/browse/SR-910).
2017-08-27 17:18:47 -05:00
Mark Lacey
54f2844acd Merge pull request #11629 from rudkx/bind-param-constraints
Try to ensure we try to bind the elements of BindParam constraints le…
2017-08-25 22:13:52 -07:00
Mark Lacey
a41fa9482f Try to ensure we try to bind the elements of BindParam constraints left-to-right.
If we allow the right-hand type to be bound first, it can artificially
limit the options for the left-hand side, so attempt to delay binding of
the right-hand side types until after we've chosen something for the
left-hand side.

The test here will not fail without this change, but will fail without
this change if the ConstraintGraph.cpp changes from @xedin's edge
contraction patch (https://github.com/apple/swift/pull/11118) are
applied.
2017-08-25 18:00:30 -07:00
Pavel Yaskevich
829ac700a8 [ConstraintSolver] Fix validation of DynamicTypeOf to use left-hand side's representative
When search for potential bindings for the given type variable
encounters `DynamicTypeOf` constraint, its validation should use
representative type variable of the left-hand side instead of
direct comparison.
2017-08-24 18:43:49 -07:00
Pavel Yaskevich
7f4fc5dc51 Merge pull request #11584 from xedin/dynamic-type-of_vs_any
[ConstraintSolver] When searching for viable bindings treat `DynamicT…
2017-08-24 00:47:11 -07:00
Mark Lacey
e726ad47fe Merge pull request #11556 from rudkx/fix-rdar33296619
[Type checker] Guard against recursing into non-single-expression clo…
2017-08-23 21:25:02 -07:00
Pavel Yaskevich
7c9840c204 [ConstraintSolver] When searching for viable bindings treat DynamicTypeOf constraint specially
When trying to find bindings let's avoid type variables which
represent left-hand side of the `DynamicTypeOf` constraint,
 because such type variables might be (implicitly) convertible to
[existential] metatype, but at the same time bound to something else
(e.g. Any), which fails when solver tries to simplify `DynamicTypeOf`
constraint itself.
2017-08-23 18:03:27 -07:00
Mark Lacey
b6dd52a531 [Type checker] Guard against recursing into non-single-expression closures.
In diagnoseUnintendedOptionalBehavior, guard against recursing into
non-single-expression closures. If we recurse into these, we can end
up hitting malformed ASTs that we do not expect. These happen when we
successfully type-check the code outside of the closure, but the
closure body has errors.

There are potentially other similar issues in other miscellaneous
diagnostics walks.

I opened https://bugs.swift.org/browse/SR-5758 to remind us to review
these and ensure they do not have similar issues.
2017-08-23 17:12:04 -07:00
Robert Widmann
5458fe15a0 Walk into the closure of a CaptureListExpr
Previously, the failure diagnosis visitor would
default to the generic expr walk which would wind
up type checking the closure body and calling it a day.
Walk into the closure of a capture list expression to
emit better diagnostics.

A regression test for SR-5747 is added.
2017-08-23 01:28:43 -07:00
Pavel Yaskevich
47353c25e2 [ConstraintSolver] Skip performance hacks in presence of unavailable overloads
Limit the scope of the performance hacks which currently exist in the
solver even further by disallowing it to skip generic overlaods or stop
in case when previous solutions involve unavailable overloads, which
otherwise might lead to producing incorrect overall solutions.
2017-08-21 14:55:17 -07:00
Robert Widmann
1a1157ded5 Merge pull request #11446 from CodaFi/like-a-bridge-over-troubled-decls
Reject member lookups that require bridging metatypes
2017-08-18 01:28:37 -07:00
Pavel Yaskevich
d646a33f02 [QoI] Add test-case for rdar://problem/33914444 2017-08-16 12:01:21 -07:00
Robert Widmann
3c1a6ab6d3 Reject member lookups that require bridging metatypes
We can only coerce metatypes covariantly but bridging
always requires an unrelated metatype cast.  When
performing member lookup, especially unqualified member
lookup, disregard static members from bridged types entirely.

See SR-5670 and rdar://problem/33830526
2017-08-13 12:39:33 -07:00
Michael Ilseman
a7b299b51b [tests] Update tests as String.CharacterView is deprecated 2017-08-11 12:32:39 -07:00
Pavel Yaskevich
a8e43f0718 Merge pull request #11375 from xedin/rdar-27700622
[ConstraintSolver] Fix computeFavoredTypeForExpr not to impose types …
2017-08-10 16:38:11 -07:00
Pavel Yaskevich
82cffe4cc0 [QoI] Add test-case for rdar://problem/28688585 2017-08-10 12:31:41 -07:00
Pavel Yaskevich
13e67ab1d7 [QoI] Add test-case for rdar://problem/33759839 2017-08-10 12:31:32 -07:00
Pavel Yaskevich
bbaa232731 [ConstraintSolver] Fix computeFavoredTypeForExpr not to impose types on the merged binary operators
`LinkedExprAnalyzer` is not always precise in collecting types of expressions,
so let's not try to impose anything upon linked operator expressions, which are
"mergable", except actually merging argument/result types together to help
constraint solver.

Resolves: rdar://problem/27700622
2017-08-10 12:31:17 -07:00
David Zarzycki
78298c8d2a [Sema] Remove vestigial member lookup path
The normal lookup path can handle all constructors just fine.
2017-08-09 20:25:09 -04:00
Arnold Schwaighofer
8146104b7e Revert "Simplify performMemberLookup()" 2017-08-09 10:56:38 -07:00
David Zarzycki
823e3e16c0 [Sema] Remove vestigial member lookup path
The normal lookup path can handle all constructors just fine.
2017-08-08 21:26:55 -04:00
Slava Pestov
1975b107f9 Sema: Fix recently-introduced crash with diagnostics of inout parameters
Recently TupleTypeElt was changed to add an inout bit. It is no
longer valid to construct tuple types whose elements have InOutType,
and instead the flag on the element must be set instead.

Update diagnoseImplicitSelfErrors() for the new convention.

Fixes the only remaining crash in the test case from <rdar://19569255>,
but the original issue were fixed long ago.
2017-08-06 00:43:23 -07:00
Pavel Yaskevich
80408d6b82 [QoI] Prevent a crash during diagnostics of ternary/if statements
While trying to diagnose problems with ternary/if statements don't
allow clauses, when type-checked separately, to have unresolved type
variables because that doesn't help to find errors.
2017-08-03 12:16:53 -07:00
Pavel Yaskevich
e8744af283 [QoI] Improve diagnostics for assignment expression
Currently `visitAssignExpr` always attempts to use type
derived from destination as a contextual type for assignment
source type-checking, which doesn't always lead to better
results.

Resolves: SR-5081
2017-08-02 18:17:49 -07:00
Pavel Yaskevich
bfbbcc1c91 [QoI] Improve diagnostics for misaligned archetypes with the same name in calls
Resolves: rdar://problem/24329052.
2017-08-01 12:17:16 -07:00
Pavel Yaskevich
242006706e [QoI] Improve diagnostics of unsatisfied generic requirements
Fixes a problem related to presence of InOutType in function parameters
which diagnostics related to generic parameter requirements didn't handle
correctly, and improves diagnostics for unsatisfied generic requirements
in operator applications, which we didn't attempt to diagnose at all.

Resolves: rdar://problem/33477726
2017-07-27 15:06:12 -07:00
Robert Widmann
3ae852ce8c Lower __shared to @guaranteed
Using the existing logic to lower 'self' parameters, we inherit
the benefits of the existing infrastructure for @guaranteed
argument values.
2017-07-25 18:09:17 -07:00
Dave Abrahams
31341e6753 Merge pull request #10976 from d-ronnqvist/reduce-with-inout
[stdlib] Implement SE-0171: Reduce with inout
2017-07-23 19:57:25 -07:00