Skip to content

Commit 3ff7148

Browse files
committed
Swift: remove std::result_of from swift headers
`std::result_of` was removed in C++20, though the actual removal from the STL library implementations seems to depend on the version. For example using xcode 14.2 one gets away with a deprecation warning, but xcode 14.3 will fail. As Swift 5.8.1 is still compiled with C++14, we cannot replace `std::result_of` with `std::invoke_result` in the prebuilding patches just yet, but we can do that for the extractor itself, patching the prebuilt package.
1 parent 5cb451b commit 3ff7148

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

swift/third_party/load.bzl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ def load_dependencies(workspace_name):
3939
),
4040
build_file = _build(workspace_name, "swift-llvm-support"),
4141
sha256 = sha256,
42+
patch_args = ["-p1"],
43+
patches = ["@%s//swift/third_party/swift-llvm-support:patches/remove-result-of.patch" % workspace_name],
4244
)
4345

4446
_github_archive(
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
`std::result_of` was removed in C++20, but is still used in the Swift headers. We can't
2+
remove it from there before prebuilding, as that is still done with C++14, but we can
3+
replace it with `std::invoke_result` for compiling the extractor.
4+
5+
diff --git a/include/swift/Basic/RelativePointer.h b/include/swift/Basic/RelativePointer.h
6+
index 73f91262afa..bdaa304c804 100644
7+
--- a/include/swift/Basic/RelativePointer.h
8+
+++ b/include/swift/Basic/RelativePointer.h
9+
@@ -551,7 +551,7 @@ public:
10+
}
11+
12+
template <typename... ArgTy>
13+
- typename std::result_of<T *(ArgTy...)>::type operator()(ArgTy... arg) const {
14+
+ typename std::invoke_result<T*, ArgTy...>::type operator()(ArgTy... arg) const {
15+
#if SWIFT_PTRAUTH
16+
void *ptr = this->super::getWithoutCast();
17+
return reinterpret_cast<T *>(ptrauth_sign_unauthenticated(
18+
diff --git a/include/swift/Basic/STLExtras.h b/include/swift/Basic/STLExtras.h
19+
index 7fa3d0c8890..6bc891a9b63 100644
20+
--- a/include/swift/Basic/STLExtras.h
21+
+++ b/include/swift/Basic/STLExtras.h
22+
@@ -405,7 +405,7 @@ class OptionalTransformIterator {
23+
typename std::iterator_traits<Iterator>::reference;
24+
25+
using ResultReference =
26+
- typename std::result_of<OptionalTransform(UnderlyingReference)>::type;
27+
+ typename std::invoke_result<OptionalTransform, UnderlyingReference>::type;
28+
29+
public:
30+
/// Used to indicate when the current iterator has already been

0 commit comments

Comments
 (0)