Skip to content

Commit c0a9fef

Browse files
committed
Merge remote-tracking branch 'origin/master' into master-next
2 parents a8387da + caeb2a4 commit c0a9fef

File tree

78 files changed

+934
-619
lines changed

Some content is hidden

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

78 files changed

+934
-619
lines changed

CMakeLists.txt

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -603,7 +603,13 @@ if(SWIFT_HOST_VARIANT_SDK)
603603
set(SWIFT_HOST_VARIANT_SDK_default "${SWIFT_HOST_VARIANT_SDK}")
604604
else()
605605
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
606-
set(SWIFT_HOST_VARIANT_SDK_default "LINUX")
606+
# CMake on an Android host sets this to Linux, so check for the ANDROID_DATA
607+
# environment variable to see if we're building on Android.
608+
if(NOT "$ENV{ANDROID_DATA}" STREQUAL "")
609+
set(SWIFT_HOST_VARIANT_SDK_default "ANDROID")
610+
else()
611+
set(SWIFT_HOST_VARIANT_SDK_default "LINUX")
612+
endif()
607613
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD")
608614
set(SWIFT_HOST_VARIANT_SDK_default "FREEBSD")
609615
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "CYGWIN")
@@ -613,6 +619,7 @@ else()
613619
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Haiku")
614620
set(SWIFT_HOST_VARIANT_SDK_default "HAIKU")
615621
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Android")
622+
# CMAKE_SYSTEM_NAME might be set this way when cross-compiling to Android.
616623
set(SWIFT_HOST_VARIANT_SDK_default "ANDROID")
617624
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
618625
set(SWIFT_HOST_VARIANT_SDK_default "OSX")
@@ -677,7 +684,7 @@ endif()
677684

678685
# FIXME: the parameters we specify in SWIFT_SDKS are lacking architecture specifics,
679686
# so we need to hard-code it. For example, the SDK for Android is just 'ANDROID',
680-
# which we assume below to be armv7.
687+
# and we have to specify SWIFT_SDK_ANDROID_ARCHITECTURES separately.
681688
# The iOS SDKs all have their architectures hardcoded because they are just specified by name (e.g. 'IOS' or 'WATCHOS').
682689
# We can't cross-compile the standard library for another linux architecture,
683690
# because the SDK list would just be 'LINUX' and we couldn't disambiguate it from the host.
@@ -739,9 +746,16 @@ elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "HAIKU")
739746
elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "ANDROID")
740747

741748
set(SWIFT_HOST_VARIANT "android" CACHE STRING
742-
"Deployment OS for Swift host tools (the compiler) [android].")
749+
"Deployment OS for Swift host tools (the compiler) [android]")
743750

744-
configure_sdk_unix("Android" "${SWIFT_HOST_VARIANT_ARCH}")
751+
set(SWIFT_ANDROID_NATIVE_SYSROOT "/data/data/com.termux/files" CACHE STRING
752+
"Path to Android sysroot, default initialized to the Termux app's layout")
753+
754+
if("${SWIFT_SDK_ANDROID_ARCHITECTURES}" STREQUAL "")
755+
set(SWIFT_SDK_ANDROID_ARCHITECTURES ${SWIFT_HOST_VARIANT_ARCH})
756+
endif()
757+
758+
configure_sdk_unix("Android" "${SWIFT_SDK_ANDROID_ARCHITECTURES}")
745759
set(SWIFT_PRIMARY_VARIANT_SDK_default "${SWIFT_HOST_VARIANT_SDK}")
746760
set(SWIFT_PRIMARY_VARIANT_ARCH_default "${SWIFT_HOST_VARIANT_ARCH}")
747761

cmake/modules/AddSwift.cmake

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,8 @@ function(_add_variant_c_compile_link_flags)
140140
# lld can handle targeting the android build. However, if lld is not
141141
# enabled, then fallback to the linker included in the android NDK.
142142
if(NOT SWIFT_ENABLE_LLD_LINKER)
143-
list(APPEND result "-B" "${SWIFT_SDK_ANDROID_ARCH_${CFLAGS_ARCH}_NDK_PREBUILT_PATH}/${SWIFT_SDK_ANDROID_ARCH_${CFLAGS_ARCH}_NDK_TRIPLE}/bin")
143+
swift_android_tools_path(${CFLAGS_ARCH} tools_path)
144+
list(APPEND result "-B" "${tools_path}")
144145
endif()
145146
endif()
146147

@@ -482,22 +483,9 @@ function(_add_variant_link_flags)
482483
# We need to add the math library, which is linked implicitly by libc++
483484
list(APPEND result "-lm")
484485

485-
if("${LFLAGS_ARCH}" MATCHES armv7)
486-
set(android_libcxx_path "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a")
487-
elseif("${LFLAGS_ARCH}" MATCHES aarch64)
488-
set(android_libcxx_path "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/arm64-v8a")
489-
elseif("${LFLAGS_ARCH}" MATCHES i686)
490-
set(android_libcxx_path "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/x86")
491-
elseif("${LFLAGS_ARCH}" MATCHES x86_64)
492-
set(android_libcxx_path "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/x86_64")
493-
else()
494-
message(SEND_ERROR "unknown architecture (${LFLAGS_ARCH}) for android")
495-
endif()
496-
497486
# link against the custom C++ library
498-
list(APPEND link_libraries
499-
${android_libcxx_path}/libc++abi.a
500-
${android_libcxx_path}/libc++_shared.so)
487+
swift_android_cxx_libraries_for_arch(${LFLAGS_ARCH} cxx_link_libraries)
488+
list(APPEND link_libraries ${cxx_link_libraries})
501489

502490
# link against the ICU libraries
503491
list(APPEND link_libraries
@@ -1104,7 +1092,7 @@ function(_add_swift_library_single target name)
11041092
set_target_properties("${target}"
11051093
PROPERTIES
11061094
INSTALL_NAME_DIR "${install_name_dir}")
1107-
elseif("${SWIFTLIB_SINGLE_SDK}" STREQUAL "LINUX" AND NOT "${SWIFTLIB_SINGLE_SDK}" STREQUAL "ANDROID")
1095+
elseif("${SWIFTLIB_SINGLE_SDK}" STREQUAL "LINUX")
11081096
set_target_properties("${target}"
11091097
PROPERTIES
11101098
INSTALL_RPATH "$ORIGIN:/usr/lib/swift/linux")
@@ -1116,6 +1104,14 @@ function(_add_swift_library_single target name)
11161104
# CMake generates incorrect rule `$SONAME_FLAG $INSTALLNAME_DIR$SONAME` for Android build on macOS cross-compile host.
11171105
# Proper linker flags constructed manually. See below variable `swiftlib_link_flags_all`.
11181106
set_target_properties("${target}" PROPERTIES NO_SONAME TRUE)
1107+
# Only set the install RPATH if cross-compiling the host tools, in which
1108+
# case both the NDK and Sysroot paths must be set.
1109+
if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "" AND
1110+
NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "")
1111+
set_target_properties("${target}"
1112+
PROPERTIES
1113+
INSTALL_RPATH "$ORIGIN")
1114+
endif()
11191115
endif()
11201116

11211117
set_target_properties("${target}" PROPERTIES BUILD_WITH_INSTALL_RPATH YES)

cmake/modules/AddSwiftUnittests.cmake

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,14 @@ function(add_swift_unittest test_dirname)
4242
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
4343
set_property(TARGET "${test_dirname}" APPEND_STRING PROPERTY
4444
LINK_FLAGS " -Xlinker -rpath -Xlinker ${SWIFT_LIBRARY_OUTPUT_INTDIR}/swift/macosx")
45+
elseif("${SWIFT_HOST_VARIANT}" STREQUAL "android")
46+
swift_android_lib_for_arch(${SWIFT_HOST_VARIANT_ARCH} android_system_libs)
47+
set_property(TARGET "${test_dirname}" APPEND PROPERTY LINK_DIRECTORIES
48+
"${android_system_libs}")
49+
set_property(TARGET "${test_dirname}" APPEND PROPERTY LINK_LIBRARIES "log")
4550
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
46-
set_property(TARGET "${test_dirname}" APPEND_STRING PROPERTY
47-
LINK_FLAGS " -latomic")
51+
set_property(TARGET "${test_dirname}" APPEND PROPERTY LINK_LIBRARIES
52+
"atomic")
4853
endif()
4954

5055
find_program(LDLLD_PATH "ld.lld")
Lines changed: 84 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,32 @@
11
function(swift_android_libcxx_include_paths var)
2-
set(${var}
3-
"${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/include"
4-
"${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++abi/include"
5-
PARENT_SCOPE)
2+
if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
3+
set(${var}
4+
"${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/include"
5+
"${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++abi/include"
6+
PARENT_SCOPE)
7+
elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "")
8+
set(${var}
9+
"${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include/c++/v1"
10+
PARENT_SCOPE)
11+
else()
12+
message(SEND_ERROR "Couldn't set libc++ include paths for Android")
13+
endif()
614
endfunction()
715

816
function(swift_android_include_for_arch arch var)
917
set(paths)
10-
list(APPEND paths
11-
"${SWIFT_ANDROID_NDK_PATH}/sources/android/support/include"
12-
"${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include"
13-
"${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}")
18+
if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
19+
list(APPEND paths
20+
"${SWIFT_ANDROID_NDK_PATH}/sources/android/support/include"
21+
"${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include"
22+
"${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}")
23+
elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "")
24+
list(APPEND paths
25+
"${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include"
26+
"${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}")
27+
else()
28+
message(SEND_ERROR "Couldn't set ${arch} include paths for Android")
29+
endif()
1430
set(${var} ${paths} PARENT_SCOPE)
1531
endfunction()
1632

@@ -19,18 +35,68 @@ function(swift_android_lib_for_arch arch var)
1935
set(_host "${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}")
2036

2137
set(paths)
22-
if(arch STREQUAL armv7)
23-
list(APPEND paths "${_prebuilt}/${_host}/lib/armv7-a")
24-
elseif(arch STREQUAL aarch64)
25-
list(APPEND paths "${_prebuilt}/${_host}/lib64")
26-
elseif(arch STREQUAL i686)
27-
list(APPEND paths "${_prebuilt}/${_host}/lib")
28-
elseif(arch STREQUAL x86_64)
29-
list(APPEND paths "${_prebuilt}/${_host}/lib64")
38+
if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
39+
if(arch STREQUAL armv7)
40+
list(APPEND paths "${_prebuilt}/${_host}/lib/armv7-a")
41+
elseif(arch STREQUAL aarch64)
42+
list(APPEND paths "${_prebuilt}/${_host}/lib64")
43+
elseif(arch STREQUAL i686)
44+
list(APPEND paths "${_prebuilt}/${_host}/lib")
45+
elseif(arch STREQUAL x86_64)
46+
list(APPEND paths "${_prebuilt}/${_host}/lib64")
47+
else()
48+
message(SEND_ERROR "unknown architecture (${arch}) for android")
49+
endif()
50+
list(APPEND paths "${_prebuilt}/lib/gcc/${_host}/${SWIFT_ANDROID_NDK_GCC_VERSION}.x")
51+
elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "")
52+
list(APPEND paths "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/lib")
53+
if("${arch}" MATCHES armv7)
54+
list(APPEND paths "/system/lib")
55+
elseif("${arch}" MATCHES aarch64)
56+
list(APPEND paths "/system/lib64")
57+
else()
58+
message(SEND_ERROR "unknown architecture (${arch}) when compiling for Android host")
59+
endif()
3060
else()
31-
message(SEND_ERROR "unknown architecture (${arch}) for android")
61+
message(SEND_ERROR "Couldn't set ${arch} library paths for Android")
3262
endif()
33-
list(APPEND paths "${_prebuilt}/lib/gcc/${_host}/${SWIFT_ANDROID_NDK_GCC_VERSION}.x")
3463

3564
set(${var} ${paths} PARENT_SCOPE)
3665
endfunction()
66+
67+
function(swift_android_tools_path arch path_var_name)
68+
if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
69+
set(${path_var_name} "${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_PREBUILT_PATH}/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}/bin" PARENT_SCOPE)
70+
elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "")
71+
set(${path_var_name} "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/bin" PARENT_SCOPE)
72+
else()
73+
message(SEND_ERROR "Couldn't set ${arch} tools path for Android")
74+
endif()
75+
endfunction ()
76+
77+
function(swift_android_cxx_libraries_for_arch arch libraries_var_name)
78+
set(link_libraries)
79+
if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
80+
if("${arch}" MATCHES armv7)
81+
set(cxx_arch armeabi-v7a)
82+
elseif("${arch}" MATCHES aarch64)
83+
set(cxx_arch arm64-v8a)
84+
elseif("${arch}" MATCHES i686)
85+
set(cxx_arch x86)
86+
elseif("${arch}" MATCHES x86_64)
87+
set(cxx_arch x86_64)
88+
else()
89+
message(SEND_ERROR "unknown architecture (${arch}) when cross-compiling for Android")
90+
endif()
91+
92+
set(android_libcxx_path "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/${cxx_arch}")
93+
list(APPEND link_libraries ${android_libcxx_path}/libc++abi.a
94+
${android_libcxx_path}/libc++_shared.so)
95+
elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "")
96+
list(APPEND link_libraries "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/lib/libc++_shared.so")
97+
else()
98+
message(SEND_ERROR "Couldn't set ${arch} libc++ libraries needed for Android")
99+
endif()
100+
101+
set(${libraries_var_name} ${link_libraries} PARENT_SCOPE)
102+
endfunction()

cmake/modules/SwiftConfigureSDK.cmake

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,12 @@ function(_report_sdk prefix)
4747
message(STATUS " ${arch} LIB: ${${arch}_LIB}")
4848
endforeach()
4949
elseif("${prefix}" STREQUAL "ANDROID")
50-
message(STATUS " NDK: $ENV{SWIFT_ANDROID_NDK_PATH}")
50+
if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
51+
message(STATUS " NDK: $ENV{SWIFT_ANDROID_NDK_PATH}")
52+
endif()
53+
if(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "")
54+
message(STATUS " Sysroot: ${SWIFT_ANDROID_NATIVE_SYSROOT}")
55+
endif()
5156
foreach(arch ${SWIFT_SDK_${prefix}_ARCHITECTURES})
5257
swift_android_include_for_arch(${arch} ${arch}_INCLUDE)
5358
swift_android_lib_for_arch(${arch} ${arch}_LIB)
@@ -204,18 +209,37 @@ macro(configure_sdk_unix name architectures)
204209

205210
foreach(arch ${architectures})
206211
if("${prefix}" STREQUAL "ANDROID")
207-
set(SWIFT_SDK_ANDROID_ARCH_${arch}_LIBC_INCLUDE_DIRECTORY "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include" CACHE STRING "Path to C library headers")
208-
set(SWIFT_SDK_ANDROID_ARCH_${arch}_LIBC_ARCHITECTURE_INCLUDE_DIRECTORY "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include" CACHE STRING "Path to C library architecture headers")
212+
if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
213+
set(SWIFT_SDK_ANDROID_ARCH_${arch}_LIBC_INCLUDE_DIRECTORY "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include" CACHE STRING "Path to C library headers")
214+
set(SWIFT_SDK_ANDROID_ARCH_${arch}_LIBC_ARCHITECTURE_INCLUDE_DIRECTORY "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include" CACHE STRING "Path to C library architecture headers")
215+
elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "")
216+
set(SWIFT_SDK_ANDROID_ARCH_${arch}_LIBC_INCLUDE_DIRECTORY "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include" CACHE STRING "Path to C library headers")
217+
set(SWIFT_SDK_ANDROID_ARCH_${arch}_LIBC_ARCHITECTURE_INCLUDE_DIRECTORY "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include" CACHE STRING "Path to C library architecture headers")
218+
else()
219+
message(SEND_ERROR "Couldn't find LIBC_INCLUDE_DIRECTORY for Android")
220+
endif()
209221

210222
if("${arch}" STREQUAL "armv7")
211223
set(SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE "arm-linux-androideabi")
212224
set(SWIFT_SDK_ANDROID_ARCH_${arch}_ALT_SPELLING "arm")
213-
set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NDK_PATH}/platforms/android-${SWIFT_ANDROID_API_LEVEL}/arch-arm")
225+
if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
226+
set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NDK_PATH}/platforms/android-${SWIFT_ANDROID_API_LEVEL}/arch-arm")
227+
elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "")
228+
set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NATIVE_SYSROOT}")
229+
else()
230+
message(SEND_ERROR "Couldn't find SWIFT_SDK_ANDROID_ARCH_armv7_PATH")
231+
endif()
214232
set(SWIFT_SDK_ANDROID_ARCH_${arch}_TRIPLE "armv7-none-linux-androideabi")
215233
elseif("${arch}" STREQUAL "aarch64")
216234
set(SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE "aarch64-linux-android")
217235
set(SWIFT_SDK_ANDROID_ARCH_${arch}_ALT_SPELLING "aarch64")
218-
set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NDK_PATH}/platforms/android-${SWIFT_ANDROID_API_LEVEL}/arch-arm64")
236+
if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
237+
set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NDK_PATH}/platforms/android-${SWIFT_ANDROID_API_LEVEL}/arch-arm64")
238+
elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "")
239+
set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NATIVE_SYSROOT}")
240+
else()
241+
message(SEND_ERROR "Couldn't find SWIFT_SDK_ANDROID_ARCH_aarch64_PATH")
242+
endif()
219243
set(SWIFT_SDK_ANDROID_ARCH_${arch}_TRIPLE "aarch64-unknown-linux-android")
220244
elseif("${arch}" STREQUAL "i686")
221245
set(SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE "i686-linux-android")

include/swift/AST/DiagnosticsSema.def

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1133,6 +1133,10 @@ ERROR(c_function_pointer_from_generic_function,none,
11331133
"function", ())
11341134
ERROR(invalid_autoclosure_forwarding,none,
11351135
"add () to forward @autoclosure parameter", ())
1136+
ERROR(invalid_autoclosure_pointer_conversion,none,
1137+
"cannot perform pointer conversion of value of type %0 to autoclosure "
1138+
"result type %1",
1139+
(Type, Type))
11361140

11371141
//------------------------------------------------------------------------------
11381142
// MARK: Type Check Declarations

include/swift/Demangling/DemangleNodes.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ NODE(TypeMetadataCompletionFunction)
211211
NODE(TypeMetadataInstantiationCache)
212212
NODE(TypeMetadataInstantiationFunction)
213213
NODE(TypeMetadataSingletonInitializationCache)
214+
NODE(TypeMetadataDemanglingCache)
214215
NODE(TypeMetadataLazyCache)
215216
NODE(UncurriedFunctionType)
216217
NODE(UnknownIndex)

include/swift/IRGen/Linking.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,10 @@ class LinkEntity {
368368
/// The pointer is a canonical TypeBase*.
369369
TypeMetadataLazyCacheVariable,
370370

371+
/// A lazy cache variable for fetching type metadata from a mangled name.
372+
/// The pointer is a canonical TypeBase*.
373+
TypeMetadataDemanglingCacheVariable,
374+
371375
/// A reflection metadata descriptor for a builtin or imported type.
372376
ReflectionBuiltinDescriptor,
373377

@@ -705,6 +709,12 @@ class LinkEntity {
705709
return entity;
706710
}
707711

712+
static LinkEntity forTypeMetadataDemanglingCacheVariable(CanType type) {
713+
LinkEntity entity;
714+
entity.setForType(Kind::TypeMetadataDemanglingCacheVariable, type);
715+
return entity;
716+
}
717+
708718
static LinkEntity forClassMetadataBaseOffset(ClassDecl *decl) {
709719
LinkEntity entity;
710720
entity.setForDecl(Kind::ClassMetadataBaseOffset, decl);

include/swift/Runtime/RuntimeFunctions.def

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1190,7 +1190,7 @@ FUNCTION(IsOptionalType,
11901190
FUNCTION(Once, swift_once, C_CC, AlwaysAvailable,
11911191
RETURNS(VoidTy),
11921192
ARGS(OnceTy->getPointerTo(), Int8PtrTy, Int8PtrTy),
1193-
ATTRS())
1193+
ATTRS(NoUnwind))
11941194

11951195
// void swift_registerProtocols(const ProtocolRecord *begin,
11961196
// const ProtocolRecord *end)
@@ -1398,6 +1398,17 @@ FUNCTION(IntToFloat64, swift_intToFloat64, SwiftCC, AlwaysAvailable,
13981398
ARGS(SizeTy->getPointerTo(), SizeTy),
13991399
ATTRS(NoUnwind, ReadOnly))
14001400

1401+
// const Metadata *swift_getTypeByMangledNameInContext(
1402+
// const char *typeNameStart,
1403+
// size_t typeNameLength,
1404+
// const TargetContextDescriptor<InProcess> *context,
1405+
// const void * const *genericArgs)
1406+
FUNCTION(GetTypeByMangledNameInContext, swift_getTypeByMangledNameInContext,
1407+
SwiftCC, AlwaysAvailable,
1408+
RETURNS(TypeMetadataPtrTy),
1409+
ARGS(Int8PtrTy, SizeTy, TypeContextDescriptorPtrTy, Int8PtrPtrTy),
1410+
ATTRS(NoUnwind, ArgMemOnly))
1411+
14011412
#undef RETURNS
14021413
#undef ARGS
14031414
#undef ATTRS

0 commit comments

Comments
 (0)