Commit Graph

42290 Commits

Author SHA1 Message Date
Slava Pestov
19a991c530 Basic: Handle missing __FILE_NAME__ on Windows 2024-06-22 08:53:22 -04:00
Michael Gottesman
112071e57d [sending] Remove transferring.
Out of an abundance of caution, we:

1. Left in parsing support for transferring but internally made it rely on the
internals of sending.

2. Added a warning to tell people that transferring was going to
be removed very soon.

Now that we have given people some time, remove support for parsing
transferring.

rdar://130253724
2024-06-21 16:03:21 -07:00
Hamish Knight
3d57297f43 [Completion] Support multiple parameter specifiers
Allow consuming any parameter specifiers ahead of
the completion token when completion for the start
of a function parameter type.
2024-06-21 22:29:56 +01:00
Slava Pestov
8ebd36e629 Basic: Fix operator precedence issues with ASSERT macro 2024-06-21 16:21:36 -04:00
Michael Gottesman
74944a69bd Merge pull request #74239 from gottesmm/taskinit-sending
[sending] Mark Task.init, Task.detached and friends as taking a sending closure instead of a __owned @Sendable
2024-06-21 10:36:29 -07:00
Rintaro Ishizaki
f08d69c6d7 [Macros] Infer in-process plugin server in swift-frontend
Not all driver can send '-in-process-plugin-server-path'. To keep
existing '-plugin-path' working, infer default server path in the
frontend.
2024-06-21 08:59:59 -07:00
Erik Eckstein
9cb011322d SILOptimizer: add a utility to check if a generic nominal type's layout is dependent on its generic parameters
This is usually the case. Some examples, where they layout is _not_ dependent:
```
   struct S<T> {
     var x: Int // no members which depend on T
   }

   struct S<T> {
     var c: SomeClass<T> // a class reference does not depend on the layout of the class
   }
```
2024-06-21 17:28:33 +02:00
Hamish Knight
2fbc8b336f Merge pull request #74559 from hamishknight/pound-if-skip
[Parse] Handle `#if` in brace skipping logic
2024-06-21 15:04:19 +01:00
Michael Gottesman
43e1c5499f [sending] Make the operation of Builtin.createAsyncTask/friends a sending non-Sendable function instead of an @Sendable function.
This matches the interface of the public stdlib APIs that wrap these builtin calls.
2024-06-21 02:24:03 -07:00
Michael Gottesman
5e27999b09 [sending] Rename Sema level APIs from isSendingParameter -> isPassedToSendingParameter.
This came up while I was talking with @xedin. This name makes
it really clear what we are trying to communicate to the author.
2024-06-21 02:24:03 -07:00
Michael Gottesman
b786c60e00 [region-isolation] Squelch errors from convert_function uses from a Sendable function.
We view the conversion from a Sendable to a non-Sendable function via
convert function to produce a new fresh sendable value. We should
squelch that error.
2024-06-21 02:24:03 -07:00
Michael Gottesman
3f39bdc1ed [sending] closure literals that are passed as sending parameters are now inferred to be nonisolated.
Consider the following piece of code and what the isolation is of the closure
literal passed to doSomething():

```swift
func doSomething(_ f: sending () -> ()) { ... }

@MyCustomActor
func foo() async {
  doSomething {
    // What is the isolation here?
  }
}
```

In this case, the isolation of the closure is @MyCustomActor. This is because
non-Sendable closures are by default isolated to their current context (in this
case @MyCustomActor since foo is @MyCustomActor isolated). This is a problem
since

1. Our closure is a synchronous function that does not have the ability to hop
to MyCustomActor to run said code. This could result in a concurrency hole
caused by running the closure in doSomething() without hopping to
MyCustomActor's executor.

2. In Region Based Isolation, a closure that is actor isolated cannot be sent,
so we would immediately hit a region isolation error.

To fix this issue, by default, if a closure literal is passed as a sending
parameter, we make its isolation nonisolated. This ensures that it is
disconnected and can be transferred safely.

In the case of an async closure literal, we follow the same semantics, but we
add an additional wrinkle: we keep support of inheritActorIsolation. If one
marks an async closure literal with inheritActorIsolation, we allow for it to be
passed as a sendable parameter since it is actually Sendable under the hood.
2024-06-21 02:24:03 -07:00
Joe Groff
73e4c6fecd IRGen: Don't encode conditional requirements to Copyable as normal conformance requirements.
For new runtimes, this is redundant with the invertible requirement encoding, and for
old runtimes, this breaks dynamic conformance checking because Copyable and Escapable
aren't real protocols on those older runtimes. Fixes rdar://129857284.
2024-06-20 19:01:03 -07:00
Slava Pestov
3a91280f08 Sema: Diagnose 'lazy' variable initializer with effect
This used to crash in SILGen.

Fixes https://github.com/apple/swift/issues/60128
Fixes https://github.com/apple/swift/issues/60129
2024-06-20 21:34:54 -04:00
Konrad `ktoso` Malawski
e85b461726 Merge pull request #74568 from ktoso/wip-remove-old-clang-workaround
[Concurrency] Remove OPTNONE workaround for old clang version
2024-06-21 08:55:36 +09:00
Tim Kientzle
174983f619 Merge pull request #74581 from tbkka/tbkka-assertions-2
Minor improvements to new ASSERT macros
2024-06-20 16:34:23 -07:00
Alex Lorenz
983fb8025a [cxx-interop][serialization] resolve x-refs to instantiated/synthesized C++ iterator conformance operators
These x-refs might not be resolvable using regular lookup from the 'std' module as they could be instantiated/synthesized
by the clang importer. Augment the lookup logic in that case to try clang importer lookup logic that is used during
the conformance to the C++ iterator protocol.
2024-06-20 14:51:34 -07:00
Egor Zhdan
21302e8f38 Merge pull request #74573 from apple/egorzhdan/nfc-import-as-ref-comment
[cxx-interop] NFC: update a couple outdated comments
2024-06-20 21:19:02 +01:00
Hamish Knight
23a85d19ed Merge pull request #74387 from hamishknight/pattern-resolution
[Sema] Requestify pattern resolution
2024-06-20 21:07:07 +01:00
Tim Kientzle
967fde0750 Minor improvements to new ASSERT macros
Three minor changes:
* Remove unneeded stdint.h inclusion
* Use __FILE_NAME__ instead of __FILE__ to reduce code size
* Write location as "file:line" for better compatibility with existing tools
2024-06-20 11:34:36 -07:00
Holly Borla
9facbd466b Merge pull request #74567 from hborla/remove-disable-region-isolation
[Concurrency] Remove `-disable-region-based-isolation-with-strict-concurrency`.
2024-06-20 10:34:33 -07:00
Egor Zhdan
b5a9da8942 [cxx-interop] NFC: update a couple outdated comments
`import_as_ref` attribute was renamed to `import_reference`.
2024-06-20 18:07:22 +01:00
Pavel Yaskevich
76d5dd4489 Merge pull request #72857 from li3zhen1/fix-init-accessor-71578
[AccessRequests] Allow Init accessor to be `internal`
2024-06-20 09:54:39 -07:00
Konrad `ktoso` Malawski
a43abe6a90 [Concurrency] Remove OPTNONE workaround for old clang version
This reverts c07aa9c425 which was done to
avoid a crash in optimnized caused by this PR:
https://github.com/apple/swift/pull/41088

Since this was almost 2 years ago, we probably don't have this issue
anymore as far as I can see other resolved issues, so try to remove the
workaround.

Resolves rdar://88711954
2024-06-20 20:03:33 +09:00
Holly Borla
de78fd4da5 [Concurrency] Remove the disable-region-based-isolation-with-strict-concurrency
flag.
2024-06-19 20:57:25 -07:00
Michael Gottesman
9b0e0f5010 Follow up fixes with feedback from #74129
Didn't need to modify any tests since this shouldn't have any functional
change. Just a slight cleanup.
2024-06-19 20:04:05 -07:00
Hamish Knight
a85ca1315b [Parse] Unify recovery for invalid tokens following a #if body
Previously we would only diagnose and recover for
invalid tokens following a `#if` body for the decl
and postfix expression case. Sink this logic into
`parseIfConfigRaw`, ensuring that we do this for
all `#if` cases. This requires propagating the
context we're parsing in to customize the
diagnostic.
2024-06-19 21:39:40 +01:00
Pavel Yaskevich
afa66b1a6b [AST] Rework diagnostic about init accessors inside of extensions 2024-06-19 11:24:55 -07:00
Holly Borla
4bec599931 Merge pull request #74543 from hborla/promote-isolated-any
[Features] Promote `IsolatedAny` and its alias to a language feature.
2024-06-19 10:32:30 -07:00
Holly Borla
966269d31a [Features] Promote IsolatedAny and its alias to a language feature.
The proposal is accepted and implemented for Swift 6.0.
2024-06-18 22:09:16 -07:00
Slava Pestov
cb1605f26f Merge pull request #74414 from slavapestov/pack-element-var
SIL: Fix lowering for 'var's whose types contain local archetypes
2024-06-18 17:14:50 -04:00
Hamish Knight
b8b6395635 Merge pull request #74331 from hamishknight/keyword-completion
[Completion] Completions for `inout`, `borrowing`, `consuming`, `isolated`, `consume`, and `copy`
2024-06-18 21:00:54 +01:00
Steven Wu
fef4ee4935 Merge pull request #74199 from cachemeifyoucan/eng/PR-128876895
[ScanDependencies] Make sure `canImport` resolution agrees with `import`
2024-06-18 09:14:19 -07:00
Akira Hatanaka
d92f181ace Create two versions (for caller and callee) of the functions that answer questions about parameter convention (#74124)
Create two versions of the following functions:

isConsumedParameter
isGuaranteedParameter
SILParameterInfo::isConsumed
SILParameterInfo::isGuaranteed
SILArgumentConvention::isOwnedConvention
SILArgumentConvention::isGuaranteedConvention

These changes will be needed when we add a new convention for
non-trivial C++ types as the functions will return different answers
depending on whether they are called for the caller or the callee. This
commit doesn't change any functionality.
2024-06-18 09:06:09 -07:00
Slava Pestov
e4d6108e11 SIL: Fix lowering for 'var's whose types contain local archetypes
A mutable 'var' becomes a SILBoxType, and we need to plumb the
correct generic signature through here too.

Fixes https://github.com/apple/swift/issues/71921.
2024-06-18 11:45:41 -04:00
Steven Wu
7d85aa423d [ScanDependencies] Make sure canImport resolution agrees with import
Fix the problem that when the only module can be found is an
invalid/out-of-date swift binary module, canImport and import statement
can have different view for if the module can be imported or not.

Now canImport will evaluate to false if the only module can be found for
name is an invalid swiftmodule, with a warning with the path to the
module so users will not be surprised by such behavior.

rdar://128876895
2024-06-17 14:14:48 -07:00
Steven Wu
1912d0b1e7 [Caching] Teach libSwiftScan to replay all diagnostics kind
Add support for serialized diagnostics, parseable output, and other
kinds of output from diagnostics engine to the libSwiftScan
replayCompilation API.

rdar://129015959
2024-06-17 13:32:10 -07:00
Steven Wu
e239ee87b0 [NFC] Rewrite and restructure diagnostics handling in FrontendTool
Extract the logics for emitting diagnostics, especially the parseable
output message, from FrontendTools so it is easier to reason.
2024-06-17 13:31:54 -07:00
Zhen Li
e298a663a2 Merge branch 'apple:main' into fix-init-accessor-71578 2024-06-17 12:48:20 -07:00
Rintaro Ishizaki
2f7aa428db [Macros] In-process plugin server
Separate swift-syntax libs for the compiler and for the library plugins.
Compiler communicates with library plugins using serialized messages
just like executable plugins.

* `lib/swift/host/compiler/lib_Compiler*.dylib`(`lib/CompilerSwiftSyntax`):
  swift-syntax libraries for compiler. Library evolution is disabled.
* Compiler (`ASTGen` and `swiftIDEUtilsBridging`) only depends on
  `lib/swift/host/compiler` libraries.
* `SwiftInProcPluginServer`: In-process plugin server shared library.
  This has one `swift_inproc_plugins_handle_message` entry point that
  receives a message and return the response.
* In the compiler
  * Add `-in-process-plugin-server-path` front-end option, which specifies
    the `SwiftInProcPluginServer` shared library path.
  * Remove `LoadedLibraryPlugin`, because all library plugins are managed
    by `SwiftInProcPluginServer`
  * Introduce abstract `CompilerPlugin` class that has 2 subclasses:
    * `LoadedExecutablePlugin` existing class that represents an
      executable plugin
    * `InProcessPlugins` wraps `dlopen`ed `SwiftInProcPluginServer`
  * Unified the code path in `TypeCheckMacros.cpp` and `ASTGen`, the
    difference between executable plugins and library plugins are now
    abstracted by `CompilerPlugin`
2024-06-17 11:36:52 -07:00
Holly Borla
4a98a53564 Merge pull request #74446 from hborla/dont-enable-full-typed-throws
[Features] `FullTypedThrows` should only be enable-able in asserts builds.
2024-06-15 09:43:03 -07:00
Tim Kientzle
219b4a61d4 Merge pull request #74439 from tbkka/tbkka-remotemirror-mpe-removal-fix
Fix an ABI break
2024-06-14 21:36:56 -07:00
Holly Borla
32aba12db3 [Features] FullTypedThrows should only be enable-able in asserts builds.
The implementation of this experimental feature is not complete and it's
not ready to be enabled in production.
2024-06-14 21:21:27 -07:00
Tim Kientzle
05c74e0d90 Revert "Merge pull request #74394 from tbkka/tbkka-remotemirror-no-more-mpe-metadata-partial"
This reverts commit a1708ef8b1, reversing
changes made to b5930625be.
2024-06-14 15:32:39 -07:00
Hamish Knight
51205ad65b Merge pull request #74409 from hamishknight/no-member-parsing-in-dump
[ASTDumper] Avoid parsing decl members
2024-06-14 21:35:04 +01:00
Michael Gottesman
f9954181ae Merge pull request #74129 from gottesmm/pr-d17a3faab1ceab8b831d7649c1005be9c49d771c
[region-isolation] Implement function sub typing rules
2024-06-14 12:53:22 -07:00
Konrad `ktoso` Malawski
2ec717b115 [Concurrency] TaskExecutor ownership fixes (#74000) 2024-06-14 22:56:33 +09:00
Hamish Knight
3104e3fbe3 [AST] Fix CaseStmt's getStartLoc
The body range may be valid; change `getStartLoc`
to fall back to the body's start loc to match
`getEndLoc`.
2024-06-14 10:54:47 +01:00
Hamish Knight
a9d3df06b3 Merge pull request #74352 from hamishknight/complete-disjunction
[Completion] Skip `tryOptimizeGenericDisjunction` if there's a completion child
2024-06-14 09:25:19 +01:00
Karoy Lorentey
2f2786579e Merge pull request #74366 from lorentey/define-availability-for-6.0
Define availability for the 6.0 stdlib & runtime; define placeholder availability for 6.1
2024-06-14 00:51:43 -07:00