Commit Graph

488 Commits

Author SHA1 Message Date
Kuba (Brecka) Mracek
d3c5149714 Merge pull request #76658 from kubamracek/embedded-managed-buffer
[embedded] Add support for ManagedBuffer to Embedded Swift
2024-09-25 02:54:55 -07:00
Kuba Mracek
9101bdc4b2 [embedded] Support default arguments with metatypes-as-type-hints in Embedded Swift
Materializing metatypes is not allowed in Embedded Swift, but it's still useful
to use metatype functions arguments as type hints (unused in the function body).
This change enables such function arguments to have default values, and achieves
that by marking metatype-returning default arg generators as @_transparent.
2024-09-24 13:32:00 -07:00
Kuba Mracek
fc8d2cf871 [embedded] Add a test for using AnyObject explicitly 2024-09-23 15:24:36 -07:00
Kuba Mracek
c7a5569c4f [embedded] Add support for ManagedBuffer to Embedded Swift
This makes ManagedBuffer available and usable in Embedded Swift, by:

- Removing an internal consistency check from ManagedBuffer that relies on metatypes.
- Making the .create() API transparent (to hoist the metatype to the callee).
- Adding a AllocRefDynamicInst simplification to convert `alloc_ref_dynamic` to `alloc_ref`, which removes a metatype use.
- Adding tests for the above.
2024-09-23 13:32:50 -07:00
Kuba (Brecka) Mracek
4a51cfaf27 Merge pull request #76572 from kubamracek/embedded-class-bound-existentials
[embedded] Introduce class-bound existentials into Embedded Swift
2024-09-20 13:58:06 -07:00
Kuba Mracek
6b9a3051e3 [embedded] Introduce class-bound existentials into Embedded Swift
Motivated by need for protocol-based dynamic dispatch, which hasn't been possible in Embedded Swift due to a full ban on existentials. This lifts that restriction but only for class-bound existentials: Class-bound existentials are already (even in desktop Swift) much more lightweight than full existentials, as they don't need type metadata, their containers are typically 2 words only (reference + wtable pointer), don't incur copies (only retains+releases).

Included in this PR:
[x] Non-generic class-bound existentials, executable tests for those.
[x] Extension methods on protocols and using those from a class-bound existential.
[x] RuntimeEffects now differentiate between Existential and ExistentialClassBound.
[x] PerformanceDiagnostics don't flag ExistentialClassBound in Embedded Swift.
[x] WTables are generated in IRGen when needed.

Left for follow-up PRs:
[ ] Generic classes support
2024-09-19 07:49:50 -07:00
Kuba (Brecka) Mracek
142df19324 Merge pull request #76231 from kubamracek/embedded-deinit-release
[embedded] Handle retain/retain ops inside deinit in Embedded Swift's swift_release
2024-09-16 16:13:08 -07:00
Kuba Mracek
c8cbf06522 [embedded] Add a more targeted retain/release-in-deinit test 2024-09-16 10:31:35 -07:00
Kuba Mracek
e7b74051e8 [embedded] Fix generic function skipping in PerfDiags, diagnose KeyPathInsts in closures 2024-09-13 15:19:49 -07:00
Artem Chikin
1baff87879 Revert "[CMake] [Darwin] Don't build the SDK overlays by default on Apple platforms" 2024-09-09 09:57:14 -07:00
Ian Anderson
8959dd97fe [CMake] [Darwin] Don't build the SDK overlays by default on Apple platforms
The Apple SDKs have been providing the Darwin overlay since macOS 10.14.4, iOS 12.2, et al. More recently the SDK version has diverged from the Swift version making them incompatible. Stop building the overlay from Swift. Once the SDK overlays aren't being built, the clang overlays need to be built in testing.

%target-swift-emit-pcm doesn't use the sdk, but %target-swift-frontend does, which will cause them to have a mismatch with "builtin headers belong to system modules, and _Builtin_ modules are ignored for cstdlib headers" aka LANGOPT(BuiltinHeadersInSystemModules) aka -fbuiltin-headers-in-system-modules.

rdar://115192929
2024-09-06 13:28:14 -07:00
Kuba Mracek
249f7e6073 [embedded] Handle retain/retain ops inside deinit in Embedded Swift's swift_release 2024-09-03 14:38:03 -07:00
Ben Langmuir
ad82d86041 Bump the deployment target for the compiler to macOS 13.0
Bump the deployment target from macOS 10.13-aligned versions to macOS
13.0-aligned versions. This allows us to stop linking CoreFoundation
in the swift runtime, which was previously required for availability
checking. It also lets us align the deployment target on x86_64 with
arm64, which was 11.0. Finally, it is a prerequisite to being able to
build swift using the macOS 15 beta SDKs.
2024-08-29 14:30:09 -07:00
Erik Eckstein
b54117c22d GenericSpecializer: drop unused indirect arguments.
If there is no read from an indirect argument, this argument has to be dropped.
At the call site the store to the argument's memory location could have been removed (based on the callee's memory effects).
Therefore, converting such an unused indirect argument to a direct argument, would load an uninitialized value at the call site.
This would lead to verifier errors and in worst case to a miscompile because IRGen can implicitly use dead arguments, e.g. for getting the type of a class reference.
2024-08-26 11:19:12 +02:00
Erik Eckstein
c8e74b8393 Generic specialization: change the mangling for dropped metatype arguments
Instead of adding a "flag" (`m` in `...Tgm5`) make it more generic to allow to drop any unused argument.
Add all dropped arguments with a `t<n-1>` (where `<n-1>` is empty for n === 0). For example `...Ttt2g5`.
2024-08-26 10:43:15 +02:00
Kuba Mracek
2fa625e439 [embedded] Adjust IR expectations in traps-fatalerror-ir.swift and traps-multiple-preconditions-ir.swift tests 2024-08-22 13:24:07 -07:00
Kuba Mracek
555ca3bcec [embedded] Make assert helper functions always inlined to avoid trap basic blocks from merging 2024-08-21 15:03:46 -07:00
Erik Eckstein
ba9bfaf5d5 VTableSpecializer: fix a crash for methods which have their own generic parameters
rdar://133334324
2024-08-21 17:01:35 +02:00
Erik Eckstein
44d85c1f72 CrossModuleOptimization: serialized witness tables in embedded mode
This is needed so that client modules can de-virtualize witness method calls.

Fixes a false "cannot use a value of protocol type in embedded Swift" error.
rdar://133993657
2024-08-20 20:32:32 +02:00
Erik Eckstein
65adc5a582 FunctionSignatureOpts: don't convert non-copyable owned -> guaranteed arguments
It's not safe to insert a compensating release_value at the call site.
This release_value calls the deinit which might have been already de-virtualized in the callee.
2024-08-12 08:54:22 +02:00
Kuba (Brecka) Mracek
5f83c58a5d [embedded] Restrict embedded/string-switch.swift test to macOS for now 2024-08-08 10:07:53 -07:00
Kuba Mracek
3c9f1ebb55 [embedded] Add StringSwitch.swift to the embedded stdlib 2024-08-07 21:37:01 -07:00
Kuba Mracek
2d0c942996 [embedded] Add __ZdlPvm (operator delete with size argument) to concurrency dependency allowlist 2024-08-06 13:05:54 -07:00
Joe Groff
9f2ee07de8 Merge pull request #75334 from jckarter/extern-is-experimental
`@_extern` is an experimental feature.
2024-07-19 09:04:14 -07:00
Joe Groff
51829c17bf @_extern is an experimental feature.
Mark it as such. rdar://132013078
2024-07-18 11:46:16 -07:00
Yuta Saito
c120c5a8e1 [test] Guard AVR test with CODEGENERATOR=AVR
This test is only relevant for the AVR target, so it should be guarded
with the CODEGENERATOR=AVR condition to avoid running it when the target
is not enabled in llvm-targets-to-build.
2024-07-18 15:44:48 +00:00
Doug Gregor
ac0f574fdb Merge pull request #75127 from carlos4242/embedded-avr-cross-compile-stdlib
[AVR] standard library support for AVR
2024-07-17 22:17:42 -07:00
Carl Peto
39adecbfcb simplify standard library unit test to just check basic usage 2024-07-17 10:58:08 +01:00
Carl Peto
3c65c79def fix test 2024-07-16 22:30:34 +01:00
Carl Peto
3689427834 [AVR] standard library support for AVR
- when compiling embedded cross compile target standard libraries, include AVR
- add 16-bit pointer as a conditional compilation condition and get the void pointer size right for gyb sources
- attempt to fix clang importer not importing __swift_intptr_t correctly on 16 bit platforms
- changed the unit test target to avr-none-none-elf to match the cmake build

[AVR] got the standard library compiling in a somewhat restricted form:

General
- updated the Embedded Runtime
- tweaked CTypes.swift to fix clang import on 16 bit platforms

Strings
- as discussed in https://forums.swift.org/t/stringguts-stringobject-internals-how-to-layout-on-16-bit-platforms/73130, I went for just using the same basic layout in 16 bit as 32 bit but with 16 bit pointers/ints... the conversation is ongoing, I think something more efficient is possible but at least this compiles and will probably work (inefficiently)

Unicode
- the huge arrays of unicode stuff in UnicodeStubs would not compile, so I skipped it for AVR for now.

Synchronization
- disabled building the Synchronization library on AVR for now. It's arguable if it adds value on this platform anyway.
2024-07-16 12:28:27 +01:00
Owen Voorhees
5490b44772 Allow enabling embedded Swift without WMO when not generating SIL
This allows modes like -index-file to work the same way they do when not using embedded Swift
2024-07-15 17:49:47 -07:00
Erik Eckstein
823036d5a1 embedded: fix vtable specialization for nested classes
Fixes a crash in case of an inner class (with no generic parameters), which is nested inside another generic type, like
```
struct G<T> {
  class Inner {}
}
```

rdar://131311511
2024-07-12 21:44:49 +02:00
Ryan Mansfield
ec20345a52 Add REQUIRES for noncopyable-captures.swift. 2024-07-08 15:12:38 -04:00
Erik Eckstein
1a308ef2fe PerformanceDiagnostic: give an error if a generic non-copyable value with a deinit is captured by an escaping closure.
Otherwise IRGen would crash.
It needs a bit of work to support alloc_box of generic non-copyable structs/enums with deinit, because we need to specialize the deinit functions, though they are not explicitly referenced in SIL.
Until this is supported, give an error in such cases.

Fixes a compiler crash in IRGen
rdar://130283111
2024-07-08 10:05:19 +02:00
Meghana Gupta
5815424ef2 Merge pull request #74703 from meg-gupta/bringbackflag
[NFC] Add -enable-import-ptrauth-field-function-pointers as a no-op
2024-06-25 23:14:51 -07:00
Meghana Gupta
d509e628a6 [NFC] Add -enable-import-ptrauth-field-function-pointers as a no-op 2024-06-25 16:03:53 -07:00
Kuba (Brecka) Mracek
5e949b8e2b Merge pull request #74674 from kubamracek/embedded-failable
[embedded] Fix crash when using failable initializers on generic classes
2024-06-25 06:58:20 -07:00
Kuba Mracek
bda0c904ef [embedded] Fix crash when using failable initializers on generic classes 2024-06-24 20:36:02 -07:00
Erik Eckstein
1f9588e5c6 MandatoryPerformanceOptimizations: prevent inlining of dynamic-self class methods
This fixes a compiler crash in embedded swift.

rdar://129241915
2024-06-24 15:01:02 +02:00
Kuba (Brecka) Mracek
70c54bb739 Merge pull request #74551 from kubamracek/embedded-static-objects
[embedded] Enable read-only static array promotion in embedded mode
2024-06-19 21:07:06 -07:00
Kuba (Brecka) Mracek
6844292d72 Merge pull request #74553 from kubamracek/volatile-tests
Mark tests that use the _Volatile module as REQUIRES: volatile
2024-06-19 16:48:45 -07:00
Kuba Mracek
a8312b6c1f Mark tests that use the _Volatile module as REQUIRES: volatile 2024-06-19 10:13:14 -07:00
Kuba Mracek
632c78b18f [embedded] Fix missing linkage to Unicode data tables in specialize-attrs2.swift test 2024-06-19 09:27:20 -07:00
Kuba Mracek
155c9708bd [embedded] Fix -target in modules-empty-object.swift test 2024-06-19 09:22:57 -07:00
Kuba Mracek
62d7167c3f [embedded] Enable read-only static array promotion in embedded mode 2024-06-19 09:16:04 -07:00
Kuba (Brecka) Mracek
9e7501601c Merge pull request #74489 from kubamracek/embedded-less-stdlibs
[embedded] Don't build *all* the embedded stdlibs by default
2024-06-18 13:50:25 -07:00
Kuba (Brecka) Mracek
4d52b58d44 Merge pull request #74480 from kubamracek/embedded-no-eager-specializer
[embedded] Skip EagerSpecializer on embedded Swift
2024-06-17 18:44:14 -07:00
Kuba (Brecka) Mracek
03b0f0cc57 Merge pull request #74442 from kubamracek/embedded-string-to-pointer
[embedded] Implement missing _convertConstStringToUTF8PointerArgument to support string to pointer conversion
2024-06-17 10:45:39 -07:00
Kuba Mracek
dc2edb6e9b [embedded] Don't build *all* the embedded stdlibs by default 2024-06-17 10:32:56 -07:00
Kuba Mracek
b0f3da65eb [embedded] Skip EagerSpecializer on embedded Swift 2024-06-17 08:58:46 -07:00