Commit Graph

28079 Commits

Author SHA1 Message Date
Doug Gregor
a554ad632b [Concurrency] Diagnose mutating accesses to locals from concurrent code.
Replace the existing warning about any access to a local variable from
concurrently-executing code with a more tailored error:
concurrently-executing code may read a mutable varable, but cannot
modify it. This is safe so long as we either always do by-value
captures in concurrent closures or we ensure that no mutation of that
variable can occur after the point of capture.

We'll follow up with one of those. For now... be careful out there.

Since we're promoting this to an error, narrow it down to concurrent
closures and local functions, dropping the assumption that escaping
closures "may execute concurrently."
2021-01-29 14:27:24 -08:00
Doug Gregor
99f8d7a5e8 [SIL] Add @concurrent function types to SIL
Add @concurrent to SIL function types, mirroring what's available on
AST function types. @concurrent function types will have by-value
capture semantics.
2021-01-29 11:16:17 -08:00
Doug Gregor
f4c5a267b7 @concurrent functions are actor-independent
Concurrent functions need to be actor-independent because they wouldn't
ever be safe to run concurrently while isolated on an actor. This
allows us to elimate the "may execute concurrently with" check related
to actor isolation, which is a cleaner overall story.
2021-01-28 22:07:54 -08:00
Doug Gregor
8eae527ca6 Tighten up actor isolation checking for closures and local functions.
Make sure that we check the isolation of the context in which a reference
to `self` is made, rather than the context in which `self` is declared,
when checking whether we are within actor-isolated code. This ensures
that we report errors as actor-isolation errors rather than falling
back to the "may execute concurrently with" checking.
2021-01-28 21:56:07 -08:00
Doug Gregor
1d082e1fb4 Require that concurrently-executed local functions be @concurrent. 2021-01-28 13:03:13 -08:00
Doug Gregor
6d086d4d9c Add support for @concurrent on function declarations 2021-01-28 00:50:40 -08:00
Doug Gregor
ba8819eb58 [Concurrent] Introduce concurrent function types.
Introduce `@concurrent` attribute on function types, including:
* Parsing as a type attribute
* (De-/re-/)mangling for concurrent function types
* Implicit conversion from @concurrent to non-@concurrent
- (De-)serialization for concurrent function types
- AST printing and dumping support
2021-01-27 14:22:32 -08:00
Eric Miotto
8e7f9c9cbd Revert "SIL: let SingleValueInstruction only inherit from a single SILNode." 2021-01-26 10:02:24 -08:00
Arnold Schwaighofer
b0d31730de Merge pull request #35303 from aschwaighofer/introduce_swiftasync_lowering
Add llvm::Attribute::SwiftAsync to the context parameter
2021-01-26 06:03:19 -08:00
Philippe Hausler
6e05240426 AsyncSequence and protocol conformance rethrows (#35224)
* Initial draft of async sequences

* Adjust AsyncSequence associated type requirements

* Add a draft implementation of AsyncSequence and associated functionality

* Correct merge damage and rename from GeneratorProtocol to AsyncIteratorProtocol

* Add AsyncSequence types to the cmake lists

* Add cancellation support

* [DRAFT] Implementation of protocol conformance rethrowing

* Account for ASTVerifier passes to ensure throwing and by conformance rethrowing verifies appropriately

* Remove commented out code

* OtherConstructorDeclRefExpr can also be a source of a rethrowing kind function

* Re-order the checkApply logic to account for existing throwing calculations better

* Extract rethrowing calculation into smaller functions

* Allow for closures and protocol conformances to contribute to throwing

* Add unit tests for conformance based rethrowing

* Restrict rethrowing requirements to only protocols marked with @rethrows

* Correct logic for gating of `@rethrows` and adjust the determinates to be based upon throws and not rethrows spelling

* Attempt to unify the async sequence features together

* Reorder try await to latest syntax

* revert back to the inout diagnosis

* House mutations in local scope

* Revert "House mutations in local scope"

This reverts commit d91f1b25b59fff8e4be107c808895ff3f293b394.

* Adjust for inout diagnostics and fall back to original mutation strategy

* Convert async flag to source locations and add initial try support to for await in syntax

* Fix case typo of MinMax.swift

* Adjust rethrowing tests to account for changes associated with @rethrows

* Allow parsing and diagnostics associated with try applied to for await in syntax

* Correct the code-completion for @rethrows

* Additional corrections for the code-completion for @rethrows this time for the last in the list

* Handle throwing cases of iteration of async sequences

* restore building XCTest

* First wave of feedback fixes

* Rework constraints checking for async sequence for-try-await-in checking

* Allow testing of for-await-in parsing and silgen testing and add unit tests for both

* Remove async sequence operators for now

* Back out cancellation of AsyncIteratorProtocols

* Restructure protocol conformance throws checking and cache results

* remove some stray whitespaces

* Correct some merge damage

* Ensure the throwing determinate for applying for-await-in always has a valid value and adjust the for-await-in silgen test to reflect the cancel changes

* Squelch the python linter for line length
2021-01-25 18:48:50 -08:00
Rintaro Ishizaki
ba23002716 Merge pull request #35567 from rintaro/parse-rdar73159041
[Parse] Diagnose default argument for subscript in protocols
2021-01-25 13:11:49 -08:00
Erik Eckstein
ff1991740a SIL: let SingleValueInstruction only inherit from a single SILNode.
This removes the ambiguity when casting from a SingleValueInstruction to SILNode, which makes the code simpler. E.g. the "isRepresentativeSILNode" logic is not needed anymore.
Also, it reduces the size of the most used instruction class - SingleValueInstruction - by one pointer.

Conceptually, SILInstruction is still a SILNode. But implementation-wise SILNode is not a base class of SILInstruction anymore.
Only the two sub-classes of SILInstruction - SingleValueInstruction and NonSingleValueInstruction - inherit from SILNode. SingleValueInstruction's SILNode is embedded into a ValueBase and its relative offset in the class is the same as in NonSingleValueInstruction (see SILNodeOffsetChecker).
This makes it possible to cast from a SILInstruction to a SILNode without knowing which SILInstruction sub-class it is.
Casting to SILNode cannot be done implicitly, but only with an LLVM `cast` or with SILInstruction::asSILNode(). But this is a rare case anyway.
2021-01-25 09:30:04 +01:00
Erik Eckstein
40f0980abf SIL: simplify the SILNode getParent functions.
A small cleanup, NFC.
2021-01-25 09:30:04 +01:00
Erik Eckstein
e4f2bbfb0b SILDynamicCastInst: replace getAs(SILNode *) with getAs(SILInstruction *)
A small cleanup, NFC
2021-01-25 09:30:04 +01:00
Erik Eckstein
65ecb697c6 SIL: improve the API for ApplySite construction
Replace the `isa(SILNode *)` with `isa(SILInstruction *)` and `isa(SILValue)`.
This is much clearer and it also works if the SILValue is a MultiValueInstructionResult of an apply instruction.

Also, use `isa` instead of `classof` in canOptimize()
2021-01-25 09:30:04 +01:00
Erik Eckstein
5ad332f6cd SILOptimizer: remove the unused findApplyFromDevirtualizedResult utility function 2021-01-25 09:30:04 +01:00
Robert Widmann
c2163703fd Merge pull request #35465 from mininny/objc-override-hash-warning
[Diagnostics] Add specific warning for overriden `NSObject.hash(into:)`
2021-01-24 14:37:03 -08:00
Saleem Abdulrasool
af7f1e6764 Merge pull request #35574 from compnerd/disambiguate
Basic: add explicit template parameters for disambiguation
2021-01-24 11:11:53 -08:00
swift-ci
f7f658cce7 Merge pull request #35571 from atrick/fix-rauw-borrowuse 2021-01-23 20:43:18 -08:00
Andrew Trick
a2fac95f9f OSSA ownership optimization RAUW utility fixes.
Verify that the OwnershipRAUWUtility always preserves the original
borrow scope by exhaustively switching over OperandOwnership.

And related cleanup.
2021-01-23 18:15:58 -08:00
Saleem Abdulrasool
25d83bfb6b Basic: add explicit template parameters for disambiguation
When building with MSVC, this would fail to compile due to the `buffer`
type (`uint8_t [8]`) being treated as `unsigned char *`, which is
expecting to be SFINAE'd to fail find an overload for the hash
combination.
2021-01-23 13:32:20 -08:00
Saleem Abdulrasool
8b5869ce62 Merge pull request #35566 from mikeash/whoops-i-did-it-again
[Runtime] #ifdef __clang__ on printf __attribute__ in Portability.h
2021-01-22 20:00:12 -08:00
Konrad `ktoso` Malawski
ad33889b67 Merge pull request #35564 from apple/revert-35549-wip-task-canceled-spelling 2021-01-23 12:37:24 +09:00
Michael Gottesman
1e039cce38 Merge pull request #35563 from gottesmm/pr-cd7c9e97e46a0141e37f10fbfb74c094e0576ff3-followups
[ownership] cd7c9e97e4 followups
2021-01-22 19:05:12 -08:00
Rintaro Ishizaki
8a58107123 [Parse] Diagnose default argument for subscript in protocols
Protocol requirements don't support default arguments. Although this is
a "semantic" diagnostics, we currently do this for 'func' and 'init' in
Parser. So for fixing a crash, let's to it for 'subscript' in Parser
too.

rdar://problem/73159041
2021-01-22 17:21:17 -08:00
Mike Ash
c673c13548 [Runtime] #ifdef __clang__ on printf __attribute__ in Portability.h 2021-01-22 19:36:28 -05:00
Konrad `ktoso` Malawski
80ee936a72 Revert "[Concurrency] isCanceled spelling to follow guidance" 2021-01-23 07:27:34 +09:00
Mike Ash
4988127e99 Merge pull request #35525 from mikeash/swift_asprintf-static-checking
[Runtime] Mark swift_asprintf with __attribute__((__format__))
2021-01-22 15:04:39 -05:00
Arnold Schwaighofer
daa72d3cc5 Add llvm::Attribute::SwiftAsync to the context parameter
* Adds support for generating code that uses swiftasync parameter lowering.

* Currently only arm64's llvm lowering supports the swift_async_context_addr intrinsic.

* Add arm64e pointer signing of updated swift_async_context_addr.

This commit needs the PR llvm-project#2291.

* [runtime] unittests should use just-built compiler if the runtime did

This will start to matter with the introduction of usage of swiftasync parameters which only very recent compilers support.

rdar://71499498
2021-01-22 10:01:55 -08:00
Holly Borla
1ef2174bc2 Merge pull request #35025 from hborla/generic-overload-search-space
[ConstraintSystem] Implement heuristics for pruning the generic operator overload search space
2021-01-22 09:12:50 -08:00
Minhyuk Kim
5c21cdf4a6 Modify override_decl_extension error to be more descriptive 2021-01-23 01:04:40 +09:00
Mike Ash
216e555ad6 [Runtime] Mark swift_asprintf with __attribute__((__format__))
This gives us build-time warnings about format string mistakes, like we would get if we called the built-in asprintf directly.

Make TypeLookupError's format string constructor a macro instead so that its callers can get these build-time warnings.

This reveals various mistakes in format strings and arguments in the runtime, which are now fixed.

rdar://73417805
2021-01-22 10:54:45 -05:00
Erik Eckstein
6713c0feca SIL: a few small changes in BasicBlockData
* Instead of passing the vector type as template argument, use a SmallVector and just pass the inline size
* Increase the inline size to 32. Found by experiment, this fits 90% of all functions.
* add an API for getting data for newly created blocks.
2021-01-22 12:53:26 +01:00
eeckstein
2c083caaa7 Merge pull request #35550 from eeckstein/tinyptrvector-for-args
SIL: Use TinyPtrVector for the argument list in SILBasicBlock
2021-01-22 12:50:14 +01:00
Konrad `ktoso` Malawski
45ce10a4f1 Merge pull request #35549 from ktoso/wip-task-canceled-spelling
[Concurrency] isCanceled spelling to follow guidance
2021-01-22 19:18:41 +09:00
Erik Eckstein
47c596d645 SIL: Use TinyPtrVector for the argument list in SILBasicBlock
A TinyPtrVector is the right choice, because ~98% of blocks have 0 or 1 arguments.
2021-01-22 10:05:09 +01:00
Erik Eckstein
2c7027da97 SIL: fix a header-file layering violation: SILArgument.h should not include SILFunction.h
"Containers" should include their "content" and not the other way round.
Also, remove some unused stuff of SILArgument.
2021-01-22 10:05:09 +01:00
eeckstein
a0884baa3c Merge pull request #35521 from eeckstein/sil-bitfields
SIL: add a utility which can manage per-block bitfields and flags efficiently.
2021-01-22 08:39:13 +01:00
Robert Widmann
a89c882bdb Merge pull request #35269 from CodaFi/hash-brown
Replace llvm::MD5 with SipHash-2-4
2021-01-21 21:00:56 -08:00
Konrad `ktoso` Malawski
8b37455774 [Concurrency] isCanceled spelling to follow guidance 2021-01-22 12:09:19 +09:00
Robert Widmann
73ac8d3531 Replace llvm::MD5 with StableHasher 2021-01-21 17:19:38 -08:00
Robert Widmann
f5cb08e3d1 Add a Stable Hash Algorithm
Use SipHash-2-4 to replace llvm::MD5 as the hashing implementation backing Fingerprints and the interface hash.
2021-01-21 17:19:38 -08:00
Meghana Gupta
845e63f901 Support ownershipKind in SILSSAUpdater 2021-01-21 16:27:50 -08:00
Michael Gottesman
47f76f175c [sil] Add a variant of SmallSetVector that uses SmallPtrSet internally instead of SmallDenseSet. 2021-01-21 13:06:14 -08:00
Pavel Yaskevich
ac8897cc44 Merge pull request #35529 from xedin/never-fail-inference
[CSBindings] Inference cannot fail
2021-01-21 12:39:00 -08:00
Erik Eckstein
3e8612b0d3 SILOptimizer: use the BasicBlockFlag utility in ValueLifetimeAnalysis 2021-01-21 21:31:41 +01:00
Erik Eckstein
763bfed6a4 SILOptimizer: use the BasicBlockFlag utility in ReachableBlocks 2021-01-21 21:31:41 +01:00
Erik Eckstein
65976fd0c5 SIL: add a utility which can manage per-block bitfields and flags efficiently.
It is very efficient: no memory allocation is needed an initialization is at zero cost.
2021-01-21 21:31:41 +01:00
swift-ci
6496c8cc1f Merge pull request #35467 from keith/ks/remove-unused-frontend-option 2021-01-21 12:26:07 -08:00
Minhyuk Kim
f138ce0b19 Add specific warning for overriden NSObject.hash(into:) 2021-01-21 23:23:00 +09:00