Commit Graph

4003 Commits

Author SHA1 Message Date
Doug Gregor
32fd274f5e Merge pull request #19391 from DougGregor/assoc-conformance-default-witnesses
[ABI] Associated conformance defaults
2018-09-19 13:15:46 -07:00
Joe Groff
93b5de61e7 Implement the final approved syntax for SE-227 identity key paths.
`\.self` is the final chosen syntax. Implement support for this syntax, and remove the stopgap builtin and `WritableKeyPath._identity` property that were in place before.
2018-09-19 11:45:13 -07:00
Doug Gregor
fb62977c2b [IRGen] Emit default associated conformance witnesses.
For a resilient protocol that has defaulted associated types, emit
default associated conformance witnesses that compute associated
conformances based on that default witness.

This completes the implementation of resilience protocols that
add new, defaulted associated types, rdar://problem/44167982.
2018-09-19 10:56:20 -07:00
Slava Pestov
7c186dd71e Merge pull request #19341 from slavapestov/silgen-argumentsource
Refactoring ArgumentSource and PreparedArguments
2018-09-17 09:51:59 -07:00
Doug Gregor
2ef9363bd1 [ABI] Add default associated type witnesses to resilient protocols.
When an associated type witness has a default, record that as part of
the protocol and emit a default associated type metadata accessor into the
default witness table. This allows a defaulted associated type to be
added to a protocol resiliently.

This is another part of rdar://problem/44167982, but it’s still very
limiting because the new associated type cannot have any conformances.
2018-09-15 22:04:46 -07:00
Doug Gregor
4ed973329a [SIL] Unify default witness table entries with witness table entries.
SILWitnessTable::Entry already contains a superset of what was supported
by SILDefaultWitnessTable::Entry, the latter of which only had “no entry”
and “method” states. Make SILDefaultWitnessTable::Entry an alias for
SILWitnessTable::Entry, and unify all of the parsing/printing/
(de)serialization logic.
2018-09-15 22:04:46 -07:00
Slava Pestov
817555254c SILGen: Change PreparedArguments to use an array of AnyFunctionType::Param
This solves a recently-added TODO, eliminating two usages of
FunctionType::getInput() from SILGen.
2018-09-15 21:19:59 -07:00
Slava Pestov
3527e54bbd SILGen: Move usages of AbstractionPattern::getFunctionInputType() closer to their uses 2018-09-15 21:19:56 -07:00
Slava Pestov
17cdc663a3 SILGen: Remove ArgumentSource::rewriteType() 2018-09-15 21:19:31 -07:00
Slava Pestov
82ecbde678 SILGen: Remove ArgumentSource::Kind::Tuple 2018-09-15 21:06:03 -07:00
Slava Pestov
1913b55732 SILGen: Rename ArgumentSource::requiresCalleeToEvaluate() to ArgumentSource::isShuffle()
Also, move the check to make it explicit that only a TupleShuffleExpr
at the top level goes through the argument emission code path; a
TupleShuffleExpr appearing inside a ParenExpr or TupleExpr is a
tuple conversion, which is totally unrelated and emitted as an RValue.

This is unfortunate and we should split off ArgumentShuffleExpr from
TupleShuffleExpr, and eventually, fold ArgumentShuffleExpr into
ApplyExpr.
2018-09-15 21:06:03 -07:00
Slava Pestov
8e4bde8b97 SILGen: Remove dead code from Swift 3 removal 2018-09-15 21:06:03 -07:00
Slava Pestov
493491b614 SILGen: Remove ArgumentSource::getSubstType()
This pushes an InOutType usage down to PreparedArguments, which still
needs to be refactored to use AnyFunctionType::Param.
2018-09-14 13:37:43 -07:00
Slava Pestov
2100e23c7a SILGen: Remove InOutType usages from ArgEmitter 2018-09-14 13:37:43 -07:00
Slava Pestov
eebaa3122f SILGen: Remove ArgumentSource::getSILSubst{RValue,}Type() 2018-09-14 13:37:43 -07:00
Slava Pestov
e399bd9b2e SILGen: VTable and witness thunk emission uses new function type representation
This eliminates the only usage of AbstractionPattern::dropLastTupleElement().

For now, we keep the argument tuple-based entry points in TransformArguments
as well, because they're used by re-abstraction thunks. Those require a bit more
refactoring.
2018-09-14 13:37:46 -07:00
Saleem Abdulrasool
4baa775726 Merge pull request #19297 from compnerd/unreachable
litter the tree with `llvm_unreachable`
2018-09-14 09:04:56 -07:00
Saleem Abdulrasool
d281b98220 litter the tree with llvm_unreachable
This silences the instances of the warning from Visual Studio about not all
codepaths returning a value.  This makes the output more readable and less
likely to lose useful warnings.  NFC.
2018-09-13 15:26:14 -07:00
Joe Groff
8665342877 Merge pull request #19151 from jckarter/allocating-convenience-initializers
Dispatch initializers by their allocating entry point
2018-09-13 15:17:34 -07:00
Joe Groff
77a0923ca6 SILGen: Emit convenience initializers as allocating entry points.
And only dispatch designated inits by their allocating entry points. rdar://problem/29634243
2018-09-13 12:31:23 -07:00
Slava Pestov
c69d43e87d SILGen: Fix crash when emitting foreign-to-native thunk for allocating init in -swift-version 5
This comes up when we import a static factory method as a convenience init.
The thunk was using DynamicSelfType as the type of a basic block argument,
because that was the type of the 'self' parameter in -swift-version 5.

Fixes <rdar://problem/44242156>.
2018-09-11 15:22:30 -07:00
swift-ci
cc329fee03 Merge pull request #19141 from aschwaighofer/remove_constant_string_literal 2018-09-10 15:51:47 -07:00
Doug Gregor
2246e2bf60 [SILGen] Cope with protocol requirement overrides for keypaths.
When emitting accessor calls for keypaths, make sure that we reference
protocol requirements that introduce witness table entries. Other
protocol requirements don't have the necessary dispatch thunks,
resulting in linker errors.

Fixes rdar://problem/44187969.
2018-09-09 20:13:54 -07:00
swift-ci
5e2b705f6d Merge pull request #19131 from gottesmm/pr-67d16ab8862dce3cff561b2a4dbee16514133383 2018-09-06 15:02:39 -07:00
Michael Gottesman
0290cd4323 [sil] Eliminate end_borrow_argument now that end_borrow has a single operand.
I changed all of the places that used end_borrow_argument to use end_borrow.

NOTE: I discovered in the process of this patch that we are not verifying
guaranteed block arguments completely. I disabled the tests here that show this
bad behavior and am going to re-enable them with more tests in a separate PR.
This has not been a problem since SILGen does not emit any such arguments as
guaranteed today. But once I do the SILGenPattern work this will change.

rdar://33440767
2018-09-06 14:04:57 -07:00
swift-ci
59efeed943 Merge pull request #19062 from rudkx/rdar19785368 2018-09-06 10:32:23 -07:00
Doug Gregor
cffe3869a6 Merge pull request #19034 from DougGregor/protocol-override
Introduce overrides of protocol members and drop them from witness tables
2018-09-05 20:57:21 -07:00
John McCall
1bc0a5b2fc Pass along the base value in the end_access writeback for diagnostics.
rdar://44147745
2018-09-05 17:02:29 -04:00
Doug Gregor
0cdede2bdf [SIL] Make witness_methods always refer to a non-overriding requirement.
When forming a witness_method instruction, follow the override chain of
a protocol requirement to reach a requirement that doesn’t override any
other protocol requirement. These will be the requirements that introduce
new witness table entries.
2018-09-05 13:51:26 -07:00
Arnold Schwaighofer
73df12c09f Remove dead constant_string_literal
constant_string_literal was added to support a one word representation
of String that never materialized.
2018-09-05 12:13:57 -07:00
Graydon Hoare
9ce3dc4543 [Stats] Add some tracers to SILGen. 2018-09-01 00:05:58 -07:00
Graydon Hoare
3b76f007d6 [SIL] Reallocate temporary SILFunction names to live in SILModule. 2018-09-01 00:05:58 -07:00
swift-ci
288f4a187b Merge pull request #19087 from adrian-prantl/37410759 2018-08-31 13:00:52 -07:00
Adrian Prantl
81f9ea33be SILGen: Preserve function argument debug info for arguments needing alloc_stack
This fixes a logic error in the existing code that cause these
function arguments to appear twice, once as local variable and once as
formal parameter.

rdar://problem/37410759
2018-08-31 10:35:52 -07:00
John McCall
dd77a2037e Pass the indices for writeback-conflict diagnostics on coroutines.
To do this, I had to introduce a way to unsafely copy an argument
list for the purposes of diagnostics.

rdar:://43802132
2018-08-31 04:20:47 -04:00
John McCall
6d4c724101 Distinguish different kinds of l-value reads in SILGen.
This is NFC for now, but I plan to build on this to (1) immediately
remove some unnecessary materialization and loads of the base value
and (2) to allow clients to load a borrowed value.
2018-08-30 19:42:53 -04:00
John McCall
41e4c454a1 Simplify getting a SILDeclRef for an accessor. 2018-08-30 19:42:53 -04:00
Jordan Rose
2f6b4cdbe8 Merge pull request #19054 from jrose-apple/nocturnal
Honor #sourceLocation filenames in several more places
2018-08-30 13:02:50 -07:00
Mark Lacey
90139d7685 [SILGen] Make #function printing more consistent.
Print parens and "_:" in cases where a function has no named
parameters.

We already print the parens in cases with no parameters, and the "_:"
for unnamed parameters in cases where there are already named
parameters.

Fixes: rdar://problem/19785368
2018-08-29 18:27:55 -07:00
Slava Pestov
542ed54c79 Merge pull request #19042 from slavapestov/match-call-arguments
Refactor matchCallArguments() to take arrays of AnyFunctionType::Param instead of argument tuples
2018-08-29 17:16:05 -07:00
Jordan Rose
e3ac6a36fb [SILGen] Honor #sourceLocation for run-time error messages
We use this when an optional unwrap fails and when a Swift-3-style
@objc entry point is used.
2018-08-29 11:46:41 -07:00
Slava Pestov
7960660b7e SILGen: TupleShuffleExprs in the rvalue emission path can't have scalar-to-tuple or tuple-to-scalar 2018-08-28 22:36:02 -07:00
gregomni
ff04fbdae8 Fix name lookup and parser so that where clauses decl refs in case statements correctly bind to the current pattern instead of always to the first pattern. Thus the hacky var decl juggling in where clauses in SILGen can be deleted. 2018-08-28 19:18:56 -07:00
gregomni
2a0c44edb1 NFC: Code clean up, in large part combining methods that only have single callers/callees and simplifying. 2018-08-28 19:18:32 -07:00
Joe Groff
15e4094544 Merge pull request #18937 from jckarter/mutating-opened-existential-covariant-return
SILGen: Fix order of operations when a mutating existential method returns Self.
2018-08-28 18:21:45 -07:00
Ben Cohen
6567438027 Squash release build warnings (#18986) 2018-08-28 09:56:17 -07:00
Joe Groff
7f14a3bf48 SILGen: Fix order of operations when invoking a mutating method on an existential that returns Self.
Delay allocating the result buffer for an opened Self return until right before it's needed. When a mutating method is invoked on an existential, the Self type won't be opened until late, when the formal access to the mutable value begins. Fixes rdar://problem/43507711.
2018-08-28 09:52:04 -07:00
Slava Pestov
0a25d78c14 SILGen: Remove code that became dead from Swift 3 removal
Swift 3 mode has not been fully removed, but the constraint solver
support for the old function argument tuple behavior is gone, so
rip out some SILGen hacks for it too.
2018-08-27 21:15:38 -07:00
Joe Groff
8d22526758 Introduce SILType::mapTypeOutOfContext.
This does the same thing as taking the AST type and running it through mapTypeOutOfContext, but
saves call sites from having to do the unwrap-rewrap dance.
2018-08-27 13:35:25 -07:00
John McCall
b80618fc80 Replace materializeForSet with the modify coroutine.
Most of this patch is just removing special cases for materializeForSet
or other fairly mechanical replacements.  Unfortunately, the rest is
still a fairly big change, and not one that can be easily split apart
because of the quite reasonable reliance on metaprogramming throughout
the compiler.  And, of course, there are a bunch of test updates that
have to be sync'ed with the actual change to code-generation.

This is SR-7134.
2018-08-27 03:24:43 -04:00