Commit Graph

1659 Commits

Author SHA1 Message Date
Mark Lacey
43aebc832e Revert "IUO: Add support for non-subscript dynamic lookup." 2018-01-10 22:53:56 -08:00
Mark Lacey
a47d1f87c1 IUO: Add support for non-subscript dynamic lookup.
The subscript case will require some additional refactoring to
support.
2018-01-10 16:36:24 -08:00
Mark Lacey
33fcd72939 IUO: Small refactoring in support of dynamic lookup and keypaths.
Small refactoring which will make supporting dynamic lookup and
keypaths easier.
2018-01-10 16:13:50 -08:00
Mark Lacey
08e45b7a68 Merge pull request #13811 from rudkx/iuo-disjunctions-disabled
IUO: Create disjunctions for optional choices.
2018-01-08 18:32:42 -08:00
Mark Lacey
ad1dbac694 IUO: Create disjunctions for optional choices.
When binding an optional value, or function that returns an optional
value, if that value was produced from a decl that was declared an
IUO, create a disjunction.

After solving, make use of the disjunction choices in rewriting
expressions to force optionals where needed.

This is disabled for now, as it results in a source compatibility
issue without associated changes that actually start generating
Optional<T> in place of ImplicitlyUnwrappedOptional<T>. It's
complicated, but basically having two '??' (one returning T, one
returning T?) and creating a disjunction where the first (favored)
choice is ImplicitlyUnwrappedOptional<T> and second is T results in
our selecting the wrong '??' in some cases.
2018-01-08 14:31:03 -08:00
Arnold Schwaighofer
498f30bf0c Default argument generators of functions must return 'noescaping' function types
A default argument generator must not return a @noescape function type.
Returning a @noescape function is nonsense. That means the function escapes.

* Assert that we don't return @noescape function types
* Fix for throwing default arguments
* Add more test cases
* Adapt to mangling changes

Part of:
SR-5441
rdar://36116691
2018-01-08 07:53:06 -08:00
Mark Lacey
8dd11c0ad7 IUO: Fix the diagnostic for chaining from non-failable to failable init.
Rather than using the optional kind of the result type of the ctor we
chain to, check to see whether it has the IUO attribute set.
2018-01-06 20:02:18 -08:00
Slava Pestov
fbab72bd81 Sema: Fix crash when coercing a closure literal returning one uninhabited type to another
Silly corner case. Fixes <https://bugs.swift.org/browse/SR-4963>.
2018-01-05 23:41:41 -08:00
Mark Lacey
dbb293289a IUO: Replace one ConstraintLocator with two.
Replace ImplicitlyUnwrappedCoercionResult with the more general
ImplicitlyUnwrappedValue.

Add ImplicitlyUnwrappedDisjunctionChoice as a marker that indicates
that we've already created a disjunction from an
ImplicitlyUnwrappedValue, in order to avoid infinite recursion during
binding.

Also add support to buildDisjunctionForImplicitlyUnwrappedOptional for
functions returning optionals.

NFC.
2018-01-04 10:30:25 -08:00
Mark Lacey
8d86619fd7 IUO: Put the pieces in place to handle coercions and casts to IUO types.
For casts like 'x as T!' or 'x as! T!', generate a disjunction that
attempts to bind both the optional and non-optional T, preferring the
optional branch of the disjunction.

Note that this should effectively be NFC at the moment because we're
still generating the IUO type for T! rather than a plain optional, so
we first attempt the IUO type (as opposed to an Optional<T>) which
goes through existing logic that handles the IUOs as part of the type
system.

The new rewriting logic will actually do something once we switch over
to generating Optional<T> when T! is uttered.
2018-01-04 05:12:05 -08:00
swift-ci
d55466deea Merge pull request #13715 from rudkx/tweak-pointer-decl 2018-01-03 22:22:02 -08:00
Mark Lacey
347b52517a Minor tweak: Make it clear an auto variable is a pointer. 2018-01-03 21:32:34 -08:00
Mark Lacey
d1bb36425d IUO: Add overload choice kind for IUO decls.
Add a new OverloadChoiceKind for decls that are either IUO-typed, or
function-typed meaning that the function result type is IUO-typed.

Not currently used, so NFC.
2018-01-03 19:37:06 -08:00
David Zarzycki
1040d18227 [AST] NFC: Tail allocate TupleShuffleExpr data 2017-12-21 08:52:13 -05:00
David Zarzycki
dbb421ba95 [AST] NFC: Tail allocate ErasureExpr conformances 2017-12-20 09:35:15 -05:00
David Zarzycki
60d2f5586e [AST] QoI: Track DictionaryExpr commas and tail allocate CollectionExpr comma locs 2017-12-19 13:33:09 -05:00
Slava Pestov
bc990d38a8 Sema: Fix keypaths vs. lazy member validation
Constructing a keypath expression that references a class member
needs to validate all other members of the class (or a protocol,
but I couldn't reproduce a crash with that case -- added a test
anyway).

Fixes <rdar://problem/36083061>.
2017-12-17 19:10:18 -08:00
Mark Lacey
12e7caf5d7 Merge pull request #13357 from rudkx/remove-param-from-coerce-iuo-to-value
NFC: Remove unused locator param from coerceImpicitlyUnwrappedOptiona…
2017-12-10 13:50:50 -08:00
Mark Lacey
7eafe07f59 NFC: Remove unused locator param from coerceImpicitlyUnwrappedOptionalToValue. 2017-12-10 12:32:51 -08:00
Slava Pestov
336a97bc1a Sema: Diagnose invalid 'self.init' delegation where 'self' is an archetype
This is a corner case but would previously lead to a compiler crash
or miscompile.

Fixes <rdar://problem/21991470>, <https://bugs.swift.org/browse/SR-5022>.
2017-12-08 17:46:16 -08:00
Slava Pestov
71afed85d4 Sema: Clean up 'polymorphic use of non-required initializer' diagnostic 2017-12-08 17:46:16 -08:00
Doug Gregor
dc8b970051 [SE-0143] Eliminate assertions blocking the use of conditional conformances.
Early on in the development of conditional conformances, we put in a bunch
of assertions for code that uses `conformsToProtocol()` but wasn't handling
conditional conformances. Now, `conformsToProtocol()` handles conditional
conformances by default, and these assertions are tripping up code
that would work.

Remove the assertions and add test cases that used to trip up the
assertions (but now work).
2017-12-04 11:28:00 -08:00
Mark Lacey
fda51bb6b2 [ConstraintSystem] Eliminate the notion of FixKind::None
These purportedly mark that we should stop attempting fixes for a given
constraint, but in fact the only code creating these is clearly
unreachable so these serve no purpose.
2017-12-01 16:18:16 -08:00
Doug Gregor
e3a5318b97 [Type checker] Teach conformsToProtocol() to check conditional requirements.
conformsToProtocol() is the main way in which we check whether a given type
conforms to a given protocol. Extend it to check conditional requirements by
default, so that an unmodified caller will get the "does not conform" result
(with diagnostics when a location is present) rather than simply ignoring
the conditional requirements.

Some callers take responsibility for conditional requirements, e.g., to
push them into the constraint system. Allow those callers to opt out of
this checking, and do so wherever appropriate.

Fixes rdar://problem/35518088, where we were ignoring the conditional
requirements needed to verify that Equatable synthesis could be performed.
2017-11-21 21:02:00 -08:00
Doug Gregor
0b4b05a67b [Constraint application] Remove a bogus assertion.
THe constraint solver validates that any conditional requirements have
been satisfied; we don't need to fail here.
2017-11-17 10:52:04 -08:00
Pavel Yaskevich
92e2a25991 Merge pull request #12934 from xedin/rdar-35198459
[CSApply] Fix source breakage related to deep-equality types and SE-0110
2017-11-17 00:15:11 -08:00
Pavel Yaskevich
05d524d6e0 [CSApply] Fix source breakage related to deep-equality types and SE-0110
Fix problem related to Swift 3 mode (with assertions),
since Swift 3 mode allows passing arguments with extra parens
to parameters which don't expect them, it should be supported
by "deep equality" types e.g. Optional<T>:

```swift
func foo(_: (() -> Void)?) {}
func bar() -> ((()) -> Void)? { return nil }
foo(bar) // This expression should compile in Swift 3 mode
```

Resolves: rdar://problem/35198459
2017-11-16 21:56:24 -08:00
Pavel Yaskevich
7b121de1a0 [CSRanking] Change ranking to weight overload choices in evaluation order
Consider different overload choices for the same location in evaluation
order, this makes overload resolution more predictable because it's going
to follow expression bottom-up, that prevents situations when some
expressions are considered ambigious because choices taken further up
equate the score, instead each level is given distinct weight
based on evaluation order.

Resolves: rdar://problem/31888810
2017-11-16 13:38:24 -08:00
Slava Pestov
4096000530 Merge pull request #12942 from slavapestov/lazy-protocol-member-validation
Lazy protocol member validation
2017-11-15 18:03:40 -08:00
Slava Pestov
772bd7634c Sema: Lazily validate protocol members 2017-11-15 16:26:27 -08:00
Greg Parker
e8475cc130 Revert "Use conditional conformances to implement Equatable for Optional, Array and Dictionary" 2017-11-15 14:17:22 -08:00
Doug Gregor
600c967563 [Constraint application] Remove a bogus assertion.
THe constraint solver validates that any conditional requirements have
been satisfied; we don't need to fail here.
2017-11-14 16:23:20 -08:00
Joe Groff
4b401e257a Merge pull request #12835 from jckarter/key-path-type-checking
Sema: Fixes for KeyPath type checking.
2017-11-14 13:10:44 -08:00
Joe Groff
73d2e9a47f Sema: Fixes for KeyPath type checking.
When testing KeyPathApplication constraints, we would keep going after rejecting a concrete KeyPath application by trying PartialKeyPath and AnyKeyPath, even though that's not what we want, since any key path application expression can type check with an AnyKeyPath. We would then miscompile by building the AST such that we applied the mismatched key path expression directly to the base. We also didn't handle expressions where the base was a subtype of the key path's base type correctly—the conversion means the base can't be written through in this situation, and we hardcoded the concrete-to-existential case instead of handling general conversions. Fix these problems, and add an AST verifier for KeyPathApplicationExprs to help catch problems in the future. Fixes SR-6300 | rdar://problem/35368903.
2017-11-09 11:57:23 -08:00
Greg Titus
20a488225a Merge pull request #12642 from gregomni/6204
[Sema] Don't suggest adding 'as' in a pattern matching context where it will do no good.
2017-11-07 10:02:58 -08:00
Slava Pestov
4eef3615ee Sema: coerceToRValue() never returns nullptr 2017-10-31 20:22:41 -07:00
Davide Italiano
330fb1ce2f [gardening] Remove some unused variables. NFCI. 2017-10-30 15:19:55 -07:00
gregomni
55edab880f Don't suggest adding 'as' in a pattern matching context where it will do no good. 2017-10-26 15:51:59 -07:00
Slava Pestov
b39a6eda1d Sema: Coerce base to rvalue when calling a DeclViaBridging overload kind
This code path is only used for a special purpose hack to make
NSString members available on String. Since it is rarely
exercised, it was broken.
2017-10-24 20:45:49 -07:00
Slava Pestov
31176d713a Sema: Only validate all members of a class if we access one of its members
... Or if we subclass it, or define an extension of it.
2017-10-22 20:05:01 -07:00
Greg Titus
abb6156eb9 Merge pull request #12553 from gregomni/6198
[Sema] When subscripting with a keypath, check for the path being an IUO.
2017-10-21 16:42:27 -07:00
gregomni
a76d74b6d4 When subscripting with a keypath, check for the path being an IUO. 2017-10-21 16:12:28 -07:00
David Zarzycki
835906c543 [Sema] NFC: Simplify type coercion of ClosureExprs
* If we have an updatable ClosureExpr, then both fromEI.isAutoClosure()
  and toEI.isAutoClosure() must be false because the type system ensures
  that normal closures and functions do not convert to auto-closures.
* If we have a throwing ClosureExpr, then fromEI.throws() and
  toEI.throws() must be true, otherwise an erroneous throwing to
  non-throwing closure/function conversions would be possible. From a
  different perspective, updating the 'throws' bit would make sense if
  overloading on 'throws' wasn't possible.
2017-10-16 16:48:08 -04:00
gregomni
0188e1cb65 Incorrect condition here resulted in incorrectly trying to optional-wrap for an optional chain to optional lvalue. 2017-10-15 15:31:06 -07:00
Doug Gregor
cd3c63cbfd [AST] Stop including GenericSignature.h in other headers.
Except GenericEnvironment.h, because you can't meaningfully use a
GenericEnvironment without its signature. Lots less depends on
GenericSignature.h now. NFC
2017-10-12 14:23:46 -07:00
Huon Wilson
8e50a1666f [AST&Sema] Add assertions for conditional conformances.
These are just places that may need updating for conditional
conformances, and so having them flag eagerly will help in future.
2017-10-10 20:17:41 -07:00
Huon Wilson
945f723d59 [AST] Compute conditional requirements in a conformance.
This allows determining which requirements make a conformance conditional; as
in, which requirements aren't known as part of the type itself.

Additionally, use this to assert that a few builtin protocols aren't
conditionally-conformed-to, something we won't support for now.
2017-10-10 20:17:39 -07:00
Joe Groff
d3a2a0ff82 Sema: Coerce the type of the index expression in a key path component to match the subscript decl's index type.
Fixes SR-6062 | rdar://problem/34835322.
2017-10-05 14:33:21 -07:00
Slava Pestov
a1aaa4e141 Sema: Remove a bogus assertion
Fixes <rdar://problem/32727557>.
2017-09-28 13:06:58 -07:00
Slava Pestov
55916fa128 Sema: Remove usages of getDeclaredTypeOfContext() 2017-09-19 22:12:29 -07:00