Egor Zhdan
51edb8f23a
Merge pull request #58537 from apple/egorzhdan/cxx-method-deserialization
...
[cxx-interop] Fix SIL deserialization error for C++ methods
2022-05-03 19:31:26 +01:00
Joe Groff
d2fad71328
Merge pull request #42589 from jckarter/begin-partial-apply-simplification-pass
...
[SIL] Initial work on PartialApplySimplification pass
2022-05-02 10:20:39 -07:00
Egor Zhdan
9ceebfd716
[cxx-interop] Fix SIL deserialization error for C++ methods
...
This fixes `Memory corruption or serialization format inconsistency` error when compiling with cross module optimization enabled.
2022-04-29 19:04:22 +01:00
Josh Soref
203b9ce33f
Spelling serialization ( #42515 )
...
* spelling: absolute
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: ambiguous
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: attempting
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: attrs
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: dependency
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: extract
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: function
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: interface
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: mandatory
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: nonexistent
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: particular
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: related
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: signature
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: specifies
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: that
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: the
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: without
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
Co-authored-by: Josh Soref <jsoref@users.noreply.github.com >
2022-04-25 12:58:35 -07:00
Josh Soref
81d3ad76ac
Spelling ast ( #42463 )
...
* spelling: accessor
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: accommodates
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: argument
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: associated
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: availability
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: available
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: belongs
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: bookkeeping
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: building
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: clazz
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: clonable
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: closure
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: concatenated
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: conformance
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: context
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: conversion
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: correspondence
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: declarations
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: declared
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: defining
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: delayed
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: dependency
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: deployed
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: descendants
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: diagnose
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: diagnostic
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: equitable
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: evaluation
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: exclusivity
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: existence
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: existential
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: explicit
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: expressed
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: for
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: foreign
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: function
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: identifier
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: implicit
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: indices
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: information
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: instance
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: interchangeable
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: interface
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: introduced
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: invalid
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: kind-in
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: least
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: library
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: location
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: namespace
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: necessary
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: nonexistent
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: not
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: number
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: obtains
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: occurs
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: opaque
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: overridden
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: parameter
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: precede
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: preceding
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: property
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: protocol
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: qualified
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: recognized
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: recursively
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: references
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: relaxing
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: represented
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: request
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: requirement
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: requirements
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: retrieve
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: returned
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: satisfied
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: satisfy
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: scanner
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: siblings
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: simplified
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: something
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: source
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: specializations
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: specially
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: statement
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: stripped
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: structure
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: substitution
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: the
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: transform
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: transformed
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: transitively
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: transparent
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: typecheck
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: unknown
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: unlabeled
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: unqualified
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: whether
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: with
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
* spelling: scanner
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com >
Co-authored-by: Josh Soref <jsoref@users.noreply.github.com >
2022-04-21 12:57:16 -07:00
Joe Groff
1e2bda9ea0
Extensions to SILBoxType to represent captures.
...
- Add a `[reflection]` bit to `alloc_box` instructions, to indicate that a box
should be allocated with reflection metadata attached.
- Add a `@captures_generics` attribute to SILLayouts, to indicate a type layout
that captures the generic arguments it's substituted with, meaning it can
recreate the generic environment without additional ABI-level arguments, like
a generic partial application can.
2022-04-21 12:51:46 -07:00
Konrad `ktoso` Malawski
dadf3011f9
cleanups
2022-04-18 16:53:44 -07:00
Konrad `ktoso` Malawski
79ad9278b2
[Distributed] Retain adhoc decodeNextArgument in distributed thunk
2022-04-18 16:53:10 -07:00
Luciano Almeida
1945129852
[Serialization] Update SWIFTMODULE_VERSION_MINOR version
2022-04-17 14:08:01 -03:00
Luciano Almeida
9a1008809c
[AST] Serialize bit async let info on AnyPattern
2022-04-17 14:06:39 -03:00
Slava Pestov
6982b90c6e
Serialization: Round-trip primary associated type list
2022-04-16 22:36:29 -04:00
Pavel Yaskevich
767f7b762e
Merge pull request #42167 from xedin/serialization-part-of-multi-opaque
...
[Serialization] Opaque types: serialize conditionally available under…
2022-04-06 16:38:16 -07:00
Alexis Laferrière
fb84412120
[Serialization] Always print the name associated to an XRefError
...
Printing the name will help in the case of xrefs for an extension member
and more. This will create errors messages like this in the case of a
module with an extension not being loaded:
```
x. *** DESERIALIZATION FAILURE ***
module 'SomeModule' with full misc version ...
module with extension is not loaded (MyExtensionModule)
Cross-reference to module 'TypesOriginalModule'
... TypeBeingExtended
```
rdar://91316948
2022-04-05 15:57:56 -07:00
Pavel Yaskevich
cd17bee644
[Serialization] Opaque types: serialize conditionally available underlying types
...
Resolves: rdar://90595158
2022-04-04 12:45:20 -07:00
Slava Pestov
8c47cd75fd
Sema: The primary associated type list references existing associated types instead of declaring new ones
2022-04-03 22:03:49 -04:00
Apollo Zhu
1f77f46e4f
Report cannot load submodule if only able to load top module
...
For loaders that don't support loading submodules, canImportModule should report false instead of checking if can import top module.
2022-04-01 13:10:17 -07:00
Slava Pestov
fab37712ad
Sema: Clean up named opaque result type generic signature construction
...
We were building the signature twice, and adding the 'where' clause twice
each time.
The GSB magically uniqued them, whereas the Requirement Machine is not
so forgiving.
2022-04-01 13:54:42 -04:00
Pavel Yaskevich
a5a50a3658
[AST] NFC: Rename underlying type accessors of OpaqueTypeDecl
...
Adds a `Unique` component to the accessor names to draw the
distinction between unique and conditionally available substitutions.
2022-03-28 16:22:08 -07:00
Erik Eckstein
6b7ae416e6
SIL: remove unused instructions thin_function_to_pointer and pointer_to_thin_function
2022-03-25 15:44:59 +01:00
Kavon Farvardin
13cbe0dd15
adding the @_compilerInitialized attribute
...
This attribute is designed for let-bound variables whose initializing
assignment is synthesized by the compiler. This assignment is
expected to happen at some point before DefiniteInitialization has
run, which is the pass that verifies whether the compiler truly
initialized the variable.
I generally expect that this will never be a user-facing feature, and
that the synthesized assignment happens in SILGen.
2022-03-24 16:18:49 -07:00
Alexis Laferrière
d858ac30f9
Merge pull request #41984 from xymus/export-as-xref
...
[Serialization] Ignore the exported module name for XRefs
2022-03-23 15:12:21 -07:00
Alexis Laferrière
93e8a359e3
[Serialization] Ignore the exported module name for XRefs
...
Write the real module name for XRefs in swiftmodule files instead of the
exported module name, from `export_as` declarations in module maps.
Swiftmodule files are internal details now, they should represent the
truth.
We keep using the exported module name for the extensions lookup table
as clients should still use the exported name. However we may need to
write both alternatives in the lookup table in the future if extensions
can't be found from clients not importing the exported as module.
rdar://90272035
2022-03-23 12:38:59 -07:00
Andrew Trick
1a6d7c1ba5
Merge pull request #41947 from atrick/opv-silgen
...
[nfc-5.7] Initial round of SILGen fixes and tests for opaque value
2022-03-23 12:01:26 -07:00
Andrew Trick
2fd4de411e
[SIL-opaque] Removed [Unconditional]CheckedCastValue
2022-03-22 17:04:13 -07:00
Evan Wilde
aa51bdf17a
Add noasync availability kind to available attr
...
This patch adds the `noasync` availability kind to `@available`. The
spelling is `@available(*, noasync)`.
2022-03-22 15:12:51 -07:00
Ben Barham
41f176b7bf
[Serialization] Abort if serializing CustomAttr with no type
...
Rather than crash when deserializing a CustomAttr with no type, crash
when serializing it instead (which is usually easier to diagnose).
2022-03-17 13:12:10 -07:00
Robert Widmann
512ebc52a6
Merge pull request #41743 from CodaFi/existential-dread
2022-03-09 15:12:29 -08:00
Erik Eckstein
6a020f8f15
Stabilize and simplify SIL linkage and serialization
...
The main point of this change is to make sure that a shared function always has a body: both, in the optimizer pipeline and in the swiftmodule file.
This is important because the compiler always needs to emit code for a shared function. Shared functions cannot be referenced from outside the module.
In several corner cases we missed to maintain this invariant which resulted in unresolved-symbol linker errors.
As side-effect of this change we can drop the shared_external SIL linkage and the IsSerializable flag, which simplifies the serialization and linkage concept.
2022-03-09 15:28:05 +01:00
Robert Widmann
e2f7d516e3
Register Parameterized Protocol Abbreviation
2022-03-08 22:00:38 -08:00
Robert Widmann
ab44a07045
Convert DeclContext Parameters to their Associated Generic Signatures Instead
2022-03-07 22:54:23 -08:00
Robert Widmann
d6186c9cfb
Add a DeclContext Parameter to Opened Archetype Construction
...
This ensures that opened archetypes always inherit any outer generic parameters from the context in which they reside. This matters because class bounds may bind generic parameters from these outer contexts, and without the outer context you can wind up with ill-formed generic environments like
<τ_0_0, where τ_0_0 : C<T>, τ_0_0 : P>
Where T is otherwise unbound because there is no entry for it among the generic parameters of the environment's associated generic signature.
2022-03-07 22:54:22 -08:00
Xi Ge
ce07ce2dbc
frontend: add basic support for @_spi_available
2022-03-04 21:26:56 -08:00
Alexis Laferrière
48e23a6261
Merge pull request #41647 from xymus/recover-from-anyobject-lookup
...
[Serialization] Recover from failures under AnyObjectLookup
2022-03-04 11:07:44 -05:00
John McCall
ec20619604
Merge pull request #41649 from rjmccall/centos-build-fix
...
Build fix for CentOS 7: somehow the default template argument isn't visible
2022-03-04 03:24:22 -05:00
Alexis Laferrière
4d75242ec6
[Serialization] Recover from failures under AnyObjectLookup
...
rdar://89494507
2022-03-03 13:54:30 -08:00
John McCall
1b1e1a91cb
Build fix for CentOS 7: somehow the default argument isn't visible.
...
I didn't mean to use the default argument anyway, so this is fine.
2022-03-03 14:06:49 -05:00
Slava Pestov
a013cd2076
AST: Replace PrimaryAssociatedTypeAttr with AssociatedTypeDecl::isPrimary() flag
2022-03-03 10:15:02 -05:00
John McCall
7830d937e0
Make room in the serialization decl block for more attributes.
2022-02-28 19:10:28 -05:00
John McCall
713bb43a94
Rework the serialization schema for conformances and requirements.
...
We now schedule conformance emissions in basically the same way
we do for types and declarations, which means that we'll emit them
uniquely in the module file instead of redundantly at every use.
This should produce substantially smaller module files overall,
especially for modules that heavily use generics. It also means
that we can remove all the unfortunate code to support using
different abbrev codes for them in different bitcode blocks.
Requirement lists are now emitted inline in the records that need
them instead of as trailing records. I think this will improve
space usage, but mostly it assists in eliminating the problem
where abbrev codes are shared between blocks.
2022-02-28 17:32:00 -05:00
Xi Ge
5473cec9a2
Merge pull request #41538 from nkcsgexi/89354768
...
Frontend: add a frontend flag to generate empty ABI descriptors to workaround deserialization issues
2022-02-24 09:19:45 -08:00
Pavel Yaskevich
8cfdb9999c
Merge pull request #41436 from xedin/allow-specialization-from-default-expr
...
[TypeChecker] Allow inference from default expressions in certain scenarios (under a flag)
2022-02-24 08:57:42 -08:00
Xi Ge
e1aaee4fec
Frontend: add a frontend flag to generate empty ABI descriptors to workaround deserialization issues
...
ABI descriptors should always be emitted as sidecars for library-evolution-enabled modules.
However, generating these files requires traversing the entire module (like indexing), which may
hit additional deserialization issues. To unblock builds, this patch introduces a flag to skip
the traversing logic so that we emit an empty ABI descriptor file. The empty file serves as
a placeholder so that build system doesn't need to know the details.
2022-02-23 23:18:20 -08:00
Alex Hoppen
57f05d6651
Merge pull request #41476 from ahoppen/pr/store-path-in-modulesearchpath
...
[Serialization] Store the path inside ModuleSearchPath as a string, not a StringRef
2022-02-22 16:57:33 +01:00
Pavel Yaskevich
6c8a05d714
[AST] Implement default expression type request and accessors
2022-02-21 09:59:53 -08:00
Pavel Yaskevich
3cab840e0c
[Serialization] Serialize type of default expression
...
This type is going to be use to infer generic parameters at the
call site.
2022-02-21 09:59:49 -08:00
Victoria Mitchell
cab1669e09
only recurse getDisplayDecls in SymbolGraphGen
2022-02-19 10:32:29 -07:00
Alex Hoppen
91e8c929f0
[Serialization] Make ModuleSearchPath a class with explicit getters
...
Improves debugging because you can set breakpoints on the getters and constructor.
2022-02-19 09:44:08 +01:00
Slava Pestov
7e5d6f4cb0
AST: Rework ParameterizedProtocolTypes to store multiple argument types
...
For now, this is NFC since we still assume one argument elsewhere.
2022-02-18 18:22:20 -05:00
Arnold Schwaighofer
62ec31a462
Merge pull request #41338 from aschwaighofer/reuse_contiguous_array_storage_metadata
...
Reuse `_ContiguousArrayStorage<AnyObject>` metadata for any class or objc generic type
2022-02-17 12:47:23 -05:00
Arnold Schwaighofer
9f2b6a4ebb
Reuse _ContiguousArrayStorage<AnyObject> metadata for any class or objc generic type
...
Reduces the number of _ContiguousArrayStorage metadata.
In order to support constant time bridging we do need to set the correct
metadata when we bridge to Objective-C. This is so that the type check
succeeds when bridging back from Objective-C to reuse the storage
instance rather than bridging the elements.
To support dynamically setting the `_ContiguousArrayStorage` element
type i needed to add support for optimizing `alloc_ref_dynamic`
throughout the optimizer.
Possible future improvements:
* Use different metadata such that we can disambiguate native Swift
classes during destruction -- allowing native release rather then unknown
release usage.
* Optimize the newly added semantic function
getContiguousArrayStorageType
rdar://86171143
2022-02-16 07:55:34 -08:00