Commit Graph

7080 Commits

Author SHA1 Message Date
Stefan Gränitz
6ae30edd2a Fix invalid substitution in IRGen/static-library.swift (#79607)
%swiftc_driver_plain is initialized from the plain swiftc path in config.swiftc, while %swiftc_driver gets extras like SDKROOT, stdlib-rpath and custom options. There is no plain pendant for the 'target-' prefixed version, but the regular one seems fine.
2025-02-25 11:10:44 -08:00
Alastair Houghton
4c0e141ccc Merge pull request #79390 from al45tair/eng/PR-144497613
[Backtracing] Add warning suppression option, enable it for tests.
2025-02-25 17:51:28 +00:00
nate-chandler
468371fe55 Merge pull request #79586 from nate-chandler/rdar145035291
Check file type better in this verifier.
2025-02-25 08:12:47 -08:00
Nate Chandler
d1f89ea260 Check file type better in this verifier.
Ask the decl directly whether its source file is a sil source file.
2025-02-24 12:50:00 -08:00
Alastair Houghton
0bc76dae80 [Backtracing] Add warning suppression option, enable it for tests.
The backtracing code will warn you if you attempt to forcibly enable
backtracing for a privileged executable.  This is apparently upsetting
the Driver/filelists.swift test.

Since we want to force it on for tests, so that we will definitely get
backtraces, add an option to suppress warning messages, and turn that
on for tests as well.

rdar://144497613
2025-02-24 12:55:16 +00:00
Konrad `ktoso` Malawski
09003d6f11 Revert "Merge pull request #77609 from ktoso/wip-task-names" (#79562)
This reverts commit 4ab5d2604f.
2025-02-23 22:59:21 -08:00
Rashmi Mudduluru
0b8efc9f26 [SUA][IRGen] Change IRGen to emit calls to swift_coroFrameAlloc (#79384)
When TMO is enabled, change IRGen to pass the newly introduced runtime function `swift_coroFrameAlloc` (and pass an additional argument — the hash value) instead of `malloc` when it inserts calls to `coro_id_retcon_once`.
The hashValue is computed based on the  current function name (computed in `getDiscriminatorForString`)

rdar://141235957
2025-02-21 14:45:23 -08:00
Konrad `ktoso` Malawski
4ab5d2604f Merge pull request #77609 from ktoso/wip-task-names
[Concurrency] Task names
2025-02-21 22:28:33 +09:00
Konrad `ktoso` Malawski
e8668684a1 Merge pull request #79411 from amartini51/typo_144059094
Remove double word ("a a" and "the the")
2025-02-20 13:05:06 +09:00
Alex Martini
633f101e0a Fix double 'the the' in various places 2025-02-14 17:27:51 -08:00
Dario Rexin
9a7c9da3be Merge pull request #79369 from drexin/wip-144719032
[IRGen] Apply correct type to conversion for direct values and erorrs…
2025-02-13 21:20:05 -08:00
Dario Rexin
401cd64a61 [IRGen] Apply correct type to conversion for direct values and erorrs with typed throws
rdar://144719032

When converting the combined result back to the actual types when directly returning typed errors, in case
the error or result value was a single value smaller then pointer size and the combined value was larger,
the value was converted to the combined type instead of the actual type, making it a no-op, which caused
undefined behavior when writing the value to the coerced alloca.
2025-02-13 12:53:12 -08:00
Erik Eckstein
af5ac6d283 Re-instate the allocVector builtin
Although it's not used anymore we still have to support it to be able to read old Swift.interface files which still contain the builtin.

rdar://144781646
2025-02-13 17:55:27 +01:00
Guillaume Lessard
c7af9a701b Merge pull request #79294 from Azoy/bye-bye-slab
[stdlib] Rename Slab to InlineArray
2025-02-12 12:03:25 -08:00
Erik Eckstein
e0b4f71af6 SIL: remove the alloc_vector instruction
It's not needed anymore, because the "FixedArray" experimental feature is replaced by inline-arrays.
2025-02-12 10:51:14 +01:00
Alejandro Alonso
e4fb1f6761 Rename Slab to InlineArray 2025-02-11 10:26:44 -08:00
Arnold Schwaighofer
9e218fc465 Merge pull request #79201 from aschwaighofer/pr143456806
IRGen: Replace retail_value_addr implementation by destroy_addr's
2025-02-10 16:56:42 -08:00
Arnold Schwaighofer
056e18ca66 Add and fix test case 2025-02-07 10:49:07 -08:00
Erik Eckstein
ba4081ee76 Optimizer: replace PredictableMemoryAccessOptimizations with MandatoryRedundantLoadElimination in the pass pipeline
PredictableMemoryAccessOptimizations has become unmaintainable as-is.
RedundantLoadElimination does (almost) the same thing as PredictableMemoryAccessOptimizations.
It's not as powerful but good enough because PredictableMemoryAccessOptimizations is actually only needed for promoting integer values for mandatory constant propagation.
And most importantly: RedundantLoadElimination does not insert additional copies which was a big problem in PredictableMemoryAccessOptimizations.

Fixes rdar://142814676
2025-02-07 11:30:35 +01:00
Arnold Schwaighofer
79784a8f81 IRGen: Replace retail_value_addr implementation by destroy_addr's
We can't always use an outlined function, destroy_addr's implementation
already handles cases where this is true (such as opened archetypes).

rdar://143456806
2025-02-06 14:11:36 -08:00
Joe Groff
44b431690d SILGen: Materialize addressor bases for the formal access scope of the entire access.
The return pointer may point into the materialized base value, so if the base needs
materialization, ensure that materialization covers any futher projection of the
value.
2025-01-31 18:08:53 -08:00
Stefan Gränitz
76243a25db [windows][toolchain] Build sanitizers and builtins standalone for all SDKs (#78861)
Unified builds of compiler-rt together with LLVM failed for the Android SDKs. It got too complicated to redirect the way LLVM would configure the nested build-trees. Standalone builds slightly increase build time, but they turned out much simpler and we end up with less duplication of definitions.
2025-01-28 22:08:07 +01:00
Dario Rexin
0587075839 Merge pull request #78890 from drexin/wip-143429827
[Runtime] Add compatibility override support for CVW runtime functions
2025-01-28 10:33:52 -08:00
Dario Rexin
e15bdc132c [Runtime] Rename CVW entry points for compatibility 2025-01-27 15:43:01 -08:00
eeckstein
95f1dfbf07 Merge pull request #78885 from eeckstein/fix-without-actually-escaping
Fix two problems with `withoutActuallyEscaping`
2025-01-27 07:59:02 +01:00
Allan Shortlidge
a6eb7e494b AST: Fix weak linking for potentially unavailable accessors in extensions.
In https://github.com/swiftlang/swift/pull/78454 queries for the platform
availability of decl were consolidated into
`Decl::getAvailableAttrForPlatformIntroduction()`. In addition to checking the
attributes directly attached to the decl, this method also checks whether the
decl is a member directly contained inside of an extension and checks for
attributes attached to the extension as well. Previously, this logic was only
used for availability checking diagnostics, where special casing extension
members was a requirement. As a result of the consolidation, though, the logic
is now also shared by the query that determines whether to weakly link symbols
associated with a decl. That determination already had its own way of handling
members of extensions but it seemed like consolidating the logic would stil be
a net improvement that would reduce overall complexity.

Unfortunately, the existing approach to getting the availability of the
enclosing extension had a subtle bug for both AccessorDecl and OpaqueTypeDecl.
If an AvailableAttr was not directly attached to the immediate decl, then
`Decl::getAvailableAttrForPlatformIntroduction()` would check if the enclosing
decl context was an extension and look at its attributes as well. For
AccessorDecl and OpaqueTypeDecl, checking the enclosing decl context would
accidentally skip over the VarDecl and AbstractFunctionDecl that are formally
the parents of those decls for the purposes of attribute inheritance. As a
result, the availability of the enclosing property or function could be ignored
if the enclosing extension had explicit availability attributes.

The fix is to use `AvailabilityInference::parentDeclForInferredAvailability()`
instead of `getDeclContext()` when looking for the immediately enclosing
extension.

Resolves rdar://143139472.
2025-01-24 17:43:42 -08:00
Erik Eckstein
3ec5d7de24 SIL: replace the is_escaping_closure instruction with destroy_not_escaped_closure
The problem with `is_escaping_closure` was that it didn't consume its operand and therefore reference count checks were unreliable.
For example, copy-propagation could break it.
As this instruction was always used together with an immediately following `destroy_value` of the closure, it makes sense to combine both into a `destroy_not_escaped_closure`.
It
1. checks the reference count and returns true if it is 1
2. consumes and destroys the operand
2025-01-24 19:23:27 +01:00
John McCall
a4853f8ec7 Fix test to use macOS 12.0 as the first OS to not require autolinking
instead of the notional 10.24, which the old logic in Platform.cpp
accidentally treated as a future release with no runtime restrictions.
2025-01-23 02:24:51 -05:00
John McCall
12bdfbf589 Fix a pair of IRGen bugs around materializing function type metadata
with sending results:

- The sending result mangling was added in the 6.0 runtime, so demangling
  cannot be used to produce this metadata when targeting an earlier
  runtime.

- The combination of a sending result with isolation requires the 6.1
  runtime to successfully demangle, due to a bug in the 6.0 demangler.
2025-01-23 02:24:51 -05:00
Dario Rexin
59e07f19c9 Merge pull request #78698 from drexin/wip-142918657
[IRGen] Add indirect typed error slot when async function has indirec…
2025-01-21 15:43:46 -08:00
Saleem Abdulrasool
370cbca889 IRGen: repair a small regression on Windows (#78689)
Correct the IRGen for the standard library. The thinko here assumed that the else case would be evaluated for the standard library build. We ended up incorrectly handling the well-known VWTs from the runtime when building the standard library.
2025-01-20 19:00:05 -08:00
Dario Rexin
30e7ba13b2 [IRGen] Add indirect typed error slot when async function has indirect result
rdar://142918657

Erorrs have to be passed indirectly whenever the result type is indirect.
2025-01-16 15:29:13 -08:00
Saleem Abdulrasool
ec70054c93 IRGen: further generalise runtime function generation
This adjusts the runtime function declaration handling to track the
owning module for the well known functions. This allows us to ensure
that we are able to properly identify if the symbol should be imported
or not when building the shared libraries. This will require a
subsequent tweak to allow for checking for static library linkage to
ensure that we do not mark the symbol as DLLImport when doing static
linking.
2025-01-15 13:54:34 -08:00
Robert Widmann
08940882c8 Restrict Weak-Re-Exports To @_exported Modules
This code got refactored and it accidentally widened the applicable structures for this check. The idea is that you have the following structure

// Module A
@_weakLinked import B

// Module B
@_exported import C

And the compiler conspires to make it so the modules B AND C wind up weak-linked from module A.

The broadened check accidentally allowed the following:

// Module A
@_weakLinked import B

// Module B
import C // Oops!

Which caused quite a few more modules than were intended to be weak-linked. Restore the `Exported` filter to cut back on the amount of weak re-exports the compiler processes.

Resolves rdar://142706779
2025-01-14 12:11:05 -07:00
Daniel Rodríguez Troitiño
13631900b3 [test] Fix tests that use Swift include directory in unified builds (#78586)
In LLVM unified builds, Swift normally lives in `tools/swift` and the
paths from the CMake build directory are not always the same as in
a standalone build.

Fix some tests using `%clang-include-dir` (which effectively points to
`$CMAKE_BUILD_ROOT/include`) to use the new `%swift-include-dir`, which
should point to the right `include/` directory in both unified and
standalone builds.

Additionally, change the calculation of `%clang-include-dir` to not be
relative to the `swift` binary, but to the CMake build root instead.
2025-01-13 08:10:25 -08:00
Alejandro Alonso
09d122af7c Merge pull request #76438 from Azoy/vector
[stdlib] Slab
2025-01-12 10:36:25 -08:00
Alejandro Alonso
7f5f2dccb6 Update array_type_layout.swift 2025-01-11 18:57:53 -08:00
Alejandro Alonso
f76d841540 Rename to Slab 2025-01-09 10:39:45 -08:00
Arnold Schwaighofer
4062c7e93d This test requires 64bit
rdar://142290872
2025-01-09 09:24:32 -08:00
finagolfin
f67b35c2f2 Merge pull request #77883 from finagolfin/droid
[android] Use emulated thread-local storage for API 28 and earlier
2025-01-09 15:04:17 +05:30
Alejandro Alonso
515c64fd55 Use current insertion block as other incoming phi for each array element 2025-01-08 10:37:17 -08:00
Dario Rexin
0aebbeada8 [IRGen] Fix SignatureExpansion::expandAsyncReturnType()
rdar://141962253

This fixes an issue that caused parameters to be dropped when a typed error in an async closure was too big to be returned directly.
2025-01-06 12:21:51 -08:00
Arnold Schwaighofer
5b89d2c834 IRGen: OutliningCollector's bindPolymorphicParameters needs to disambiguate between Formal and Representational metadata types
A recent change removed the usage of LocalTypeDataKind when populating the local
type metadata cache. This change reintroduces it.

rdar://141961121
2025-01-03 09:13:59 -08:00
Arnold Schwaighofer
97b154875d Merge pull request #78321 from aschwaighofer/propagate_large
LargeLoadable types: propagate large type property along projections
2025-01-02 07:32:28 -08:00
Finagolfin
c69a12ce39 [android] Use emulated thread-local storage for API 28 and earlier
Android before API 29 and a few other platforms don't support native TLS, so
fall back to LLVM's emulated TLS there, just like clang does. Also, make sure
`-Xcc -f{no-,}emulated-tls` flags passed in are applied to control what the
Swift compiler does.
2024-12-30 23:07:58 +05:30
Arnold Schwaighofer
e242d7887f Disable on wasm 2024-12-23 10:53:16 -08:00
Arnold Schwaighofer
be5223f0fa LargeLoadable types: propagate large type property along projections
Back propagate the isLargeType property along projections. This is
neccessary because c union types can "hide" largeness.

rdar://141775951
2024-12-20 09:09:42 -08:00
Becca Royal-Gordon
0f3cf62c55 Use @abi attribute in mangling
What’s implemented now is actually *far* more thorough than what the surface syntax can currently express, mainly because I can’t apply @abi to nominal types yet.
2024-12-19 15:49:34 -08:00
Dario Rexin
ca6057ab4a Merge pull request #78261 from drexin/wip-141575655
[IRGen] Indirectly pass typed errors for closures with indirect results
2024-12-18 10:27:17 -08:00
nate-chandler
c6e8590837 Merge pull request #78229 from omochi/fix-variadic-optional-crash
Fix a crash in type lowering verification when using variadic optional tuples
2024-12-17 16:33:27 -08:00