Skip to content

Commit ebec235

Browse files
Merge pull request #34477 from apple/tensorflow-merge
Merge 2020-10-28 into tensorflow
2 parents de1bca8 + 1e86c04 commit ebec235

File tree

1,349 files changed

+54358
-19123
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,349 files changed

+54358
-19123
lines changed

CHANGELOG.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,20 @@ CHANGELOG
2727
Swift Next
2828
----------
2929

30+
* [SR-10069][]:
31+
32+
Function overloading now works in local contexts, making the following valid:
33+
34+
```swift
35+
func outer(x: Int, y: String) {
36+
func doIt(_: Int) {}
37+
func doIt(_: String) {}
38+
39+
doIt(x) // calls the first 'doIt(_:)' with an Int value
40+
doIt(y) // calls the second 'doIt(_:)' with a String value
41+
}
42+
```
43+
3044
* [SE-0284][]:
3145

3246
Functions, subscripts, and initializers may now have more than one variadic parameter, as long as all parameters which follow variadic parameters are labeled. This makes declarations like the following valid:
@@ -8196,6 +8210,7 @@ Swift 1.0
81968210
[SR-8974]: <https://bugs.swift.org/browse/SR-8974>
81978211
[SR-9043]: <https://bugs.swift.org/browse/SR-9043>
81988212
[SR-9827]: <https://bugs.swift.org/browse/SR-9827>
8213+
[SR-10069]: <https://bugs.swift.org/browse/SR-10069>
81998214
[SR-11298]: <https://bugs.swift.org/browse/SR-11298>
82008215
[SR-11429]: <https://bugs.swift.org/browse/SR-11429>
82018216
[SR-11700]: <https://bugs.swift.org/browse/SR-11700>

CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ if(POLICY CMP0076)
1717
cmake_policy(SET CMP0076 NEW)
1818
endif()
1919

20+
# Don't clobber existing variable values when evaluating `option()` declarations.
21+
if(POLICY CMP0077)
22+
cmake_policy(SET CMP0077 NEW)
23+
endif()
24+
2025
# Add path for custom CMake modules.
2126
list(APPEND CMAKE_MODULE_PATH
2227
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")

apinotes/os.apinotes

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,5 +63,5 @@ Functions:
6363
SwiftPrivate: true
6464
NullabilityOfRet: O
6565
- Name: _os_signpost_emit_with_name_impl
66-
Availability: nonswift
67-
AvailabilityMsg: 'Use os_signpost'
66+
SwiftPrivate: true
67+
NullabilityOfRet: O

cmake/modules/AddSwift.cmake

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,16 @@ function(_add_host_variant_c_compile_flags target)
291291
target_compile_options(${target} PRIVATE -march=core2)
292292
endif()
293293
endif()
294+
295+
# The LLVM backend is built with these defines on most 32-bit platforms,
296+
# llvm/llvm-project@66395c9, which can cause incompatibilities with the Swift
297+
# frontend if not built the same way.
298+
if("${SWIFT_HOST_VARIANT_ARCH}" MATCHES "armv6|armv7|i686" AND
299+
NOT (SWIFT_HOST_VARIANT_SDK STREQUAL ANDROID AND SWIFT_ANDROID_API_LEVEL LESS 24))
300+
target_compile_definitions(${target} PRIVATE
301+
_LARGEFILE_SOURCE
302+
_FILE_OFFSET_BITS=64)
303+
endif()
294304
endfunction()
295305

296306
function(_add_host_variant_link_flags target)
@@ -461,7 +471,7 @@ function(add_swift_host_library name)
461471
INSTALL_NAME_DIR "@rpath")
462472
elseif(SWIFT_HOST_VARIANT_SDK STREQUAL LINUX)
463473
set_target_properties(${name} PROPERTIES
464-
INSTALL_RPATH "$ORIGIN:/usr/lib/swift/linux")
474+
INSTALL_RPATH "$ORIGIN")
465475
elseif(SWIFT_HOST_VARIANT_SDK STREQUAL CYGWIN)
466476
set_target_properties(${name} PROPERTIES
467477
INSTALL_RPATH "$ORIGIN:/usr/lib/swift/cygwin")
@@ -630,3 +640,9 @@ macro(add_swift_tool_symlink name dest component)
630640
add_llvm_tool_symlink(${name} ${dest} ALWAYS_GENERATE)
631641
llvm_install_symlink(${name} ${dest} ALWAYS_GENERATE COMPONENT ${component})
632642
endmacro()
643+
644+
# Declare that files in this library are built with LLVM's support
645+
# libraries available.
646+
macro(set_swift_llvm_is_available)
647+
add_compile_options(-DSWIFT_LLVM_SUPPORT_IS_AVAILABLE)
648+
endmacro()

cmake/modules/AddSwiftUnittests.cmake

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,13 @@ function(add_swift_unittest test_dirname)
4040
endif()
4141

4242
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
43+
# Add an @rpath to the swift library directory.
4344
set_target_properties(${test_dirname} PROPERTIES
4445
BUILD_RPATH ${SWIFT_LIBRARY_OUTPUT_INTDIR}/swift/macosx)
46+
# Force all the swift libraries to be found via rpath.
47+
add_custom_command(TARGET "${test_dirname}" POST_BUILD
48+
COMMAND "${SWIFT_SOURCE_DIR}/utils/swift-rpathize.py"
49+
"$<TARGET_FILE:${test_dirname}>")
4550
elseif("${SWIFT_HOST_VARIANT}" STREQUAL "android")
4651
swift_android_lib_for_arch(${SWIFT_HOST_VARIANT_ARCH} android_system_libs)
4752
set_property(TARGET "${test_dirname}" APPEND PROPERTY LINK_DIRECTORIES

cmake/modules/StandaloneOverlay.cmake

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,17 @@ set(SWIFT_NATIVE_CLANG_TOOLS_PATH "${TOOLCHAIN_DIR}/usr/bin" CACHE STRING
5858
set(SWIFT_NATIVE_SWIFT_TOOLS_PATH "${TOOLCHAIN_DIR}/usr/bin" CACHE STRING
5959
"Path to Swift tools that are executable on the build machine.")
6060

61+
# NOTE: The initialization in stdlib/CMakeLists.txt will be bypassed if we
62+
# directly invoke CMake for this directory, so we initialize the variables
63+
# related to library evolution here as well.
64+
65+
option(SWIFT_STDLIB_STABLE_ABI
66+
"Should stdlib be built with stable ABI (library evolution, resilience)."
67+
TRUE)
68+
6169
option(SWIFT_ENABLE_MODULE_INTERFACES
6270
"Generate .swiftinterface files alongside .swiftmodule files."
63-
TRUE)
71+
"${SWIFT_STDLIB_STABLE_ABI}")
6472

6573
set(SWIFT_STDLIB_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING
6674
"Build type for the Swift standard library and SDK overlays.")

docs/ABI/Mangling.rst

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -523,15 +523,20 @@ Types
523523
FUNCTION-KIND ::= 'U' // uncurried function type (currently not used)
524524
FUNCTION-KIND ::= 'K' // @auto_closure function type (noescape)
525525
FUNCTION-KIND ::= 'B' // objc block function type
526-
FUNCTION-KIND ::= 'L' // objc block function type (escaping) (DWARF only; otherwise use 'B')
526+
FUNCTION-KIND ::= 'zB' C-TYPE // objc block type with non-canonical C type
527+
FUNCTION-KIND ::= 'L' // objc block function type with canonical C type (escaping) (DWARF only; otherwise use 'B' or 'zB' C-TYPE)
527528
FUNCTION-KIND ::= 'C' // C function pointer type
529+
FUNCTION-KIND ::= 'zC' C-TYPE // C function pointer type with with non-canonical C type
528530
FUNCTION-KIND ::= 'A' // @auto_closure function type (escaping)
529531
FUNCTION-KIND ::= 'E' // function type (noescape)
530532
FUNCTION-KIND ::= 'F' // @differentiable function type
531533
FUNCTION-KIND ::= 'G' // @differentiable function type (escaping)
532534
FUNCTION-KIND ::= 'H' // @differentiable(linear) function type
533535
FUNCTION-KIND ::= 'I' // @differentiable(linear) function type (escaping)
534536

537+
C-TYPE is mangled according to the Itanium ABI, and prefixed with the length.
538+
Non-ASCII identifiers are preserved as-is; we do not use Punycode.
539+
535540
function-signature ::= params-type params-type async? throws? // results and parameters
536541

537542
params-type ::= type 'z'? 'h'? // tuple in case of multiple parameters or a single parameter with a single tuple type
@@ -600,7 +605,7 @@ mangled in to disambiguate.
600605
impl-function-type ::= type* 'I' FUNC-ATTRIBUTES '_'
601606
impl-function-type ::= type* generic-signature 'I' FUNC-ATTRIBUTES '_'
602607

603-
FUNC-ATTRIBUTES ::= PATTERN-SUBS? INVOCATION-SUBS? PSEUDO-GENERIC? CALLEE-ESCAPE? DIFFERENTIABILITY-KIND? CALLEE-CONVENTION FUNC-REPRESENTATION? COROUTINE-KIND? (PARAM-CONVENTION PARAM-DIFFERENTIABILITY?)* RESULT-CONVENTION* ('Y' PARAM-CONVENTION)* ('z' RESULT-CONVENTION RESULT-DIFFERENTIABILITY?)?
608+
FUNC-ATTRIBUTES ::= PATTERN-SUBS? INVOCATION-SUBS? PSEUDO-GENERIC? CALLEE-ESCAPE? DIFFERENTIABILITY-KIND? CALLEE-CONVENTION FUNC-REPRESENTATION? COROUTINE-KIND? ASYNC? (PARAM-CONVENTION PARAM-DIFFERENTIABILITY?)* RESULT-CONVENTION* ('Y' PARAM-CONVENTION)* ('z' RESULT-CONVENTION RESULT-DIFFERENTIABILITY?)?
604609

605610
PATTERN-SUBS ::= 's' // has pattern substitutions
606611
INVOCATION-SUB ::= 'I' // has invocation substitutions
@@ -618,7 +623,9 @@ mangled in to disambiguate.
618623
CALLEE-CONVENTION ::= 't' // thin
619624

620625
FUNC-REPRESENTATION ::= 'B' // C block invocation function
626+
FUNC-REPRESENTATION ::= 'zB' C-TYPE // C block invocation function with non-canonical C type
621627
FUNC-REPRESENTATION ::= 'C' // C global function
628+
FUNC-REPRESENTATION ::= 'zC' C-TYPE // C global function with non-canonical C type
622629
FUNC-REPRESENTATION ::= 'M' // Swift method
623630
FUNC-REPRESENTATION ::= 'J' // ObjC method
624631
FUNC-REPRESENTATION ::= 'K' // closure
@@ -627,6 +634,8 @@ mangled in to disambiguate.
627634
COROUTINE-KIND ::= 'A' // yield-once coroutine
628635
COROUTINE-KIND ::= 'G' // yield-many coroutine
629636

637+
ASYNC ::= 'H' // @async
638+
630639
PARAM-CONVENTION ::= 'i' // indirect in
631640
PARAM-CONVENTION ::= 'c' // indirect in constant
632641
PARAM-CONVENTION ::= 'l' // indirect inout
@@ -993,6 +1002,7 @@ Function Specializations
9931002
::
9941003

9951004
specialization ::= type '_' type* 'Tg' SPEC-INFO // Generic re-abstracted specialization
1005+
specialization ::= type '_' type* 'Ts' SPEC-INFO // Generic re-abstracted prespecialization
9961006
specialization ::= type '_' type* 'TG' SPEC-INFO // Generic not re-abstracted specialization
9971007
specialization ::= type '_' type* 'Ti' SPEC-INFO // Inlined function with generic substitutions.
9981008

docs/CompilerPerformance.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -815,8 +815,8 @@ are helpful in such cases:
815815
816816
- `llvm-bcanalyzer` can print (in rough form) the contents of LLVM bitcode
817817
streams, such as Swift module files and the PCH/PCM files clang stores its
818-
serialized ASTs in. The latter requires combing `llvm-objdump` and
819-
`llvm-bcanalyzer` in the following fashion: `llvm-objdump -raw-clang-ast
818+
serialized ASTs in. The latter requires combining `llvm-objdump` and
819+
`llvm-bcanalyzer` in the following fashion: `llvm-objdump --raw-clang-ast
820820
file.pcm | llvm-bcanalyzer -dump`
821821
822822
- `llvm-dwarfdump` and `llvm-dis` can be used to print textual representations

docs/CppInteroperabilityManifesto.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ provide the following guarantees:
307307

308308
- `inout` are backed by initialized memory on function entry and function exit
309309
(an implication of the copy-in/copy-out semantics). Destroying the object in
310-
`inout` requires using unsafe construts. Therefore, in safe Swift `inout`
310+
`inout` requires using unsafe constructs. Therefore, in safe Swift `inout`
311311
parameters are backed by initialized memory throughout function execution.
312312

313313
- `inout` parameters don't alias each other or any other values that program is
@@ -1033,7 +1033,7 @@ in all Swift code, but it is feasible for local variables of concrete types.
10331033
An example where it is not possible to maintain precise destruction semantics
10341034
for C++ classes is in a generic Swift function that is called with a C++ class
10351035
as a type parameter. In this case, we must be able to compile one definition of
1036-
a Swift function, which must work regradless of the nature of the type (be it a
1036+
a Swift function, which must work regardless of the nature of the type (be it a
10371037
Swift type or a C++ class). This limitation does not seem too bad, because RAII
10381038
types are not often passed as type parameters to templates in C++, which creates
10391039
a reason to believe it will not be common in Swift either.
@@ -3197,7 +3197,7 @@ UTF-8 data.
31973197
class Employee {
31983198
public:
31993199
std::string DebugDescription() const;
3200-
[[swift::import_as_std_string]] std::string SeriaziledAsProtobuf() const;
3200+
[[swift::import_as_std_string]] std::string SerializedAsProtobuf() const;
32013201
};
32023202
```
32033203

docs/DebuggingTheCompiler.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ benefit of all Swift developers.
3030
- [Debugging the Compiler using advanced LLDB Breakpoints](#debugging-the-compiler-using-advanced-lldb-breakpoints)
3131
- [Debugging the Compiler using LLDB Scripts](#debugging-the-compiler-using-lldb-scripts)
3232
- [Custom LLDB Commands](#custom-lldb-commands)
33+
- [Debugging at LLVM Level](#debugging-at-llvm-level)
34+
- [Options for Dumping LLVM IR](#options-for-dumping-llvm-ir)
3335
- [Bisecting Compiler Errors](#bisecting-compiler-errors)
3436
- [Bisecting on SIL optimizer pass counts to identify optimizer bugs](#bisecting-on-sil-optimizer-pass-counts-to-identify-optimizer-bugs)
3537
- [Using git-bisect in the presence of branch forwarding/feature branches](#using-git-bisect-in-the-presence-of-branch-forwardingfeature-branches)
@@ -537,6 +539,20 @@ to define custom commands using just other lldb commands. For example,
537539

538540
(lldb) command alias cs sequence p/x $rax; stepi
539541

542+
## Debugging at LLVM Level
543+
544+
### Options for Dumping LLVM IR
545+
546+
Similar to SIL, one can configure LLVM to dump the llvm-ir at various points in
547+
the pipeline. Here is a quick summary of the various options:
548+
549+
* ``-Xllvm -print-before=$PASS_ID``: Print the LLVM IR before a specified LLVM pass runs.
550+
* ``-Xllvm -print-before-all``: Print the LLVM IR before each pass runs.
551+
* ``-Xllvm -print-after-all``: Print the LLVM IR after each pass runs.
552+
* ``-Xllvm -filter-print-funcs=$FUNC_NAME_1,$FUNC_NAME_2,...,$FUNC_NAME_N``:
553+
When printing IR for functions for print-[before|after]-all options, Only
554+
print the IR for functions whose name is in this comma separated list.
555+
540556
## Bisecting Compiler Errors
541557

542558
### Bisecting on SIL optimizer pass counts to identify optimizer bugs

docs/DevelopmentTips.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,11 @@ Compilation times for the compiler and the standard library can be agonizing, es
3333
```
3434
$ brew install sccache
3535
$ sccache --start-server
36-
$ ./swift/utils/build-script MY_ARGS --cmake-c-launcher $(which sccache) --cmake-cxx-launcher $(which sccache)
36+
$ ./swift/utils/build-script MY_ARGS --sccache
3737
```
3838

39+
If you want to always use sccache, you can `export SWIFT_USE_SCCACHE=1` and the build script will pick it up.
40+
3941
Given the size of artifacts generated, you might also want to bump the cache size from the default 10GB to something larger, say by putting `export SCCACHE_CACHE_SIZE="50G"` in your dotfile(s).
4042

4143
You can run some compiles to see if it is actually doing something by running `sccache --show-stats`. Depending on the exact compilation task you're running, you might see very different cache hit rates. For example, `sccache` is particularly effective if you're rebuilding LLVM, which doesn't change so frequently from the Swift compiler's perspective. On the other hand, if you're changing the compiler's AST, the cache hit rate is likely to be much lower.

docs/Diagnostics.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ Educational notes should:
100100
- Explain a single language concept. This makes them easy to reuse across related diagnostics and helps keep them clear, concise, and easy to understand.
101101
- Be written in unabbreviated English. These are longer-form messages compared to the main diagnostic, so there's no need to omit needless words and punctuation.
102102
- Not generally exceed 3-4 paragraphs. Educational notes should be clear and easily digestible. Messages which are too long also have the potential to create UX issues on the command line.
103-
- Be accessible. Educational notes should be beginner friendly and avoid assuming unnecesary prior knowledge. The goal is not only to help users understand what a diagnostic is telling them, but also to turn errors and warnings into "teachable moments".
103+
- Be accessible. Educational notes should be beginner friendly and avoid assuming unnecessary prior knowledge. The goal is not only to help users understand what a diagnostic is telling them, but also to turn errors and warnings into "teachable moments".
104104
- Include references to relevant chapters of _The Swift Programming Language_.
105105
- Be written in Markdown, but avoid excessive markup which negatively impacts the terminal UX.
106106

docs/DifferentiableProgramming.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2542,7 +2542,7 @@ As defined above, the `@differentiable` function type attributes requires all
25422542
non-`@noDerivative` arguments and results to conform to the `@differentiable`
25432543
attribute. However, there is one exception: when the type of an argument or
25442544
result is a function type, e.g. `@differentiable (T) -> @differentiable (U) ->
2545-
V`. This is because we need to differentiate higher-order funtions.
2545+
V`. This is because we need to differentiate higher-order functions.
25462546

25472547
Mathematically, the differentiability of `@differentiable (T, U) -> V` is
25482548
similar to that of `@differentiable (T) -> @differentiable (U) -> V` in that

docs/Driver.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ in becoming more like non-whole-module builds.
205205

206206
## Incremental Builds ##
207207

208-
Incremental builds in Swift work by primarily by cross-file dependency
208+
Incremental builds in Swift work primarily by cross-file dependency
209209
analysis, described in [DependencyAnalysis.md](DependencyAnalysis.md).
210210
Compiling a single file might be necessary because that file has changed, but
211211
it could also be because that file depends on something else that might have

docs/ExternalResources.md

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -135,11 +135,24 @@ https://medium.com/kinandcartacreated/contributing-to-swift-part-2-efebcf7b6c93
135135

136136
## Code generation, runtime and ABI
137137

138-
- The Swift Runtime ([Part 1: Heap Objects][], [Part 2: Type Layout][])
139-
by Jordan Rose (blog post series, Aug-Sep 2020): This blog post series
140-
describes the runtime layout for classes, closures and structs, as well
141-
as basic runtime functionality such as retain/release that needs to be
142-
handled when porting Swift to a new platform, such as [Mac OS 9][].
138+
- [The Swift Runtime][] by Jordan Rose (blog post series, Aug-Oct 2020):
139+
This blog post series describes the runtime layout for different structures,
140+
runtime handling for metadata, as well as basic runtime functionality such
141+
as retain/release that needs to be handled when porting Swift to a new
142+
platform, such as [Mac OS 9][].
143+
- [Part 1: Heap Objects][]
144+
- [Part 2: Type Layout][]
145+
- [Part 3: Type Metadata][]
146+
- [Part 4: Uniquing Caches][]
147+
- [Part 5: Class Metadata][]
148+
- [Part 6: Class Metadata Initialization][]
149+
- [Part 7: Enums][]
150+
- [Implementing the Swift Runtime in Swift][]
151+
by JP Simard and Jesse Squires with Jordan Rose (podcast episode, Oct 2020):
152+
This episode describes Jordan's effort to port Swift to Mac OS 9.
153+
It touches on a wide variety of topics, such as ObjC interop, memory layout
154+
guarantees, performance, library evolution, writing low-level code in Swift,
155+
the workflow of porting Swift to a new platform and the design of Swift.
143156
- [How Swift Achieved Dynamic Linking Where Rust Couldn't][] by Alexis
144157
Beingessner (blog post, Nov 2019): This blog post describes Swift's approach
145158
for compiling polymorphic functions, contrasting it with the strategy used by
@@ -174,9 +187,16 @@ https://medium.com/kinandcartacreated/contributing-to-swift-part-2-efebcf7b6c93
174187
value witness tables, type metadata, abstraction patterns, reabstraction,
175188
reabstraction thunks and protocol witness tables.
176189

190+
[Mac OS 9]: https://belkadan.com/blog/2020/04/Swift-on-Mac-OS-9/
191+
[The Swift Runtime]: https://belkadan.com/blog/tags/swift-runtime/
177192
[Part 1: Heap Objects]: https://belkadan.com/blog/2020/08/Swift-Runtime-Heap-Objects/
178193
[Part 2: Type Layout]: https://belkadan.com/blog/2020/09/Swift-Runtime-Type-Layout/
179-
[Mac OS 9]: https://belkadan.com/blog/2020/04/Swift-on-Mac-OS-9/
194+
[Part 3: Type Metadata]: https://belkadan.com/blog/2020/09/Swift-Runtime-Type-Metadata/
195+
[Part 4: Uniquing Caches]: https://belkadan.com/blog/2020/09/Swift-Runtime-Uniquing-Caches/
196+
[Part 5: Class Metadata]: https://belkadan.com/blog/2020/09/Swift-Runtime-Class-Metadata/
197+
[Part 6: Class Metadata Initialization]: https://belkadan.com/blog/2020/10/Swift-Runtime-Class-Metadata-Initialization/
198+
[Part 7: Enums]: https://belkadan.com/blog/2020/10/Swift-Runtime-Enums/
199+
[Implementing the Swift Runtime in Swift]: https://spec.fm/podcasts/swift-unwrapped/1DMLbJg5
180200
[How Swift Achieved Dynamic Linking Where Rust Couldn't]: https://gankra.github.io/blah/swift-abi/
181201
[arm64e: An ABI for Pointer Authentication]: https://youtu.be/C1nZvpEBfYA
182202
[Exploiting The Swift ABI]: https://youtu.be/0rHG_Pa86oA

docs/HowToGuides/FAQ.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ built compiler to compile both packages and Xcode projects.
4242
Create a build setting `SWIFT_EXEC` with the value set to `/path/to/swiftc`.
4343
If you now do a clean build, your locally built compiler will be used.
4444

45-
At the time of writing, in the latest Xcode 12 beta, `SWIFT_EXEC` does not
45+
At the time of writing, in the latest Xcode 12.2 beta 3, `SWIFT_EXEC` does not
4646
work for SwiftPM integration inside Xcode, so this will not work for Xcode
4747
projects that depend on SwiftPM packages.
4848

0 commit comments

Comments
 (0)