Commit Graph

2682 Commits

Author SHA1 Message Date
Slava Pestov
5eb16e6b34 Include-what-you-use: Initializer.h should not be pulled in from AST.h 2017-01-09 16:46:31 -08:00
Hugh Bellamy
30fa03978f Fix MSVC errors compiling SILGenExpr.cpp 2017-01-09 22:39:42 +00:00
Robert Widmann
f9df986fa3 Merge pull request #6654 from modocache/ast-finish-renaming-module-to-moduledecl
[AST] Completely replace Module with ModuleDecl
2017-01-08 15:04:00 -07:00
practicalswift
3918d9d251 [gardening] Replace likely word processor artefacts with ASCII equivalents (— → --, … → ...) 2017-01-08 15:23:06 +01:00
Brian Gesiak
663b92ece9 [AST] Completely replace Module with ModuleDecl
The typedef `swift::Module` was a temporary solution that allowed
`swift::Module` to be renamed to `swift::ModuleDecl` without requiring
every single callsite to be modified.

Modify all the callsites, and get rid of the typedef.
2017-01-08 00:36:08 -05:00
swift-ci
e99f537967 Merge pull request #6630 from eeckstein/fix-dead-method-elim 2017-01-07 12:01:18 -08:00
practicalswift
6417606f5f [gardening] Make sure parameter comments match actual parameter names 2017-01-07 20:06:28 +01:00
Erik Eckstein
1eb3a0532b DeadFunctionElimination: don’t eliminate public methods which are called via a thunk.
For this we need to store the linkage of the “original” method implementation in the vtable.
Otherwise DeadFunctionElimination thinks that the method implementation is not public but private (which is the linkage of the thunk).

The big part of this change is to extend SILVTable to store the linkage (+ serialization, printing, etc.).

fixes rdar://problem/29841635
2017-01-06 16:06:32 -08:00
practicalswift
6d1ae2a39c [gardening] 2016 → 2017 2017-01-06 16:41:22 +01:00
swift-ci
4d44441b1b Merge pull request #6606 from DougGregor/substitution-map-cleanup 2017-01-05 16:26:54 -08:00
Doug Gregor
16585992f6 [AST] Strengthen signature of SubstututionMap::addSubstitution().
It requires a CanSubstitutableType internally, so use that in the
signature and fix up all of the callers.
2017-01-05 16:04:19 -08:00
Slava Pestov
0343158e35 SILGen: Fix crash in tuple re-abstraction
An in-context ManagedValue is still "true".
2017-01-04 22:13:16 -08:00
Slava Pestov
18adb53226 Sema: Tighten up name lookup routines to not look through metatypes/lvalues/etc
Previously all of the following would strip off varying amounts of
MetatypeType, LValueType, InOutType, DynamicSelfType, etc:

- ConstraintSystem::performMemberLookup()
- ConstraintSystem::lookupMember()
- TypeChecker::lookupMember()
- DeclContext::lookupQualified()
- Type::getContextSubstitutions()

The problem is that the higher level methods that took a lookup type
would call the lower level methods, and post-process the result using
the given lookup type. Since different levels of sugar were stripped,
it made the code hard to reason about and opened up edge cases, eg
if a DynamicSelfType or InOutType appears where we didn't expect it.

Since filtering out static/instance and mutating/nonmutating members
is done at higher levels, there's no reason for these name lookup
operations to accept anything other than nominal types, existentials
and archetypes.

Make this so with assertions, and deal with the fallout.
2017-01-04 01:40:19 -08:00
Slava Pestov
9b03f9d18c SILGen: Fix reabstraction thunk emission when generic parameters are made non-canonical
In a generic signature like <T, U where T.A == U>, there is only
one primary archetype, 'T'. 'U' will not appear in SubstitutionMaps,
and the SubstitutionMap version of Type::subst() cannot handle an
interface type containing 'U'.

For interface types, there are two levels of canonicalization:

- The AST-level getCanonicalType() which strips away sugar

- The GenericSignature-level getCanonicalTypeInContext() which
  replaces each interface type in an equivalence class with a
  representative

SILFunctionTypes must be canonical with respect to a generic
signature.

When emitting re-abstraction thunks we could end up constructing
a SILFunctionType containing 'U', because we were calling
getCanonicalType() on the result of mapTypeOutOfContext().

Fix this by making sure to use getCanonicalTypeInContext() on
the result of mapTypeOutOfContext(), just as we do in capture
lowering.

Unfortunately I worry this problem will come up again in a
different form -- a more general fix would change
mapTypeOutOfContext() to always return "generic signature
canonical" types, and also fix SubstitutionMaps to understand
same type constraints better.

Fixes <https://bugs.swift.org/browse/SR-3326>.
2017-01-03 21:49:44 -08:00
Slava Pestov
a72eba1119 SILGen: Implement function conversions involving opened existentials
Suppose we have a protocol requirement returning Self:

protocol Clonable {
  func clone() -> Self
}

If we have a value 'x' of existential type 'Clonable',
the partial application 'x.clone' has formal type
'() -> Clonable'. However the actual type of the
method substitutes in an "opened" existential type
for 'Self'.

In order to implement the partial application we must
wrap the method in a thunk which 'erases' the opened
existential, so the thunk has type

<T : Clonable> (() -> T) -> () -> Clonable

The thunk is called with a substitution replacing 'T'
with the opened existential type.

Fixes <rdar://problem/21391055>.
2017-01-03 21:49:43 -08:00
Slava Pestov
3b388df641 SILGen: Don't try using materializeForSet with storage in an @objc protocol
Fixes <https://bugs.swift.org/browse/SR-2669>.
2017-01-03 19:05:42 -08:00
Slava Pestov
5f9fe6fa2c SILGen: Fix crash with non-scalar casts requiring re-abstraction
This might only come up in invalid code, but for example
casting a function type to String would trigger it.
2017-01-03 19:05:41 -08:00
Slava Pestov
4daf56b648 SILGen: Fix calls to literal constructors defined in protocol extensions
Fixes <https://bugs.swift.org/browse/SR-3173>.
2017-01-03 19:05:41 -08:00
Slava Pestov
54754c549b SILGen: Fix dynamic calls of 'throwing' methods
Fixes <https://bugs.swift.org/browse/SR-2320>.
2017-01-03 19:05:41 -08:00
Slava Pestov
9f8ccd41f3 SILGen: Fix for tuple conversions in function argument position
Swift admits implicit conversions between tuple types to
introduce and eliminate argument labels, and re-order
argument labels. These are expressed as TupleShuffleExpr
in the AST.

SILGen has two different code paths for lowering TupleShuffleExpr,
which is also used for varargs and default arguments in call
argument emission.

These two code paths support different subsets of TupleShuffleExpr;
neither one supports the full generality of the other, but there
is some overlap.

Work around the damage by routing the two different "kinds" of
TupleShuffleExprs to the correct place in argument emission.

The next incremental step here would be to refactor ArgEmitter to
make it usable when lowering SubscriptExpr; then the RValueEmitter's
support for varargs in TupleShuffleExpr can go away. Once that's
done we can split off an ArgumentExpr from TupleShuffleExpr, and
in the fullness of time, fold ArgumentExpr into ApplyExpr.

At that point this dark corner of the AST will start to be sane...

Fixes <https://bugs.swift.org/browse/SR-2887>.
2017-01-03 19:05:40 -08:00
Slava Pestov
2517701cd4 SILGen: Emit local types with a separate pass instead of while walking statements
Otherwise we might miss emitting a local type that's inside
unreachable code. Normally such a type cannot be found via
name lookup either, but IRGen will walk the list of local types
and try to emit a class with no SIL vtable, which will crash.

Fixes <https://bugs.swift.org/browse/SR-1924>.
2017-01-03 19:05:40 -08:00
Slava Pestov
ad01c1e929 SILGen: Implement missing function conversions from tuples to Any
Fixes <https://bugs.swift.org/browse/SR-3267> and
<rdar://problem/22465834>.
2017-01-03 19:05:40 -08:00
Joe Groff
796df2dc44 Merge pull request #6429 from jckarter/type-of-by-overload-resolution
`withoutActuallyEscaping`
2017-01-03 18:47:29 -08:00
Slava Pestov
d1b1361321 Merge pull request #6504 from CodaFi/crash-AAAAAHHH
Resolve some compiler crashers
2017-01-03 18:37:53 -08:00
Robert Widmann
c20e012b66 [28396] Remove an assert that is too strict.
Recursive references of computed properties are allowed, but warned
about.  Closures `var`s built like the one in 28396 should crash at
runtime, not crash the compiler.
2017-01-03 19:03:23 -07:00
Michael Gottesman
e9319faad1 Now that non-trivial +0 rvalues have cleanups, fix up a comment.
rdar://29791263
2017-01-03 17:01:30 -08:00
Michael Gottesman
fd5b46d7ed Mirror +1 rvalue SILGenFunction convenience APIs for +0 rvalues.
These APIs just make it easy to create ManagedValues from SILValues ensuring
that the appropriate cleanup is created if necessary.

rdar://29791263
2017-01-03 17:01:25 -08:00
Michael Gottesman
b5e35240f2 Introduce a new Cleanup called EndBorrowCleanup
This will enable the usage of ManagedValue and scopes to manage shared borrowed
values.

rdar://29791263
2017-01-03 17:01:23 -08:00
Joe Groff
3ddf178de9 SILGen: Basic implementation of withoutActuallyEscaping.
The full design would require wrapping the nonescaping closure in an escapable box, and testing that box for uniqueness at the end of the evaluation, but for now just do the moral equivalent of a bitcast to make the functionality available to users and let us deprecate `unsafeBitCast`-ing for this purpose.
2017-01-03 15:27:10 -08:00
Joe Groff
0c9297862f Sema: Handle type-checking for withoutActuallyEscaping.
withoutActuallyEscaping has a signature like `<T..., U, V, W> (@nonescaping (T...) throws<U> -> V, (@escaping (T...) throws<U> -> V) -> W) -> W, but our type system for functions unfortunately isn't quite that expressive yet, so we need to special-case it. Set up the necessary type system when resolving an overload set to reference withoutActuallyEscaping, and if a type check succeeds, build a MakeTemporarilyEscapableExpr to represent it in the type-checked AST.
2016-12-22 17:51:26 -08:00
Jordan Rose
8f3c7eb7d6 Merge pull request #5955 from hughbe/silgen-msvc
Fix errors and warnings building swift/SILGen on Windows using MSVC
2016-12-22 13:25:49 -08:00
Slava Pestov
f28f1158de SILGen: Fix emission of stored property initializers from different files
Fixes <https://bugs.swift.org/browse/SR-2982>.
2016-12-22 15:13:38 -05:00
Slava Pestov
caa7045ae5 AST: Remove unnecessary ModuleDecl parameter from GenericSignature::getSubstitutions() 2016-12-22 14:33:00 -05:00
Hugh Bellamy
95af3aa7c8 Fix errors and warnings building swift/SILGen on Windows using MSVC 2016-12-22 11:57:33 +00:00
Alexis Beingessner
f4b7dae48e Fix load of NSString to retain its source
Fixes rdar://21782689: "Swift over-releases NSString when bridging".

The NSString -> String bridging function takes its input at +1 (@owned),
but the compiler seemed to be assuming it should be +0. The solution is
to make the compiler do a proper copy, rather than a borrow.
2016-12-20 12:49:46 -05:00
Slava Pestov
fb0f372e94 AST: Move mapType{In,OutOf}Context() out of ArchetypeBuilder and clean up headers
- The DeclContext versions of these methods have equivalents
  on the DeclContext class; use them instead.

- The GenericEnvironment versions of these methods are now
  static methods on the GenericEnvironment class. Note that
  these are not made redundant by the instance methods on
  GenericEnvironment, since the static methods can also be
  called with a null GenericEnvironment, in which case they
  just assert that the type is fully concrete.

- Remove some unnecessary #includes of ArchetypeBuilder.h
  and GenericEnvironment.h. Now changes to these files
  result in a lot less recompilation.
2016-12-18 19:55:41 -08:00
Michael Gottesman
4e8ff35df5 [semantic-sil] Add ValueOwnershipKind field to SILPHIArgument and split Argument creation methods into one for SILPHIArgument and another for SILFunctionArgument.
We preserve the current behavior of assuming Any ownership always and use
default arguments to hide this change most of the time. There are asserts now in
the SILBasicBlock::{create,replace,insert}{PHI,Function}Argument to ensure that
the people can only create SILFunctionArguments in entry blocks and
SILPHIArguments in non-entry blocks. This will ensure that the code in tree
maintains the API distinction even if we are not using the full distinction in
between the two.

Once the verifier is finished being upstreamed, I am going to audit the
createPHIArgument cases for the proper ownership. This is b/c I will be able to
use the verifier to properly debug the code. At that point, I will also start
serializing/printing/parsing the ownershipkind of SILPHIArguments, but lets take
things one step at a time and move incrementally.

In the process, I also discovered a CSE bug. I am not sure how it ever worked.
Basically we replace an argument with a new argument type but return the uses of
the old argument to refer to the old argument instead of a new argument.

rdar://29671437
2016-12-18 14:48:35 -08:00
Slava Pestov
3989aea9ae AST: Clean up getMemberSubstitutions() and friends
Rename the old getMemberSubstitutions() to getContextSubstitutions()
and add a new getMemberSubstitutions() that takes a ValueDecl, rather
than the member's DeclContext.

This new method forwards generic parameters if the member is a generic
function.
2016-12-17 16:28:18 -08:00
swift-ci
268c2b668d Merge pull request #6325 from practicalswift/gardening-20161216 2016-12-17 09:19:24 -08:00
Michael Gottesman
96c63e9e76 Merge pull request #6324 from practicalswift/cpp-gardening
[gardening] C++ gardening: Terminate namespaces, fix argument names, …
2016-12-16 23:30:33 -08:00
Joe Groff
4444d83756 SIL: Lower captures to boxes with an appropriate generic context.
Officially kick SILBoxType over to be "nominal" in its layout, with generic layouts structurally parameterized only by formal types. Change SIL to lower a capture to a nongeneric box when possible, or a box capturing the enclosing generic context when necessary.
2016-12-16 20:23:25 -08:00
practicalswift
38be6125e5 [gardening] C++ gardening: Terminate namespaces, fix argument names, ...
Changes:
* Terminate all namespaces with the correct closing comment.
* Make sure argument names in comments match the corresponding parameter name.
* Remove redundant get() calls on smart pointers.
* Prefer using "override" or "final" instead of "virtual". Remove "virtual" where appropriate.
2016-12-17 00:32:42 +01:00
practicalswift
16d6dce62e [gardening] Fix recently introduced typos. 2016-12-16 21:42:09 +01:00
Slava Pestov
a384b2a677 Don't call VarDecl::getType() on deserialized VarDecls 2016-12-15 22:46:15 -08:00
Joe Groff
57d9ad0a03 Remove Module parameter from GenericEnvironment::mapTypeOutOfContext.
The substitution only replaces archetypes with abstract generic parameters, so no conformance lookup is necessary, and we can provide a "lookup" callback now that just vends abstract conformances.

(Ideally, we'd be able to do this for mapTypeIntoContext too, but we run into problems with generic signatures with same-type constraints on associated types with protocol requirements. Mapping `t_0_0.AssocType` into such a context will require conformance lookup for the concrete type replacement, since same-type Requirements don't preserve the conformances that satisfy the protocol requirements for the same-type relationship.)
2016-12-15 10:56:19 -08:00
Slava Pestov
dcbe30ab50 SILGen: Remove unused variable
After Joe's SubstitutionMap changes today, 'gen.SGM.M.getSwiftModule()'
will hopefully become a thing of the past.
2016-12-14 22:44:48 -08:00
Joe Groff
b6823b930b SIL: Change SILType::subst to be SubstitutionMap-based.
This simplifies the SILType substitution APIs and brings them in line with Doug and Slava's refactorings to improve AST-level type substitution. NFC intended.
2016-12-14 14:33:32 -08:00
Robert Widmann
fe00dc74ea Get rid of _stdlib_didEnterMain
Process arguments are now fetched per-platform
2016-12-12 23:47:48 -05:00
Slava Pestov
34e1c13480 SILGen: Fix recent regression with default initializer emission
If a type's constructor was generic but the type was not, we would crash.
Fix this and add a test.

Fixes <rdar://problem/29605388>.
2016-12-12 15:42:22 -08:00
practicalswift
8962c8819f Merge pull request #6139 from practicalswift/remove-never-read-variables
[gardening] Remove never-read variables + tighten scope.
2016-12-12 13:32:36 +01:00