Commit Graph

4571 Commits

Author SHA1 Message Date
Allan Shortlidge
f6e30ea83c Frontend: Refactor how flags are saved for module interfaces.
There are two axes on which a saved frontend flag can be categorized for
printing in a `.swiftinterface` file:

1. Whether the flag is "ignorable" or not.
2. Which levels of interface the flag should be in (public, package).

This refactor ensures that those two axes are modeled independently and
prepares the infrastructure to allow flags to appear in the private and package
interfaces without being included in the public interface.
2024-07-03 09:10:48 -07:00
Allan Shortlidge
a28b729594 Frontend: Remove unused ModuleInterfaceOptionIgnorablePrivate. 2024-07-03 08:51:02 -07:00
swift-ci
cd01941fbb Merge remote-tracking branch 'origin/main' into rebranch 2024-07-01 01:35:37 -07:00
Ellie Shin
8e914d72a4 Merge pull request #74827 from swiftlang/elsh/no-pkg-name-interfaces
Option to disable printing package-name in public or private interface.
2024-07-01 01:22:45 -07:00
Ellie Shin
87452c6cbf Remove string compute logic 2024-06-28 20:30:38 -07:00
Ellie Shin
ea8a05399f Drop package-name if needed in SaveModuleInterfaceArgs 2024-06-28 20:24:28 -07:00
Ellie Shin
e5b4655108 Option to disable printing package-name in public or private interface.
Having package-name flag in non-package interfaces causes them to be built as if
belonging to a package, which causes an issue for a loading client outside of the
package as follows.

For example, when building X that depends on A with the following dependency chain:
  X --> A --> B --(package-only)--> C

1. X itself is not in the same package as A, B, and C.
2. When dependency scanning X, and opening up B, because the scan target is in a
   different package domain, the scanner decides that B's package-only dependency
   on C is to be ignored.
3. When then finally building A itself, it will load its dependencies, but because
   the .private.swiftinterface of A still specifies -package-name, when it loads
   B, it will then examine its dependencies and deem that this package-only dependency
   on C is required.

Because (2) and (3) disagree, we get an error now when building the private A textual interface.

rdar://130701866
2024-06-28 15:06:21 -07:00
swift-ci
f2e68e5db1 Merge remote-tracking branch 'origin/main' into rebranch 2024-06-28 11:36:11 -07:00
Ben Barham
d8f381e660 Merge pull request #74804 from bnbarham/rename-equals
Update `StringRef::equals` references to `operator==`
2024-06-28 11:22:20 -07:00
Ben Barham
d72f5b12c4 Update StringRef::equals references to operator==
`equals` has been deprecated upstream, use `operator==` instead.
2024-06-27 19:14:06 -07:00
Ben Barham
b7954411ec Merge remote-tracking branch 'origin/main' into manually-merge-main-to-rebranch
Conflicts:
  - `include/swift/AST/PluginRegistry.h`
2024-06-27 14:56:11 -07:00
Steven Wu
5056e79942 Merge pull request #74128 from cachemeifyoucan/eng/PR-129015959
[Caching] Teach libSwiftScan to replay all diagnostics kinds
2024-06-26 11:27:56 -07:00
Rintaro Ishizaki
5ebd715a2a Merge pull request #73725 from rintaro/macros-inproc-plugin
[Macros] In-process plugin server
2024-06-26 06:33:38 -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
Xi Ge
736ccef626 Merge remote-tracking branch 'apple/main' into rebranch 2024-06-20 15:16:55 -07:00
Tim Kientzle
598e5104ef Merge pull request #74184 from tbkka/tbkka-assertions2
Add `#include "swift/Basic/Assertions.h"` to a lot of source files
2024-06-20 12:13:28 -07:00
swift-ci
aa03394c53 Merge remote-tracking branch 'origin/main' into rebranch 2024-06-20 10:35:23 -07:00
Holly Borla
de78fd4da5 [Concurrency] Remove the disable-region-based-isolation-with-strict-concurrency
flag.
2024-06-19 20:57:25 -07:00
Tim Kientzle
1098054291 Merge branch 'main' into tbkka-assertions2 2024-06-18 17:52:00 -07:00
swift-ci
08c89c3ee6 Merge remote-tracking branch 'origin/main' into rebranch 2024-06-18 09:14:51 -07: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
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
swift-ci
83065a2ba5 Merge remote-tracking branch 'origin/main' into rebranch 2024-06-14 13:55:26 -07:00
Hamish Knight
a8c72617e4 [ASTDumper] Avoid parsing decl members
Previously we would call `getMembers`, which could
kick delayed member parsing. Instead, propagate a
`parseIfNeeded` flag through the ASTDumper logic,
and use it to determine whether to parse a
SourceFile, type/extension body, or function body.
This is needed for things like `-dump-parse` which
expects to dump the entire AST tree.
2024-06-14 10:54:47 +01:00
swift-ci
c7002b524a Merge remote-tracking branch 'origin/main' into rebranch 2024-06-12 22:14:25 -07:00
Kavon Farvardin
9eba052ab2 Merge pull request #74322 from kavon/se427-noimplicit-for-invertible
SE-427: Make conditional conformances to Copyable more explicit.
2024-06-12 22:03:49 -07:00
swift-ci
776dbd1774 Merge remote-tracking branch 'origin/main' into rebranch 2024-06-12 15:14:57 -07:00
Alexis Laferrière
9c868f8454 Merge pull request #74351 from xymus/cross-import-hidden-imports
Sema: Support access-level on imports with cross-import overlays
2024-06-12 14:56:49 -07:00
Kavon Farvardin
a1e14ae0c7 Sema: ext's must add solo invertible conformances
This helps prevent confusion after not inferring requirements if the
extension adds a Copyable conformance.
2024-06-12 14:44:22 -07:00
Alexis Laferrière
f53be71874 ModuleInterface: Print imports shadowed by a cross-import overlay
In some cases this import may be superfluous as it's also
`@_exported` imported by the overlay. However, when the overlay
is hidden and the import not printed, the import can go entierly
missing.
2024-06-12 10:06:05 -07:00
swift-ci
2b008ffa34 Merge remote-tracking branch 'origin/main' into rebranch 2024-06-11 16:15:18 -07:00
Yuta Saito
8428b36571 Merge pull request #74277 from kateinoigakukun/katei/save-public-autolink-library-interface
[ModuleInterface] Save `-public-autolink-library` module option
2024-06-12 08:08:18 +09:00
swift-ci
43c0f2fe4a Merge remote-tracking branch 'origin/main' into rebranch 2024-06-11 14:35:19 -07:00
Saleem Abdulrasool
dc131ee180 Frontend: share the module cache path with clang
Rather than trying to re-compute the cache path manually for the
default, use the clang provided interface to home the module cache. This
ensures that we do not write the files into a top-level directory on
Windows.
2024-06-11 08:58:53 -07:00
Yuta Saito
6a11171755 [ModuleInterface] Save -public-autolink-library module option
Serialize the `-public-autolink-library <name>` option to the
moduleinterface file because it can affect the LINK_LIBRARY entries in a
swiftmodule file. Without saving the option, the library won't be linked
when a module compiled from the moduleinterface is used.

This change marks the `-public-autolink-library` option as a module
interface option and reads it when building a swiftmodule by module
loader.
2024-06-11 02:22:31 +00:00
Tim Kientzle
1d961ba22d Add #include "swift/Basic/Assertions.h" to a lot of source files
Although I don't plan to bring over new assertions wholesale
into the current qualification branch, it's entirely possible
that various minor changes in main will use the new assertions;
having this basic support in the release branch will simplify that.
(This is why I'm adding the includes as a separate pass from
rewriting the individual assertions)
2024-06-05 19:37:30 -07:00
swift-ci
aed40bd421 Merge remote-tracking branch 'origin/main' into rebranch 2024-06-05 19:34:38 -07:00
artemcm
d70863501e [Dependency Scanning] Collect and report each module dependency's Link Libraries 2024-06-05 10:59:41 -07:00
swift-ci
f196fa91ec Merge remote-tracking branch 'origin/main' into rebranch 2024-06-03 14:35:06 -07:00
Steven Wu
48237b86f1 Merge pull request #74012 from cachemeifyoucan/eng/PR-128873665
[ScanDependency] Handle `-Xcc` options that affects module generation
2024-06-03 14:33:56 -07:00
swift-ci
563c233c0e Merge remote-tracking branch 'origin/main' into rebranch 2024-06-03 11:15:43 -07:00
Steven Wu
0aa0687fe0 Merge pull request #73853 from cachemeifyoucan/eng/PR-128067152
[ScanDependency][canImport] Improve canImport handling in explicit build
2024-06-03 11:07:02 -07:00
Steven Wu
42732c0073 [ScanDependency] Handle -Xcc options that affects module generation
Make sure the `-Xcc` options to the scanner are correctly considered
when creating ClangImporterCC1 arguments for constructed swift interface
compilation job. Under directcc1 mode, `-Xcc` options should be used to
constructed sub-invocation but should not be added to GenericArgs for
constructing interface compilation jobs.

rdar://128873665
2024-06-03 09:57:10 -07:00
swift-ci
6950a31397 Merge remote-tracking branch 'origin/main' into rebranch 2024-06-03 09:33:41 -07:00
Steven Wu
81c0636dd9 Merge pull request #73822 from cachemeifyoucan/eng/PR-128423393
[Caching] Don't rely on FileSystem when replaying diagnostics
2024-06-03 09:25:35 -07:00
swift-ci
5abac881ad Merge remote-tracking branch 'origin/main' into rebranch 2024-06-02 15:34:45 -07:00
Michael Gottesman
b2808d1d23 Merge pull request #73381 from gottesmm/rdar120420024
[sending] Change CheckedContinuation.resume and Async{Throwing,}Stream.yield to use transferring parameters.
2024-06-02 15:19:40 -07:00
Michael Gottesman
88729b9e34 [sending] Make {Transferring,Sending}ArgsAndResults a LANGUAGE_FEATURE instead of an UPCOMING_FEATURE.
TLDR: This makes it so that we always can parse sending/transferring but changes
the semantic language effects to be keyed on RegionBasedIsolation instead.

----

The key thing that makes this all work is that I changed all of the "special"
semantic changes originally triggered on *ArgsAndResults to now be triggered
based on RegionBasedIsolation being enabled. This makes a lot of sense since we
want these semantic changes specifically to be combined with the checkers that
RegionBasedIsolation turns on. As a result, even though this causes these two
features to always be enabled, we just parse it but we do not use it for
anything semantically.

rdar://128961672
2024-06-01 23:25:16 -07:00