Commit Graph

12816 Commits

Author SHA1 Message Date
Rintaro Ishizaki
f7e35cb835 [AST] Requestify local type declarations
Instead of recording local type declarations while parsing, make a
request to collect them from the AST. This reduces the side effect of
parsing.
2024-01-05 13:26:55 -08:00
Andrew Trick
119d40d99b Merge pull request #70705 from atrick/markdep-nonescaping
Add mark_dependence [nonescaping] flag.
2024-01-05 11:33:33 -08:00
Kuba Mracek
6fb57d8792 [embedded] Don't emit __swift_reflection_version symbol 2024-01-05 14:40:09 +01:00
eeckstein
2993e3bdc3 Merge pull request #70712 from eeckstein/fix-static-array-storage
IRGen: get metadata symbol of class __StaticArrayStorage the correct way
2024-01-05 08:32:37 +01:00
nate-chandler
bb24b8c045 Merge pull request #70720 from nate-chandler/rdar119829826
[IRGen] Pack metadata may be allocated based on type layouts.
2024-01-04 19:31:47 -08:00
Andrew Trick
264cbaea42 Add mark_dependence [nonescaping] flag.
The dependent 'value' may be marked 'nonescaping', which guarantees that the
lifetime dependence is statically enforceable. In this case, the compiler
must be able to follow all values forwarded from the dependent 'value', and
recognize all final (non-forwarded, non-escaping) use points. This implies
that `findPointerEscape` is false. A diagnostic pass checks that the
incoming SIL to verify that these use points are all initially within the
'base' lifetime. Regular 'mark_dependence' semantics ensure that
optimizations cannot violate the lifetime dependence after diagnostics.
2024-01-04 14:47:35 -08:00
Kuba (Brecka) Mracek
f5dd7857a8 Merge pull request #70357 from kubamracek/embedded-dep-noalloc
[embedded] In -no-allocations, avoid linking allocating/deallocating runtime functions
2024-01-04 22:58:20 +01:00
Nate Chandler
73d68a3f28 [IRGen] Pack metadata may be alloc'd for layouts.
Previously, mayRequirePackMetadata only considered whether a type
involved a pack.  That failed to account for the case of outlined value
functions that require pack metadata when the type involves a pack in
its layout.  Here, mayRequirePackMetadata now considers also whether the
layout corresponding to a type involves a pack.

rdar://119829826
2024-01-04 12:21:47 -08:00
Erik Eckstein
ded1b6ea8c IRGen: get metadata symbol of class __StaticArrayStorage the correct way
Fixes an unresolved symbol error when building the stdlib on some platforms.

rdar://119991570
2024-01-04 18:32:23 +01:00
Kuba Mracek
2c24c1216f [embedded] In -no-allocations, avoid linking allocating/deallocating runtime functions 2024-01-04 13:28:56 +01:00
Slava Pestov
79d4260ae2 SIL: Remove the incorrect old getTypeLinkage() 2024-01-03 14:45:29 -05:00
Michael Gottesman
6d00750ad0 Merge pull request #70653 from gottesmm/transferring
[region-isolation] Initial refactoring work for supporting Transferring Args and Results
2024-01-02 18:51:44 -08:00
Slava Pestov
8e2aa52f7a Merge pull request #70667 from slavapestov/assorted-small-cleanups
Assorted small cleanups
2024-01-02 19:00:59 -05:00
Michael Gottesman
1764bd2479 [sil] Change SILParameterInfo/SILResultInfo's differentiability parameter to use an OptionSet so we can add other options.
I am doing this in preparation for adding options to SILParameterInfo/
SILResultInfo that state that a parameter/result is transferring. Even though I
could have just introduced a new bit here, I instead streamlined the interface
of SILParameterInfo/SILResultInfo to use an OptionSet instead of individual bits
to make it easier to add new flags here. The reason why it is easier is that
along API (e.x.: function argument) boundaries one does not have to marshal each
field or pass each field. Instead one can just pass the whole OptionSet as an
opaque thing. Using this I was able to change serialization/deserialization of
SILParameterInfo/SILResultInfo so that one does not need to update them if one
adds new fields!

The reason why I am doing this for both SILParameterInfo/SILResultInfo in the
same commit is because they share code in the demangler that I did not want to
have to duplicate in an intervening commit. By changing them both at the same
type, I didn't have to change anything without an actual need to.

I am doing this in a separate commit from adding transferring support so I can
validate correctness using the tests for the options already supported
(currently only differentiability).
2024-01-02 15:03:05 -08:00
Kuba (Brecka) Mracek
4b4048180f Merge pull request #70563 from kubamracek/embedded-no-entry-point
[embedded] Do not emit entry point data (__swift5_entry) in embedded Swift
2024-01-02 23:47:23 +01:00
Slava Pestov
9e2123bb2a IRGen: Fix some formatting in an assertion regarding on-stack pack cleanups 2024-01-02 15:41:13 -05:00
Dario Rexin
b238c16f51 [IRGen] Disable simple single payload enum in layout strings (#70528)
rdar://119792426

There are a few issues with wrong assumptions around extra inhabitants that cause tags to not be identified properly in some cases. Until a proper fix is identified, we emit tag functions instead.
2023-12-20 14:55:52 -08:00
Kuba Mracek
282e65170e [embedded] Do not emit entry point data (__swift5_entry) in embedded Swift 2023-12-20 20:05:28 +01:00
Mariusz Borsa
5f4320568b Merge pull request #70508 from apple/eng/m_borsa/112915278
[Sanitizers] Add new sanitize-stable-abi flag for libsanitizers.
2023-12-18 09:58:55 -08:00
usama
3053fe01b5 [Sanitizers] Add new sanitize-stable-abi flag for libsanitizers.
This patch adds a new flag sanitize-stable-abi to support linking
against the Sanitizers stable ABI added recently in compiler-rt. The
patch also passes extra options for the ASan pass when using this flag
to outline instrumentation code and remove version check.

rdar://112915278
2023-12-16 14:13:00 -08:00
Arnold Schwaighofer
b4ef029fe6 IRGen: Add support for typed throws to thunk code generation
rdar://119725769
2023-12-15 15:39:29 -08:00
Becca Royal-Gordon
e9672194b4 Merge pull request #69468 from beccadax/c-implementation
Make @objcImpl work with @_cdecl
2023-12-14 00:36:12 -08:00
Becca Royal-Gordon
8651af4325 Make @objcImpl work with @_cdecl
No real diagnostics yet, but we’re emitting mostly correct code.
2023-12-13 11:09:49 -08:00
Erik Eckstein
e4ea7491a2 IRGen: fix and re-enable static read-only arrays
Static read-only arrays didn't work when passed to ObjectiveC as NSArray.
The storage class of static read-only arrays doesn't carry information about the Element type.
The new `__SwiftDeferredStaticNSArray` is generic over the element type and doesn't have to rely on the element type information of the array storage.

rdar://94185998
2023-12-13 11:45:01 +01:00
Alejandro Alonso
f365316d74 Merge pull request #70327 from Azoy/inject-get-enum-tag-builtins
[IRGen] Add getEnumTag and injectEnumTag builtins
2023-12-12 16:07:56 -08:00
Kuba (Brecka) Mracek
ec87fbcaca Merge pull request #70344 from kubamracek/embedded-nounwind
[embedded] Mark all functions as 'nounwind' in embedded Swift, add dependency tests
2023-12-12 10:37:54 -08:00
Tony Allevato
49dbf152e0 Merge pull request #70371 from allevato/c++20-fixes
[C++20] Make `operator==` const.
2023-12-12 08:04:47 -05:00
Konrad `ktoso` Malawski
828f589be4 Initial Task Executor implementation Task(on:), addTask(on:) etc. (#68793)
Co-authored-by: John McCall <rjmccall@gmail.com>
2023-12-12 17:14:24 +09:00
Doug Gregor
7a3e3aea15 Merge pull request #70353 from DougGregor/error-union-type
[Typed throws] Add an ErrorUnion type to the type system
2023-12-11 22:04:10 -08:00
Kuba Mracek
fdc69fb6a1 [embedded] Actually, use 'nounwind' even with C++ interop on, add comment 2023-12-11 13:37:41 -08:00
Alejandro Alonso
49b0a23561 Add getEnumTag and injectEnumTag builtins 2023-12-11 10:58:29 -08:00
Kuba Mracek
9e8db64f45 [embedded] Don't apply 'nounwind' if C++ interop is enabled 2023-12-11 09:08:06 -08:00
Tony Allevato
c7e52ca7da [C++20] Make operator== const.
C++20 considers calls to `operator==` ambiguous with calls that have
the arguments reversed if the argument is const but `this` is not.
2023-12-11 09:14:29 -05:00
eeckstein
484fc77a8c Merge pull request #70301 from eeckstein/fixed-array
Add experimental support for fixed arrays
2023-12-11 09:36:29 +01:00
Kavon Farvardin
e99ce1cc5d [NCGenerics] add ~Escapable
Basic implementation of `~Escapable` in the type system.

rdar://119216918
2023-12-10 01:25:43 -08:00
Erik Eckstein
dd9ce40ba1 add the allocVector builtin 2023-12-09 18:49:57 +01:00
Erik Eckstein
df9f480cdc IRGen: handle vector and alloc_vector in global initializers 2023-12-09 18:49:57 +01:00
Erik Eckstein
e652f2c92e SIL: add the alloc_vector and vector instructions
* `alloc_vector`: allocates an uninitialized vector of elements on the stack or in a statically initialized global
* `vector`: creates an initialized vector in a statically initialized global
2023-12-09 18:49:55 +01:00
Kuba Mracek
4e56d810fa [embedded] Mark all functions as 'nounwind' in embedded Swift, add dependency tests 2023-12-09 08:46:00 -08:00
Doug Gregor
b080b5f3d8 [Typed throws] An ErrorUnion type to the type system
The errorUnion type operation specifies how thrown error types are
combined when multiple errors are thrown in the same context. When
thrown error types can have type variables in them, we sometimes cannot
resolve the errorUnion until the type variables have substitutions. In
such cases, we need to persist the result of errorUnion in the
constraint solver.

Introduce the ErrorUnionType to do exactly that, and update the core
errorUnion operation to produce an ErrorUnionType when needed. At
present, this code is inert, because any errorUnion operation today
involves only concrete types. However, inference of thrown errors in
closures will introduce type variables, and depend on this.
2023-12-08 22:30:37 -08:00
Kavon Farvardin
63b3e7624d [NCGenerics] fold InverseType into PCT
We already need to track the inverses separate from the members in a
ProtocolCompositionType, since inverses aren't real types. Thus, the
only purpose being served by InverseType is to be eliminated by
RequirementLowering when it appears in a conformance requirement.

Instead, we introduce separate type InverseRequirement just to keep
track of which inverses we encounter to facilitate cancelling-out
defaults and ensuring that the inverses are respected after running
the RequirementMachine.
2023-12-07 22:14:23 -08:00
Nate Chandler
58677fe8e5 [IRGen] Always use BitwiseCopyable TypeInfo.
If an archetype conforms to the protocol, use the new TypeInfo.  This
allows clients to use code in the stdlib that's built with
BitwiseCopyable.
2023-12-05 17:21:05 -08:00
nate-chandler
d909073233 Merge pull request #70112 from nate-chandler/rdar96919870/2/typeinfo
[IRGen] Use memcpy for BitwiseCopyable archetypes.
2023-12-01 11:45:48 -08:00
Adrian Prantl
c70447c878 Merge pull request #70132 from adrian-prantl/difile-source-macro
[Debug Info] Store the source code for macro expansions in the debug …
2023-12-01 08:43:16 -08:00
Nate Chandler
fef7c77f08 [IRGen] Use memcpy for BitwiseCopyable archetypes.
Besides being an optimization, using memcpy directly rather than a value
witness is required in order to interact with unaligned instances of
such types: the value witness functions expect their arguments to be
aligned.

rdar://96919870
2023-12-01 06:58:36 -08:00
Nate Chandler
9562312c83 [IRGen] Add dynamic size variant of CreateMemCpy.
Similar to the existing variant which takes a fixed size, the new
variant which takes a dynamic size digs the relevant address and
alignment values out of the Address struct and passes them along.
2023-12-01 06:58:36 -08:00
Nate Chandler
b266abe5c0 [BitwiseCopyable] Add a marker protocol.
Behind the experimental feature BitwiseCopyable.
2023-11-30 15:25:46 -08:00
Adrian Prantl
8626aeff03 [Debug Info] Store the source code for macro expansions in the debug info
This patch stores the source code of macro in the source field of DIFile, which
can be used together with the DW_LLVM_LNCT_source extension to emit the source
code into DWARF debug info.

rdar://110926109
2023-11-30 14:49:57 -08:00
Pavel Yaskevich
4db2cf7b71 Merge pull request #70076 from xedin/sendable-keypath-literals
[ConstraintSystem] Implement sendability inference for key path expressions
2023-11-30 09:48:32 -08:00
Adrian Prantl
d812a83fc7 Merge pull request #70098 from adrian-prantl/difile-cache
[IRGenDebugInfo] Cache DIFile pointers instead of file names (NFC)
2023-11-29 18:12:21 -08:00