Swift: Honor COMPILE_WARNING_AS_ERROR for command-line build systems

Define missing CMAKE_Swift_COMPILE_OPTIONS_WARNING_AS_ERROR for Swift to
`-warnings-as-errors`.

Fixes: #26872
This commit is contained in:
Evan Wilde
2025-04-14 21:36:43 -07:00
committed by Brad King
parent 9c3cf45c82
commit dfa78c4868
13 changed files with 48 additions and 5 deletions

View File

@@ -0,0 +1,3 @@
if(CMAKE_Swift_COMPILER_VERSION VERSION_GREATER_EQUAL 3.0)
set(CMAKE_Swift_COMPILE_OPTIONS_WARNING_AS_ERROR -warnings-as-errors)
endif()

View File

@@ -580,7 +580,13 @@ add_RunCMake_test(TargetProperties)
add_RunCMake_test(ToolchainFile)
add_RunCMake_test(find_dependency)
add_RunCMake_test(CompileDefinitions)
add_RunCMake_test(CompileWarningAsError -DCMake_TEST_CUDA=${CMake_TEST_CUDA})
add_RunCMake_test(CompileWarningAsError
-DCMake_TEST_CUDA=${CMake_TEST_CUDA}
-DCMake_TEST_Swift=${CMake_TEST_Swift}
-DCMAKE_Swift_COMPILER_VERSION=${CMAKE_Swift_COMPILER_VERSION}
)
set_property(TEST RunCMake.CompileWarningAsError APPEND PROPERTY LABELS
"CUDA" "Swift")
if((CMAKE_C_COMPILER_ID MATCHES "AppleClang|MSVC"
OR (CMAKE_SYSTEM_NAME MATCHES "Linux|Windows" AND CMAKE_C_COMPILER_ID MATCHES "Clang|GNU")
OR (CMAKE_SYSTEM_NAME STREQUAL "SunOS" AND CMAKE_C_COMPILER_ID STREQUAL "SunPro")
@@ -588,7 +594,6 @@ if((CMAKE_C_COMPILER_ID MATCHES "AppleClang|MSVC"
AND CMAKE_C_COMPILER_LINKER_ID)
add_RunCMake_test(LinkWarningAsError)
endif()
set_property(TEST RunCMake.CompileWarningAsError APPEND PROPERTY LABELS "CUDA")
add_RunCMake_test(CompileFeatures -DCMake_NO_C_STANDARD=${CMake_NO_C_STANDARD} -DCMake_NO_CXX_STANDARD=${CMake_NO_CXX_STANDARD})
add_RunCMake_test(Policy)
add_RunCMake_test(PolicyScope)

View File

@@ -19,6 +19,15 @@ if(CMake_TEST_CUDA)
list(APPEND exts cu)
endif()
if(CMAKE_Swift_COMPILER_VERSION AND CMAKE_Swift_COMPILER_VERSION VERSION_LESS 3.0)
set(CMake_TEST_Swift 0)
endif()
if(CMake_TEST_Swift)
list(APPEND langs Swift)
list(APPEND exts swift)
endif()
foreach(lang ext IN ZIP_LISTS langs exts)
run_compile_warn(WerrorOn ${lang} ${ext})
run_compile_warn(WerrorOff ${lang} ${ext})

View File

@@ -26,4 +26,9 @@ macro(get_warning_options warning_options lang)
elseif (CMAKE_${lang}_COMPILER_ID STREQUAL "Fujitsu")
set(${warning_options} "SHELL:-w 8")
endif()
if(${lang} STREQUAL Swift)
# No extra flags required for Swift
set(${warning_options} "")
endif()
endmacro()

View File

@@ -3,6 +3,10 @@ enable_language(${LANGUAGE})
include(WarningAsErrorOptions.cmake)
get_warning_options(warning_options ${LANGUAGE})
add_executable(WerrorOff warn.${EXTENSION})
if(NOT DEFINED FILENAME)
set(FILENAME warn)
endif()
add_executable(WerrorOff ${FILENAME}.${EXTENSION})
target_compile_options(WerrorOff PUBLIC "${warning_options}")
set_target_properties(WerrorOff PROPERTIES COMPILE_WARNING_AS_ERROR OFF)

View File

@@ -0,0 +1,2 @@
set(FILENAME main)
include(WerrorOff.cmake)

View File

@@ -3,8 +3,12 @@ enable_language(${LANGUAGE})
include(WarningAsErrorOptions.cmake)
get_warning_options(warning_options ${LANGUAGE})
if(NOT DEFINED FILENAME)
set(FILENAME warn)
endif()
if (DEFINED warning_options)
add_executable(WerrorOn warn.${EXTENSION})
add_executable(WerrorOn ${FILENAME}.${EXTENSION})
target_compile_options(WerrorOn PUBLIC "${warning_options}")
set_target_properties(WerrorOn PROPERTIES COMPILE_WARNING_AS_ERROR ON)
else()

View File

@@ -3,6 +3,10 @@ enable_language(${LANGUAGE})
include(WarningAsErrorOptions.cmake)
get_warning_options(warning_options ${LANGUAGE})
add_executable(WerrorOn warn.${EXTENSION})
if(NOT DEFINED FILENAME)
set(FILENAME warn)
endif()
add_executable(WerrorOn ${FILENAME}.${EXTENSION})
target_compile_options(WerrorOn PUBLIC "${warning_options}")
set_target_properties(WerrorOn PROPERTIES COMPILE_WARNING_AS_ERROR ON)

View File

@@ -0,0 +1,2 @@
set(FILENAME main)
include(WerrorOnIgnore.cmake)

View File

@@ -0,0 +1 @@
[^0]

View File

@@ -0,0 +1,2 @@
set(FILENAME main)
include(WerrorOn.cmake)

View File

@@ -0,0 +1 @@
#error("boom")

View File

@@ -0,0 +1 @@
let a = (0 as Int) as! Int