Commit Graph

1662 Commits

Author SHA1 Message Date
Slava Pestov
0e21d85325 RequirementMachine: Add -requirement-machine-protocol-signatures= flag
There are three settings, on, off and verify. Not hooked up quite yet.
2021-10-09 19:11:14 -04:00
Pavel Yaskevich
790b5499b9 Merge pull request #38577 from xedin/multi-statement-closure-type-checking
[TypeChecker] Incremental multi-statement closure type-checking (disabled by default)
2021-10-09 11:49:13 -07:00
Doug Gregor
e845af8fc2 Merge pull request #39550 from DougGregor/require-explicit-sendable
Add `-require-explicit-sendable` to warn about non-Sendable public types
2021-10-08 16:13:06 -07:00
Alexis Laferrière
486e6ef560 Merge pull request #39640 from xymus/check-api-availability-only
[Sema] Intro flag to limit availability checks to the API
2021-10-08 15:04:40 -07:00
Pavel Yaskevich
a1c0823f46 [AST] Add a flag to guard exprimental multi-statement closures feature 2021-10-08 10:08:00 -07:00
Alexis Laferrière
a34953ece9 [Sema] Intro flag to limit availability checks to the API
Intro the frontend flag `-check-api-availability-only` that limits
availability checking to the API and SPI. This mode doesn't check the
availability of non-inlinable function bodies and of non-ABI-public decl
signatures.

This mode goal is to check all that is printed in the swiftinterface
file. It should be used in place of the wider
`-disable-availability-checking` when generating an interface for
platforms with no binaries.

rdar://81679692
2021-10-07 17:14:55 -07:00
Doug Gregor
bc4ae04f1f Add -require-explicit-sendable to warn about non-Sendable public types
Introduce a compiler flag that warnings about any public types defined in
a module that are neither explicitly `Sendable` nor explicitly
non-`Sendable` (the latter of which has no spelling currently), which
is intended to help with auditing a module for Sendable conformances.
2021-10-06 12:30:57 -07:00
elsh
2efab715cd Use real module names to load modules
Add ModuleInterface option meta tag for -module-alias
Add tests loading modules with -module-alias for swiftmodule and swiftinterface
with various loaders incl. serialized, explicit, and source loader.
2021-10-05 13:41:48 -07:00
Richard Howell
140c02466a Add -prefix-serialized-debugging-options (#39555)
This commit adds a new frontend flag that applies debug path prefixing to the
paths serialized in swiftmodule files. This makes it possible to use swiftmodule
files that have been built on different machines by applying the inverse map
when debugging, in a similar fashion to source path prefixing.

The inverse mapping in LLDB will be handled in a follow up PR.

Second pass at #39138

Tests updated to handle windows path separators.

This reverts commit f5aa95b381.
2021-10-04 22:41:32 -07:00
Saleem Abdulrasool
f5aa95b381 Revert "Add -prefix-serialized-debugging-options" (#39544)
Reverts #39138

This is causing a failure on Windows: https://ci-external.swift.org/job/oss-swift-windows-x86_64-vs2019/6659/consoleText
2021-10-01 11:19:44 -07:00
Kuba (Brecka) Mracek
d6bc48acde Merge pull request #39313 from kubamracek/conditional
Implement conditional stripping of type descriptors, protocols and protocol conformances via !llvm.used.conditional
2021-10-01 09:18:41 -07:00
Richard Howell
ce6b4b3ee0 Add -prefix-serialized-debugging-options
This commit adds the `-prefix-serialized-debugging-options` flag,
which is used to apply the debug prefix map to serialized debugging
options embedded in the swiftmodule files.
2021-09-30 08:18:03 -07:00
Kuba Mracek
2dfd232d90 Implement conditional stripping of type descriptors, protocols and protocol conformances via !llvm.used.conditional
A new LLVM IR affordance that allows expressing conditions under which globals
can be removed/dropped (even when marked with @llvm.used) is being discussed at:

- <https://reviews.llvm.org/D104496>
- <https://lists.llvm.org/pipermail/llvm-dev/2021-September/152656.html>

This is a preliminary implementation that marks runtime lookup records (namely
protocol records, type descriptors records and protocol conformance records)
with the !llvm.used.conditional descriptors. That allows link-time / LTO-time
removal of these records (by GlobalDCE) based on whether they're actually used
within the linkage unit. Effectively, this allows libraries that have a limited
and known set of clients, to be optimized against the client at LTO time, and
significantly reduce the code size of that library.

Parts of the implementation:
- New -conditional-runtime-records frontend flag to enable using !llvm.used.conditional
- IRGen code that emits these records can now emit these either as a single contiguous
  array (asContiguousArray = true, the old way), which is used for JIT mode, or
  as indivial globals (asContiguousArray = false), which is necessary for the
  !llvm.used.conditional stripping to work.
- When records are emitted as individual globals, they have new names of
  "\01l_protocol_" + mangled name of the protocol descriptor, and similarly for
  other records.
- Fixed existing tests to account for individual records instead of a single array
- Added an IR level test, and an end-to-end execution test to demonstrate that
  the !llvm.used.conditional-based stripping actually works.
2021-09-29 13:15:02 -07:00
Xi Ge
0343108cec Merge pull request #39488 from nkcsgexi/enable-clang-spi
ClangImporter: don't import clang SPI attributes by default
2021-09-28 13:36:29 -07:00
Xi Ge
a4b4b1fa65 ClangImporter: don't import clang SPI attributes by default 2021-09-28 10:46:27 -07:00
elsh
58a01c4ee7 Use StringMap
More specific diag msgs
Add tests
2021-09-24 14:37:56 -07:00
elsh
be26554418 Add a module alias option to frontend
Validate input and set up the module alias map
rdar://83316886
2021-09-24 14:37:56 -07:00
Gwen Mittertreiner
b6cff0b844 Add a Flag to Force Type Layouts for Structs
Added ForceStructTypeLayouts. When enabled, IRGen will lower structs using the
aligned group of TypeLayout rather than using TypeInfos. This potentially leads
to a size increase as TypeInfos currently produce better code than the
TypeLayout route.
2021-09-21 22:21:15 -07:00
Kuba (Brecka) Mracek
9fb54e95ae Add -internalize-at-link flag to allow dead stripping and VFE across modules at link time (#39214)
- Under -internalize-at-link, stop unconditionally marking all globals as used.
- Under -internalize-at-link, restrict visibility of vtables to linkage unit.
- Emit virtual method thunks for cross-module vcalls when VFE is enabled.
- Use thunks for vcalls across modules when VFE is enabled.
- Adjust TBDGen to account for virtual method thunks when VFE is enabled.
- Add an end-to-end test case for cross-module VFE.
2021-09-21 12:26:52 -07:00
Kuba (Brecka) Mracek
46eb8d5db5 Implement LLVM IR Witness Method Elimination for Swift witness tables. (#39287)
- Witness method calls are done via @llvm.type.checked.load instrinsic call with a type identifier
- Type id of a witness method is the requirement's mangled name
- Witness tables get !type markers that list offsets and type ids of all methods in the wtable
- Added -enable-llvm-wme to enable Witness Method Elimination
- Added IR test and execution test
2021-09-21 06:57:44 -07:00
nate-chandler
67aab4245d Merge pull request #39303 from nate-chandler/lexical_lifetimes/respell_defined_as_lexical
[SIL] Changed spelling of lifetime flags.
2021-09-16 13:30:51 -07:00
Arnold Schwaighofer
2381233ac1 Add flag -swift-async-framepointer=auto,never,always to
control swift extended frame information emission

On linux we default to disable the extended frame info (since the system
libraries don't support it).

On darwin the default is to automatically choose based on the deployment target.

The Concurrency library explicitly forces extended frame information and the
back deployment library explicitly disables it.
2021-09-14 12:47:16 -07:00
Alexis Laferrière
2cd0d5e1d3 Merge pull request #37768 from xymus/swiftmodule-sdk
[Serialization] Restrict loading swiftmodule files to the SDK that built them
2021-09-14 08:53:49 -07:00
Nate Chandler
f833b68d3b [SIL] Changed spelling of lifetime flags.
Changed the frontend flag to -enable-experimental-lexical-lifetimes from
-enable-experimental-defined-lifetimes.

Changed the attribute on begin_borrow from [defined] to [lexical].
2021-09-14 08:49:30 -07:00
nate-chandler
e68b6a7f83 Merge pull request #39283 from nate-chandler/lexical_lifetimes/let/initial
[SILGen] Added [defined] lifetimes for lets behind flag.
2021-09-14 08:47:35 -07:00
Kuba (Brecka) Mracek
5412ed1936 Implement LLVM IR Virtual Function Elimination for Swift classes. (#39128)
- Virtual calls are done via a @llvm.type.checked.load instrinsic call with a type identifier
- Type identifier of a vfunc is the base method's mangling
- Type descriptors and class metadata get !type markers that list offsets and type identifiers of all vfuncs
- The -enable-llvm-vfe frontend flag enables VFE
- Two added tests verify the behavior on IR and by executing a program
2021-09-14 06:59:07 -07:00
Alexis Laferrière
c38d1773d2 [Serialization] Restrict loading swiftmodule files to the builder's SDK
Serialize the canonical name of the SDK used when building a swiftmodule
file and use it to ensure that the swiftmodule file is loaded only with
the same SDK. The SDK name must be passed down from the frontend.

This will report unsupported configurations like:

- Installing roots between incompatible SDKs without deleting the
swiftmodule files.
- Having multiple targets in the same project using different SDKs.
- Loading a swiftmodule created with a newer SDK (and stdlib) with an
older SDK.

All of these lead to hard to investigate deserialization failures and
this change should detect them early, before reaching a deserialization
failure.

rdar://78048939
2021-09-13 16:44:08 -07:00
Nate Chandler
d002471784 Added -enable-experimental-defined-lifetimes.
The new flag will guard work on the experimental implementation of
tracking lexical lifetimes in SIL.
2021-09-13 11:06:22 -07:00
Alexis Laferrière
a144aa78cd Merge pull request #38966 from xymus/one-way-emit-module
[Driver] Force the test one-way-merge-module-fine to use emit-module
2021-09-09 08:11:35 -07:00
Alexis Laferrière
3ddbb88385 [Driver] Force the use of merge-module in merge-module specific test
As support, accept but ignore the -no-emit-module-separately flag in the
C++ driver.
2021-09-08 10:20:20 -07:00
Alexis Laferrière
0f7e57d07c [Driver] Align definition of the emit-module-separately flag with the driver's 2021-09-08 10:20:14 -07:00
Alexis Laferrière
4336084aa6 Merge pull request #39094 from xymus/driver-library-level
[Driver] Make -library-level a driver argument and pass it to the frontend
2021-08-30 16:22:26 -07:00
Alexis Laferrière
9cb3702b0a [Driver] Make -library-level a driver argument and pass it to the frontend
rdar://82458987
2021-08-30 10:06:53 -07:00
Doug Gregor
599974367e Enable concurrency back-deployment in the compiler by default.
Remove the option that explicitly enables concurrency back-deployment,
and instead always enable its support in the compiler. Remove the use
of the extraneous CMake option as well.
2021-08-28 22:43:41 -07:00
Doug Gregor
9d4ce58ed6 Merge pull request #38930 from DougGregor/concurrency-compatibility-library
[concurrency] Implement a compatibility .a library for Concurrency.
2021-08-28 22:40:37 -07:00
Varun Gandhi
0e13fcd857 Merge pull request #38750 from RAJAGOPALAN-GANGADHARAN/sr_14122
Improve usability of -l flag
2021-08-27 10:25:34 -07:00
Doug Gregor
76c4ac8263 Add a temporary flag to stage in back-deployment of concurrency.
Add a frontend-only flag `-enable-experimental-back-deploy-concurrency`
to be used to stage in the back deployment of concurrency. At present,
all it does is lower the availability minimums for use of concurrency
features.
2021-08-23 12:55:58 -07:00
Xi Ge
00124eaca1 Merge pull request #38979 from nkcsgexi/compile-interface-gen-abi-baseline 2021-08-22 14:31:11 -07:00
Xi Ge
1a660c08ca Frontend: teach -compile-module-from-interface action to emit ABI descriptor as byproduct
We have implemented a libSwiftDriver-based tool to generate prebuilt module cache for
entire SDKs. Anchored on the same infrastructure, we could also generate ABI baselines
for entire SDKs.
2021-08-20 15:47:10 -07:00
Slava Pestov
399a600e32 RequirementMachine: Add -debug-requirement-machine= flag to control debug output 2021-08-20 01:29:22 -04:00
Slava Pestov
fe2f42bc72 RequirementMachine: Rename -debug-requirement-machine flag to -dump-requirement-machine 2021-08-19 22:14:58 -04:00
Hamish Knight
7fd4406e0c Merge pull request #38915 from hamishknight/refactor-evaluate-print-loop
[test] Use %refactor-check-compiles in more places
2021-08-19 13:21:08 +01:00
Michael Gottesman
1bc94bfa6a [concurrency] Implement a compatibility .a library for Concurrency.
In a back deployment scenario, this will provide a place where one could provide
function implementations that are not available in the relevant stdlib.

This is just setting up for future work and isn't doing anything interesting
beyond wiring it up/making sure that it is wired up correctly with tests.
2021-08-18 09:35:37 -07:00
Doug Gregor
725624fc1b [SE-0286] Disable backward scanning for trailing closures in Swift 6 mode. 2021-08-18 05:54:54 -07:00
Hamish Knight
71fb1691af [Frontend] Add -warn-on-editor-placeholder
This hidden frontend option lets us be more lax
when type-checking in the presence of editor
placeholders by treating them as holes during
constraint solving.
2021-08-18 13:21:05 +01:00
Doug Gregor
d54abea922 Implement customizable Sendable conformance diagnostics.
Rework Sendable checking to be completely based on "missing"
conformances, so that we can individually diagnose missing Sendable
conformances based on both the module in which the conformance check
happened as well as where the type was declared. The basic rules here
are to only diagnose if either the module where the non-Sendable type
was declared or the module where it was checked was compiled with a
mode that consistently diagnoses `Sendable`, either by virtue of
being Swift 6 or because `-warn-concurrency` was provided on the
command line. And have that diagnostic be an error in Swift 6 or
warning in Swift 5.x.

There is much tuning to be done here.
2021-08-14 08:13:10 -07:00
willtunnels
d2138d089e Rename --enable-experimental-opaque-return-types and gate structural … (#38780)
* Rename --enable-experimental-opaque-return-types and gate structural opaque types with a flag

* Separate out structural opaque type result builder tests
2021-08-09 17:27:59 -04:00
Slava Pestov
5f298a81b7 RequirementMachine: Add -analyze-requirement-machine flag to print statistics 2021-08-05 21:42:50 -04:00
Rajagopalan-Gangadharan
4f5cb6a47b -l flag accepts space and emits without space to llvm frontend 2021-08-04 20:48:10 +05:30
Slava Pestov
08169c3ad3 Merge pull request #38726 from slavapestov/requirement-machine-flag-in-module-interface
Preserve -requirement-machine=(off|on|verify) in module interfaces
2021-08-02 21:13:04 -04:00