Skip to content

Commit 3ab158e

Browse files
committed
Merge branch 'master' into fix/substitution-map-composition
2 parents febbb70 + d2e1f09 commit 3ab158e

File tree

1,071 files changed

+35717
-19142
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,071 files changed

+35717
-19142
lines changed

Diff for: .gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
#==============================================================================#
2525
cscope.files
2626
cscope.out
27+
.vimrc
28+
tags
2729

2830
#==============================================================================#
2931
# Directories to ignore (do not add trailing '/'s, they skip symlinks).

Diff for: CHANGELOG.md

+34
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,39 @@ CHANGELOG
2626
Swift 5.2
2727
---------
2828

29+
* [SR-2790][]:
30+
31+
The compiler will now emit a warning when attempting to pass a temporary
32+
pointer argument produced from an array, string, or inout argument to a
33+
parameter which is known to escape it. This includes the various initializers
34+
for the `UnsafePointer`/`UnsafeBufferPointer` family of types, as well as
35+
memberwise initializers.
36+
37+
```swift
38+
struct S {
39+
var ptr: UnsafePointer<Int8>
40+
}
41+
42+
func foo() {
43+
var i: Int8 = 0
44+
let ptr = UnsafePointer(&i)
45+
// warning: initialization of 'UnsafePointer<Int8>' results in a
46+
// dangling pointer
47+
48+
let s1 = S(ptr: [1, 2, 3])
49+
// warning: passing '[Int8]' to parameter, but argument 'ptr' should be a
50+
// pointer that outlives the call to 'init(ptr:)'
51+
52+
let s2 = S(ptr: "hello")
53+
// warning: passing 'String' to parameter, but argument 'ptr' should be a
54+
// pointer that outlives the call to 'init(ptr:)'
55+
}
56+
```
57+
58+
All 3 of the above examples are unsound because each argument produces a
59+
temporary pointer only valid for the duration of the call they are passed to.
60+
Therefore the returned value in each case references a dangling pointer.
61+
2962
* [SR-2189][]:
3063

3164
The compiler now supports local functions whose default arguments capture
@@ -7824,6 +7857,7 @@ Swift 1.0
78247857
[SR-2608]: <https://bugs.swift.org/browse/SR-2608>
78257858
[SR-2672]: <https://bugs.swift.org/browse/SR-2672>
78267859
[SR-2688]: <https://bugs.swift.org/browse/SR-2688>
7860+
[SR-2790]: <https://bugs.swift.org/browse/SR-2790>
78277861
[SR-4206]: <https://bugs.swift.org/browse/SR-4206>
78287862
[SR-4248]: <https://bugs.swift.org/browse/SR-4248>
78297863
[SR-5581]: <https://bugs.swift.org/browse/SR-5581>

Diff for: CMakeLists.txt

+124-135
Original file line numberDiff line numberDiff line change
@@ -455,35 +455,21 @@ if(MSVC OR "${CMAKE_SIMULATE_ID}" STREQUAL MSVC)
455455
include(ClangClCompileRules)
456456
endif()
457457

458-
if(CMAKE_C_COMPILER_ID STREQUAL Clang)
458+
if(CMAKE_C_COMPILER_ID MATCHES Clang)
459459
add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Werror=gnu>)
460460
endif()
461461

462-
if(CMAKE_SYSTEM_NAME STREQUAL Darwin OR
463-
EXISTS "${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}")
464-
set(SWIFT_BUILD_SYNTAXPARSERLIB_default TRUE)
465-
set(SWIFT_BUILD_SOURCEKIT_default TRUE)
466-
else()
467-
set(SWIFT_BUILD_SYNTAXPARSERLIB_default FALSE)
468-
set(SWIFT_BUILD_SOURCEKIT_default FALSE)
469-
endif()
470-
option(SWIFT_BUILD_SYNTAXPARSERLIB
471-
"Build the Swift Syntax Parser library"
472-
${SWIFT_BUILD_SYNTAXPARSERLIB_default})
473-
option(SWIFT_BUILD_ONLY_SYNTAXPARSERLIB
474-
"Only build the Swift Syntax Parser library" FALSE)
475-
option(SWIFT_BUILD_SOURCEKIT
476-
"Build SourceKit"
477-
${SWIFT_BUILD_SOURCEKIT_default})
478-
option(SWIFT_ENABLE_SOURCEKIT_TESTS
479-
"Enable running SourceKit tests"
480-
${SWIFT_BUILD_SOURCEKIT_default})
481-
482-
if(NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin" AND
483-
(SWIFT_BUILD_SYNTAXPARSERLIB OR SWIFT_BUILD_SOURCEKIT))
484-
set(SWIFT_NEED_EXPLICIT_LIBDISPATCH TRUE)
485-
else()
486-
set(SWIFT_NEED_EXPLICIT_LIBDISPATCH FALSE)
462+
option(SWIFT_BUILD_SYNTAXPARSERLIB "Build the Swift Syntax Parser library" TRUE)
463+
option(SWIFT_BUILD_ONLY_SYNTAXPARSERLIB "Only build the Swift Syntax Parser library" FALSE)
464+
option(SWIFT_BUILD_SOURCEKIT "Build SourceKit" TRUE)
465+
option(SWIFT_ENABLE_SOURCEKIT_TESTS "Enable running SourceKit tests" ${SWIFT_BUILD_SOURCEKIT})
466+
467+
if(SWIFT_BUILD_SYNTAXPARSERLIB OR SWIFT_BUILD_SOURCEKIT)
468+
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
469+
if(NOT EXISTS "${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}")
470+
message(SEND_ERROR "SyntaxParserLib and SourceKit require libdispatch on non-Darwin hosts. Please specify SWIFT_PATH_TO_LIBDISPATCH_SOURCE")
471+
endif()
472+
endif()
487473
endif()
488474

489475
#
@@ -965,122 +951,124 @@ if (LLVM_ENABLE_DOXYGEN)
965951
message(STATUS "Doxygen: enabled")
966952
endif()
967953

968-
if(SWIFT_NEED_EXPLICIT_LIBDISPATCH)
969-
if(CMAKE_C_COMPILER_ID STREQUAL Clang AND
970-
CMAKE_C_COMPILER_VERSION VERSION_GREATER 3.8
971-
OR LLVM_USE_SANITIZER)
972-
set(SWIFT_LIBDISPATCH_C_COMPILER ${CMAKE_C_COMPILER})
973-
set(SWIFT_LIBDISPATCH_CXX_COMPILER ${CMAKE_CXX_COMPILER})
974-
elseif(${CMAKE_SYSTEM_NAME} STREQUAL ${CMAKE_HOST_SYSTEM_NAME})
975-
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
976-
set(SWIFT_LIBDISPATCH_C_COMPILER
977-
$<TARGET_FILE_DIR:clang>/clang-cl${CMAKE_EXECUTABLE_SUFFIX})
978-
set(SWIFT_LIBDISPATCH_CXX_COMPILER
979-
$<TARGET_FILE_DIR:clang>/clang-cl${CMAKE_EXECUTABLE_SUFFIX})
954+
if(SWIFT_BUILD_SYNTAXPARSERLIB OR SWIFT_BUILD_SOURCEKIT)
955+
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
956+
if(CMAKE_C_COMPILER_ID STREQUAL Clang AND
957+
CMAKE_C_COMPILER_VERSION VERSION_GREATER 3.8
958+
OR LLVM_USE_SANITIZER)
959+
set(SWIFT_LIBDISPATCH_C_COMPILER ${CMAKE_C_COMPILER})
960+
set(SWIFT_LIBDISPATCH_CXX_COMPILER ${CMAKE_CXX_COMPILER})
961+
elseif(${CMAKE_SYSTEM_NAME} STREQUAL ${CMAKE_HOST_SYSTEM_NAME})
962+
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
963+
set(SWIFT_LIBDISPATCH_C_COMPILER
964+
$<TARGET_FILE_DIR:clang>/clang-cl${CMAKE_EXECUTABLE_SUFFIX})
965+
set(SWIFT_LIBDISPATCH_CXX_COMPILER
966+
$<TARGET_FILE_DIR:clang>/clang-cl${CMAKE_EXECUTABLE_SUFFIX})
967+
else()
968+
set(SWIFT_LIBDISPATCH_C_COMPILER $<TARGET_FILE_DIR:clang>/clang)
969+
set(SWIFT_LIBDISPATCH_CXX_COMPILER $<TARGET_FILE_DIR:clang>/clang++)
970+
endif()
980971
else()
981-
set(SWIFT_LIBDISPATCH_C_COMPILER $<TARGET_FILE_DIR:clang>/clang)
982-
set(SWIFT_LIBDISPATCH_CXX_COMPILER $<TARGET_FILE_DIR:clang>/clang++)
972+
message(SEND_ERROR "libdispatch requires a newer clang compiler (${CMAKE_C_COMPILER_VERSION} < 3.9)")
983973
endif()
984-
else()
985-
message(SEND_ERROR "libdispatch requires a newer clang compiler (${CMAKE_C_COMPILER_VERSION} < 3.9)")
986-
endif()
987974

988-
if(SWIFT_HOST_VARIANT_SDK STREQUAL WINDOWS)
989-
set(SOURCEKIT_LIBDISPATCH_RUNTIME_DIR bin)
990-
else()
991-
set(SOURCEKIT_LIBDISPATCH_RUNTIME_DIR lib)
992-
endif()
975+
if(SWIFT_HOST_VARIANT_SDK STREQUAL WINDOWS)
976+
set(SOURCEKIT_LIBDISPATCH_RUNTIME_DIR bin)
977+
else()
978+
set(SOURCEKIT_LIBDISPATCH_RUNTIME_DIR lib)
979+
endif()
993980

994-
include(ExternalProject)
995-
ExternalProject_Add(libdispatch
996-
SOURCE_DIR
997-
"${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}"
998-
CMAKE_ARGS
999-
-DCMAKE_AR=${CMAKE_AR}
1000-
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
1001-
-DCMAKE_C_COMPILER=${SWIFT_LIBDISPATCH_C_COMPILER}
1002-
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
1003-
-DCMAKE_CXX_COMPILER=${SWIFT_LIBDISPATCH_CXX_COMPILER}
1004-
-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
1005-
-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
1006-
-DCMAKE_INSTALL_LIBDIR=lib
1007-
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
1008-
-DCMAKE_LINKER=${CMAKE_LINKER}
1009-
-DCMAKE_RANLIB=${CMAKE_RANLIB}
1010-
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
1011-
-DBUILD_SHARED_LIBS=YES
1012-
-DENABLE_SWIFT=NO
1013-
-DENABLE_TESTING=NO
1014-
INSTALL_COMMAND
1015-
# NOTE(compnerd) provide a custom install command to
1016-
# ensure that we strip out the DESTDIR environment
1017-
# from the sub-build
1018-
${CMAKE_COMMAND} -E env --unset=DESTDIR ${CMAKE_COMMAND} --build . --target install
1019-
STEP_TARGETS
1020-
install
1021-
BUILD_BYPRODUCTS
1022-
<INSTALL_DIR>/${SOURCEKIT_LIBDISPATCH_RUNTIME_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}dispatch${CMAKE_SHARED_LIBRARY_SUFFIX}
1023-
<INSTALL_DIR>/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}dispatch${CMAKE_IMPORT_LIBRARY_SUFFIX}
1024-
<INSTALL_DIR>/${SOURCEKIT_LIBDISPATCH_RUNTIME_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}BlocksRuntime${CMAKE_SHARED_LIBRARY_SUFFIX}
1025-
<INSTALL_DIR>/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}BlocksRuntime${CMAKE_IMPORT_LIBRARY_SUFFIX}
1026-
BUILD_ALWAYS
1027-
1)
1028-
1029-
ExternalProject_Get_Property(libdispatch install_dir)
1030-
1031-
# CMake does not like the addition of INTERFACE_INCLUDE_DIRECTORIES without
1032-
# the directory existing. Just create the location which will be populated
1033-
# during the installation.
1034-
file(MAKE_DIRECTORY ${install_dir}/include)
1035-
1036-
add_library(dispatch SHARED IMPORTED)
1037-
set_target_properties(dispatch
1038-
PROPERTIES
1039-
IMPORTED_LOCATION
1040-
${install_dir}/${SOURCEKIT_LIBDISPATCH_RUNTIME_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}dispatch${CMAKE_SHARED_LIBRARY_SUFFIX}
1041-
IMPORTED_IMPLIB
1042-
${install_dir}/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}dispatch${CMAKE_IMPORT_LIBRARY_SUFFIX}
1043-
INTERFACE_INCLUDE_DIRECTORIES
1044-
${install_dir}/include)
1045-
1046-
add_library(BlocksRuntime SHARED IMPORTED)
1047-
set_target_properties(BlocksRuntime
1048-
PROPERTIES
1049-
IMPORTED_LOCATION
1050-
${install_dir}/${SOURCEKIT_LIBDISPATCH_RUNTIME_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}BlocksRuntime${CMAKE_SHARED_LIBRARY_SUFFIX}
1051-
IMPORTED_IMPLIB
1052-
${install_dir}/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}BlocksRuntime${CMAKE_IMPORT_LIBRARY_SUFFIX}
1053-
INTERFACE_INCLUDE_DIRECTORIES
1054-
${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime)
1055-
1056-
add_dependencies(dispatch libdispatch-install)
1057-
add_dependencies(BlocksRuntime libdispatch-install)
1058-
1059-
if(SWIFT_HOST_VARIANT_SDK STREQUAL WINDOWS)
1060-
set(SOURCEKIT_RUNTIME_DIR bin)
1061-
else()
1062-
set(SOURCEKIT_RUNTIME_DIR lib)
1063-
endif()
1064-
add_dependencies(sourcekit-inproc BlocksRuntime dispatch)
1065-
swift_install_in_component(FILES
1066-
$<TARGET_FILE:dispatch>
1067-
$<TARGET_FILE:BlocksRuntime>
1068-
DESTINATION ${SOURCEKIT_RUNTIME_DIR}
1069-
COMPONENT sourcekit-inproc)
1070-
if(SWIFT_HOST_VARIANT_SDK STREQUAL WINDOWS)
981+
include(ExternalProject)
982+
ExternalProject_Add(libdispatch
983+
SOURCE_DIR
984+
"${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}"
985+
CMAKE_ARGS
986+
-DCMAKE_AR=${CMAKE_AR}
987+
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
988+
-DCMAKE_C_COMPILER=${SWIFT_LIBDISPATCH_C_COMPILER}
989+
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
990+
-DCMAKE_CXX_COMPILER=${SWIFT_LIBDISPATCH_CXX_COMPILER}
991+
-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
992+
-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
993+
-DCMAKE_INSTALL_LIBDIR=lib
994+
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
995+
-DCMAKE_LINKER=${CMAKE_LINKER}
996+
-DCMAKE_RANLIB=${CMAKE_RANLIB}
997+
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
998+
-DBUILD_SHARED_LIBS=YES
999+
-DENABLE_SWIFT=NO
1000+
-DENABLE_TESTING=NO
1001+
INSTALL_COMMAND
1002+
# NOTE(compnerd) provide a custom install command to
1003+
# ensure that we strip out the DESTDIR environment
1004+
# from the sub-build
1005+
${CMAKE_COMMAND} -E env --unset=DESTDIR ${CMAKE_COMMAND} --build . --target install
1006+
STEP_TARGETS
1007+
install
1008+
BUILD_BYPRODUCTS
1009+
<INSTALL_DIR>/${SOURCEKIT_LIBDISPATCH_RUNTIME_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}dispatch${CMAKE_SHARED_LIBRARY_SUFFIX}
1010+
<INSTALL_DIR>/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}dispatch${CMAKE_IMPORT_LIBRARY_SUFFIX}
1011+
<INSTALL_DIR>/${SOURCEKIT_LIBDISPATCH_RUNTIME_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}BlocksRuntime${CMAKE_SHARED_LIBRARY_SUFFIX}
1012+
<INSTALL_DIR>/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}BlocksRuntime${CMAKE_IMPORT_LIBRARY_SUFFIX}
1013+
BUILD_ALWAYS
1014+
1)
1015+
1016+
ExternalProject_Get_Property(libdispatch install_dir)
1017+
1018+
# CMake does not like the addition of INTERFACE_INCLUDE_DIRECTORIES without
1019+
# the directory existing. Just create the location which will be populated
1020+
# during the installation.
1021+
file(MAKE_DIRECTORY ${install_dir}/include)
1022+
1023+
add_library(dispatch SHARED IMPORTED)
1024+
set_target_properties(dispatch
1025+
PROPERTIES
1026+
IMPORTED_LOCATION
1027+
${install_dir}/${SOURCEKIT_LIBDISPATCH_RUNTIME_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}dispatch${CMAKE_SHARED_LIBRARY_SUFFIX}
1028+
IMPORTED_IMPLIB
1029+
${install_dir}/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}dispatch${CMAKE_IMPORT_LIBRARY_SUFFIX}
1030+
INTERFACE_INCLUDE_DIRECTORIES
1031+
${install_dir}/include)
1032+
1033+
add_library(BlocksRuntime SHARED IMPORTED)
1034+
set_target_properties(BlocksRuntime
1035+
PROPERTIES
1036+
IMPORTED_LOCATION
1037+
${install_dir}/${SOURCEKIT_LIBDISPATCH_RUNTIME_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}BlocksRuntime${CMAKE_SHARED_LIBRARY_SUFFIX}
1038+
IMPORTED_IMPLIB
1039+
${install_dir}/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}BlocksRuntime${CMAKE_IMPORT_LIBRARY_SUFFIX}
1040+
INTERFACE_INCLUDE_DIRECTORIES
1041+
${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime)
1042+
1043+
add_dependencies(dispatch libdispatch-install)
1044+
add_dependencies(BlocksRuntime libdispatch-install)
1045+
1046+
if(SWIFT_HOST_VARIANT_SDK STREQUAL WINDOWS)
1047+
set(SOURCEKIT_RUNTIME_DIR bin)
1048+
else()
1049+
set(SOURCEKIT_RUNTIME_DIR lib)
1050+
endif()
1051+
add_dependencies(sourcekit-inproc BlocksRuntime dispatch)
10711052
swift_install_in_component(FILES
1072-
$<TARGET_LINKER_FILE:dispatch>
1073-
$<TARGET_LINKER_FILE:BlocksRuntime>
1074-
DESTINATION lib
1053+
$<TARGET_FILE:dispatch>
1054+
$<TARGET_FILE:BlocksRuntime>
1055+
DESTINATION ${SOURCEKIT_RUNTIME_DIR}
10751056
COMPONENT sourcekit-inproc)
1076-
endif()
1057+
if(SWIFT_HOST_VARIANT_SDK STREQUAL WINDOWS)
1058+
swift_install_in_component(FILES
1059+
$<TARGET_LINKER_FILE:dispatch>
1060+
$<TARGET_LINKER_FILE:BlocksRuntime>
1061+
DESTINATION lib
1062+
COMPONENT sourcekit-inproc)
1063+
endif()
10771064

10781065

1079-
# FIXME(compnerd) this should be taken care of by the
1080-
# INTERFACE_INCLUDE_DIRECTORIES above
1081-
include_directories(AFTER
1082-
${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime
1083-
${SWIFT_PATH_TO_LIBDISPATCH_SOURCE})
1066+
# FIXME(compnerd) this should be taken care of by the
1067+
# INTERFACE_INCLUDE_DIRECTORIES above
1068+
include_directories(AFTER
1069+
${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime
1070+
${SWIFT_PATH_TO_LIBDISPATCH_SOURCE})
1071+
endif()
10841072
endif()
10851073

10861074
# Add all of the subdirectories, where we actually do work.
@@ -1107,7 +1095,6 @@ else()
11071095
# Some tools (e.g. swift-reflection-dump) rely on a host swiftReflection, so
11081096
# ensure we build that when building tools.
11091097
if(SWIFT_INCLUDE_TOOLS)
1110-
add_subdirectory(stdlib/public/Reflection)
11111098
add_subdirectory(stdlib/public/SwiftShims)
11121099
endif()
11131100
endif()
@@ -1129,6 +1116,8 @@ endif()
11291116

11301117
add_subdirectory(utils)
11311118

1119+
add_subdirectory(userdocs)
1120+
11321121
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
11331122
if(SWIFT_BUILD_PERF_TESTSUITE)
11341123
add_subdirectory(benchmark)

0 commit comments

Comments
 (0)