Commit Graph

24822 Commits

Author SHA1 Message Date
Brent Royal-Gordon
63ec1cf5af Introduce a separate #filePath, remove -pound-file
This makes the path behavior more first-class. The feature is now hidden behind an experimental flag, -enable-experimental-concise-pound-file.
2019-12-04 16:35:13 -08:00
Brent Royal-Gordon
44a2f67f4b Turn new #file behavior off by default 2019-12-04 16:33:25 -08:00
Brent Royal-Gordon
789d38eb04 Control #file behavior with a command line option 2019-12-04 16:33:25 -08:00
Owen Voorhees
b84562003e [Diagnostics] Add an educational note explaining closure type inference rules
This note explains the difference in type inference between single expression and
non-single expression closures. It is associated with the "unable to infer
complex closure return type" diagnostic.
2019-12-04 13:37:11 -08:00
Pavel Yaskevich
3116d6ef8a Merge pull request #28539 from xedin/remove-constraint-handling-from-csdiag
[Diagnostics] Port diagnostics related to ambiguities and constraints
2019-12-04 12:15:26 -08:00
David Ungar
bc068ae68e format 2019-12-04 10:51:18 -08:00
David Ungar
8dc04c7912 Rename DependencyGraph and DependencyGraphImp with CoarseGrained prefix. 2019-12-04 10:51:18 -08:00
David Ungar
2ff5855c63 Rename DependencyGraphImpl -> CoarseGrainedDependencyGraphImpl, unformatted 2019-12-04 10:51:18 -08:00
David Ungar
200b181eb3 Renaming files -> CoarseGrained 2019-12-04 10:51:18 -08:00
David Ungar
380d0d973e Merge pull request #28563 from davidungar/renaming-dependencies
[Incremental compilation] Rename "experimental dependencies" to "fine-grained dependencies"
2019-12-04 10:47:24 -08:00
Joe Groff
41a116b95a Merge pull request #28541 from apple/subst-function-type-conversion
SIL: Distinguish "compatible convention" and "compatible representation" function conversions.
2019-12-04 09:27:27 -08:00
David Ungar
6a6e9357ef Change "experimental" to "fine-grained". 2019-12-04 08:50:44 -08:00
Varun Gandhi
affa1b49bf [Runtime] Memset Extradata fully before copy from pattern. (#28478)
The third argument of memset needs a size in *bytes* not words.
2019-12-04 08:48:01 -08:00
Varun Gandhi
e7be41d0cb Merge pull request #27479 from varungandhi-apple/vg-track-clang-function-types
Track Clang function types in the AST
2019-12-04 08:47:35 -08:00
David Ungar
496e602bff Renaming files 2019-12-04 08:38:59 -08:00
Slava Pestov
dc5f896a92 Merge pull request #28551 from slavapestov/c-self-capture-crash
SILGen: Fix crash when referencing dynamic Self from @convention(c) closure
2019-12-04 10:24:09 -05:00
Erik Eckstein
8bc5daca77 SIL: always update the linkage of a function with the serialized linkage in the swiftmodule.
The cross-module-optimization can change the linkage of a function to public. Then the SILLinkage is "out of sync" with the linkage derived from the AST. We need to make sure to read the correct SILLinkage from the module file.
2019-12-04 09:16:28 +01:00
swift-ci
7388b6c0a5 Merge pull request #28556 from atrick/escape-valueescapes 2019-12-03 23:23:33 -08:00
Andrew Trick
b8d901be63 EscapeAnalysis: minor cleanup to prepare for alias analysis rewrite.
Create a Predecessor abstraction for readability. Eliminates frequent
occurence of inscrutable getInt() and getPointer() calls.

Create an escapesInsideFunction() API that only uses mapped
values. This prevents bugs where a content node's value would be
mistakenly used to check for escapes.
2019-12-03 21:50:48 -08:00
Robert Widmann
022ccd75de Merge pull request #28544 from CodaFi/file-unit-arianism
Add a high-level request to type check a file
2019-12-03 19:37:53 -08:00
David Ungar
90eb007f1f Merge pull request #28543 from davidungar/ranges-for-faster-dependents
[Driver] Remove unparsed range code, move range-based tests into a new directory, & misc. driver cleanups
2019-12-03 19:30:46 -08:00
Robert Widmann
e28ee0cdbf Merge pull request #28546 from CodaFi/trailing-on-and-on
Fix getDirectlyInheritedNominalTypeDecls
2019-12-03 18:43:22 -08:00
Slava Pestov
af7f127cf2 SILGen: Fix crash when referencing dynamic Self from @convention(c) closure
Fixes <rdar://problem/57510056>.
2019-12-03 20:51:52 -05:00
Slava Pestov
107154381b AST: Remove control characters from CaptureInfo.h 2019-12-03 20:51:52 -05:00
David Ungar
3d3507b7b6 Remove unparsed ranges and use diffs to schedule dependents earlier. 2019-12-03 17:23:02 -08:00
Robert Widmann
371526bdea Add a high-level request to type check a file 2019-12-03 17:16:14 -08:00
Robert Widmann
b8779f7df7 Fix getDirectlyInheritedNominalTypeDecls
getDirectlyInheritedNominalTypeDecls looks for inherited protocols in two places: the actual inheritance clause of a declaration and the trailing where clause.  This works fine for normal declarations, but deserialized protocols that have Self constraints have no trailing where clause and appear to have no super-protocol bounds.  This means clients can potentially disagree about the structure of the protocol, and any symbols derived from it.

The test case demonstrates this problem directly: We build a hollowed-out SwiftUI preview provider then try to dynamically replace a requirement in a Self-constrained protocol extension.  The SwiftUI module sees the where clause, but when we go to deserialize the module in the "Preview" the protocol extension sees the wrong inheritance bounds and mis-mangles the call to Self.view(for:ofType).

The fix is to ask the requirement signature for Self requirements that would normally appear on a trailing where clause.

Resolves rdar://57150777
2019-12-03 17:01:57 -08:00
Robert Widmann
4e36fc0bd5 Replace semantic usages of DynamicReplacementAttr with the request
Complete the refactoring by splitting the semantic callers for the original decl of a dynamically replaced declaration.

There's also a change to the way this attribute is validated and placed.  The old model visited the attribute on any functions and variable declarations it encountered in the primary.  Once there, it would strip the attribute off of variables and attach the corresponding attribute to each parsed accessor, then perform some additional ObjC-related validation.

The new approach instead leaves the attribute alone.  The request exists specifically to perform the lookups and type matching required to find replaced decls, and the attribute visitor no longer needs to worry about revisiting decls it has just grafted attributes onto.  This also means that a bunch of parts of IRGen and SILGen that needed to fan out to the accessors to ask for the @_dynamicReplacement attribute to undo the work the type checker had done can just look at the storage itself.  Further, syntactic requests for the attribute will now consistently succeed, where before they would fail dependending on whether or not the type checker had run - which was generally not an issue by the time we hit SIL.
2019-12-03 15:30:04 -08:00
Robert Widmann
c60b661c29 Add a request for replaced decls
Add DynamicallyReplacedDeclRequest to ValueDecl and plumb the request through to TypeCheckAttr where it replaces TypeChecker::findReplacedDynamicFunction.
2019-12-03 15:30:04 -08:00
Robert Widmann
eea5cfbe82 Refactor DynamicReplacementAttr::create
Remove a dead overload and add an overload for lazy member loading
2019-12-03 15:28:19 -08:00
Robert Widmann
ac08fceacc Add loadDynamicallyReplacedFunctionDecl
To support lazy resolution of the cross-referenced function in a serialized @_dynamicReplacement(for: ...) attribute, add a utility to the LazyMemberLoader and plumb it through.  This is a more general utility than the current resolver, which relies on the type checker to strip the attribute off of VarDecls and fan it back out onto accessors, which means serialization has only ever seen AbstractFunctionDecls.
2019-12-03 15:28:19 -08:00
Pavel Yaskevich
3c5290c78c [Diagnostics] Diagnose inability to infer contextual base type for member ref 2019-12-03 12:07:16 -08:00
Pavel Yaskevich
a9f11445c0 [Diagnostics] Diagnose an attempt to assign a value to an overloaded name
Example:

```swift
struct X {
}

func X(_: Int) -> Int {
  return 42
}

X = 42
```
2019-12-03 12:07:15 -08:00
Joe Groff
351c94dbf2 SIL: Distinguish "compatible convention" and "compatible representation" function conversions.
We want to be able to use different representations for function types with otherwise compatible
calling conventions. Distinguish these concepts in the `checkForABIDifferences` SIL APIs, so that
we correctly handle representation-only conversions, which can be handled by `convert_function`,
from full reabstractions, making sure to note that the representation-only case is not transitive
for function arguments, since a function that takes a function with a representation change needs
a thunk to change the argument's representation.
2019-12-03 11:35:48 -08:00
swift-ci
f0157b0f87 Merge pull request #28473 from atrick/arrayproperty-opt 2019-12-03 10:32:49 -08:00
Joe Groff
e544d367ac Merge pull request #28424 from jckarter/subst-function-type-reabstraction
SIL: Plumb abstraction patterns through type lowering.
2019-12-03 10:11:34 -08:00
David Ungar
3cba2306ca Moving tests and driver refactoring. 2019-12-03 09:24:17 -08:00
Saleem Abdulrasool
98dcc5ed25 Merge pull request #28457 from compnerd/basic-cleanup
cleanup LangOptions
2019-12-03 08:27:11 -08:00
Xi Ge
1390576528 Merge pull request #28528 from nkcsgexi/use-alternate-module-name
ASTMangler: use specified module names from @_originalDefinedIn to mangle symbols names
2019-12-03 07:25:22 -08:00
Erik Eckstein
a5397b434c Cross module optimization
This is a first version of cross module optimization (CMO).

The basic idea for CMO is to use the existing library evolution compiler features, but in an automated way. A new SIL module pass "annotates" functions and types with @inlinable and @usableFromInline. This results in functions being serialized into the swiftmodule file and thus available for optimizations in client modules.
The annotation is done with a worklist-algorithm, starting from public functions and continuing with entities which are used from already selected functions. A heuristic performs a preselection on which functions to consider - currently just generic functions are selected.

The serializer then writes annotated functions (including function bodies) into the swiftmodule file of the compiled module. Client modules are able to de-serialize such functions from their imported modules and use them for optimiations, like generic specialization.

The optimization is gated by a new compiler option -cross-module-optimization (also available in the swift driver).
By default this option is off. Without turning the option on, this change is (almost) a NFC.

rdar://problem/22591518
2019-12-03 14:37:01 +01:00
Erik Eckstein
0b6e3bf6f6 DeadFunctionElimination: factor out function/method visiting of keypath components into a general utility.
This is a NFC
2019-12-03 14:37:01 +01:00
Erik Eckstein
402e228b39 SIL: add a table in SILModule to mark method declarations as externally visible.
This is needed for cross-module-optimization: CMO marks functions as inlinable. If a private or internal method is referenced from such an inlinable function, it must not be eliminated by dead function elimination after serialization (a method is basically an AbstractFunctionDecl).
For SILFunctions we can do this by simply setting the linkage, but for methods we need another mechanism.
2019-12-03 14:37:01 +01:00
swift-ci
213ccf8209 Merge pull request #28535 from gottesmm/pr-58a7ab90baf353a5eb3b6ce3f10345d410d8b323 2019-12-02 22:07:31 -08:00
swift-ci
c036ea071b Merge pull request #28534 from gottesmm/pr-454c8cb401a20abf72d32b98e7e0bed46651e055 2019-12-02 22:06:15 -08:00
Varun Gandhi
7d297bc678 Print the full calling convention; include the Clang type if applicable. 2019-12-02 21:06:01 -08:00
Varun Gandhi
fb59293fe1 [Parse] Add a cType key to the convention attribute.
For example, one may write a calling convention like

  convention(c, cType: "void *(void)")

for a procedure that takes no arguments.
2019-12-02 21:06:01 -08:00
Doug Gregor
dc258b2083 Merge pull request #28531 from DougGregor/explicit-init-property-wrapper-opt
[AST] Properties can be explicitly initialized via their wrapper.
2019-12-02 20:35:28 -08:00
Michael Gottesman
a31d550348 [allocbox-to-stack] Add a new semantics attribute that says vars of a nominal type marked with _semantics("boxtostack.mustbeonstack") must be on the stack. 2019-12-02 20:29:52 -08:00
Michael Gottesman
e4680a3678 [sil] Refactor Alloc{Stack,Box}Inst::getDecl() onto AllocationInst so that all AllocationInsts (e.x. AllocRefInst) have access to that functionality. 2019-12-02 20:29:10 -08:00
Slava Pestov
bbe9867d1f Merge pull request #28442 from slavapestov/revert-sf-synthesized-decls
Revert "Eagerly TypeCheck Synthesized Decls"
2019-12-02 21:37:15 -05:00