This adds a test that consists of compiling `#include <...>`, pretty much alone, for each public header file in each different language mode (`-std=...` compiler switch) with -Werror and many warnings enabled. There are several headers that have bugs when used alone, and many more headers that have bugs in certain language modes. So for now, compiling the new tests is gated on the cmake switch -DLLVM_LIBC_BUILD_HEADER_TESTS=ON. When all the bugs are fixed, the switch will be removed so future regressions don't land.
553 lines
9.9 KiB
CMake
553 lines
9.9 KiB
CMake
add_custom_target(libc_include_tests)
|
|
add_dependencies(check-libc libc_include_tests)
|
|
|
|
add_libc_test(
|
|
assert_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
assert_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.assert_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
complex_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
complex_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.complex_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
sys_queue_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
sys/queue_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.sys_queue_macros
|
|
libc.src.__support.char_vector
|
|
libc.src.__support.CPP.string
|
|
COMPILE_OPTIONS
|
|
# This is needed because the __containerof macro uses statement expression.
|
|
-Wno-gnu-statement-expression-from-macro-expansion
|
|
)
|
|
|
|
add_libc_test(
|
|
stdbit_test
|
|
SUITE
|
|
libc_include_tests
|
|
HDRS
|
|
stdbit_stub.h
|
|
SRCS
|
|
stdbit_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.stdbit_macros
|
|
libc.include.llvm_libc_common_h
|
|
libc.include.stdbit
|
|
# Intentionally do not depend on libc.src.stdbit.*. The include test is
|
|
# simply testing the macros provided by stdbit.h, not the implementation
|
|
# of the underlying functions which the type generic macros may dispatch
|
|
# to.
|
|
)
|
|
add_libc_test(
|
|
stdbit_c_test
|
|
C_TEST
|
|
UNIT_TEST_ONLY
|
|
SUITE
|
|
libc_include_tests
|
|
HDRS
|
|
stdbit_stub.h
|
|
SRCS
|
|
stdbit_test.c
|
|
COMPILE_OPTIONS
|
|
-Wall
|
|
-Werror
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.stdbit_macros
|
|
libc.include.llvm_libc_common_h
|
|
libc.include.stdbit
|
|
libc.src.assert.__assert_fail
|
|
# Intentionally do not depend on libc.src.stdbit.*. The include test is
|
|
# simply testing the macros provided by stdbit.h, not the implementation
|
|
# of the underlying functions which the type generic macros may dispatch
|
|
# to.
|
|
)
|
|
|
|
add_libc_test(
|
|
stdckdint_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
stdckdint_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.stdckdint_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
issubnormal_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
issubnormal_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
issubnormalf_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
issubnormalf_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
issubnormall_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
issubnormall_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
isnormal_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
isnormal_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
isnormalf_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
isnormalf_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
isnormall_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
isnormall_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
fpclassify_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
fpclassify_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
fpclassifyf_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
fpclassifyf_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
fpclassifyl_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
fpclassifyl_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
iszero_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
iszero_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
iszerof_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
iszerof_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
iszerol_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
iszerol_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
signbit_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
signbit_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
signbitf_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
signbitf_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
signbitl_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
signbitl_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
isnan_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
isnan_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
isnanf_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
isnanf_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
isnanl_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
isnanl_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
isinf_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
isinf_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
isinff_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
isinff_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
isinfl_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
isinfl_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
isfinite_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
isfinite_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
isfinitef_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
isfinitef_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
isfinitel_test
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
isfinitel_test.cpp
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
signbit_c_test
|
|
C_TEST
|
|
UNIT_TEST_ONLY
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
signbit_test.c
|
|
COMPILE_OPTIONS
|
|
-Wall
|
|
-Werror
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
isnan_c_test
|
|
C_TEST
|
|
UNIT_TEST_ONLY
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
isnan_test.c
|
|
COMPILE_OPTIONS
|
|
-Wall
|
|
-Werror
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
isnormal_c_test
|
|
C_TEST
|
|
UNIT_TEST_ONLY
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
isnormal_test.c
|
|
COMPILE_OPTIONS
|
|
-Wall
|
|
-Werror
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
# TODO(https://github.com/llvm/llvm-project/issues/114618): fix linkage failures
|
|
# add_libc_test(
|
|
# issignaling_c_test
|
|
# C_TEST
|
|
# UNIT_TEST_ONLY
|
|
# SUITE
|
|
# libc_include_tests
|
|
# SRCS
|
|
# issignaling_test.c
|
|
# COMPILE_OPTIONS
|
|
# -Wall
|
|
# -Werror
|
|
# DEPENDS
|
|
# libc.include.llvm-libc-macros.math_function_macros
|
|
# libc.src.math.issignaling
|
|
# libc.src.math.issignalingf
|
|
# libc.src.math.issignalingl
|
|
# )
|
|
|
|
# add_libc_test(
|
|
# iscanonical_c_test
|
|
# C_TEST
|
|
# UNIT_TEST_ONLY
|
|
# SUITE
|
|
# libc_include_tests
|
|
# SRCS
|
|
# iscanonical_test.c
|
|
# COMPILE_OPTIONS
|
|
# -Wall
|
|
# -Werror
|
|
# DEPENDS
|
|
# libc.include.llvm-libc-macros.math_function_macros
|
|
# libc.src.math.iscanonical
|
|
# libc.src.math.iscanonicalf
|
|
# libc.src.math.iscanonicall
|
|
# )
|
|
|
|
add_libc_test(
|
|
isinf_c_test
|
|
C_TEST
|
|
UNIT_TEST_ONLY
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
isinf_test.c
|
|
COMPILE_OPTIONS
|
|
-Wall
|
|
-Werror
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
isfinite_c_test
|
|
C_TEST
|
|
UNIT_TEST_ONLY
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
isfinite_test.c
|
|
COMPILE_OPTIONS
|
|
-Wall
|
|
-Werror
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
issubnormal_c_test
|
|
C_TEST
|
|
UNIT_TEST_ONLY
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
issubnormal_test.c
|
|
COMPILE_OPTIONS
|
|
-Wall
|
|
-Werror
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
fpclassify_c_test
|
|
C_TEST
|
|
UNIT_TEST_ONLY
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
fpclassify_test.c
|
|
COMPILE_OPTIONS
|
|
-Wall
|
|
-Werror
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
add_libc_test(
|
|
iszero_c_test
|
|
C_TEST
|
|
UNIT_TEST_ONLY
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
iszero_test.c
|
|
COMPILE_OPTIONS
|
|
-Wall
|
|
-Werror
|
|
DEPENDS
|
|
libc.include.llvm-libc-macros.math_function_macros
|
|
)
|
|
|
|
# Test `#include <...>` of each header in each available language mode.
|
|
# This is gated on -DLLVM_LIBC_BUILD_HEADER_TESTS=ON until all the bugs
|
|
# in headers are fixed so the tests all compile.
|
|
set(TEST_STDC_VERSIONS 89;99;11;17;23)
|
|
set(TEST_STDCXX_VERSIONS 03;11;14;17;20;23;26)
|
|
|
|
function(add_header_test target_name source_file deps std_mode)
|
|
if(LLVM_LIBC_BUILD_HEADER_TESTS)
|
|
add_libc_test(
|
|
${target_name}
|
|
C_TEST
|
|
HERMETIC_TEST_ONLY
|
|
SUITE
|
|
libc_include_tests
|
|
SRCS
|
|
${source_file}
|
|
COMPILE_OPTIONS
|
|
-Werror
|
|
-Wsystem-headers
|
|
-Wall
|
|
-Wextra
|
|
-std=${std_mode}
|
|
DEPENDS
|
|
${deps}
|
|
)
|
|
endif()
|
|
endfunction()
|
|
|
|
foreach(target ${TARGET_PUBLIC_HEADERS})
|
|
string(REPLACE "libc.include." "" header ${target})
|
|
get_target_property(HEADER_NAME ${target} HEADER_NAME)
|
|
|
|
set(test_stdc_file "${CMAKE_CURRENT_BINARY_DIR}/${header}_test.c")
|
|
configure_file(header-test-template.c ${test_stdc_file} @ONLY)
|
|
foreach(stdc_version ${TEST_STDC_VERSIONS})
|
|
add_header_test(
|
|
"${header}_c${stdc_version}_test"
|
|
${test_stdc_file}
|
|
${target}
|
|
"c${stdc_version}"
|
|
)
|
|
add_header_test(
|
|
"${header}_gnu${stdc_version}_test"
|
|
${test_stdc_file}
|
|
${target}
|
|
"gnu${stdc_version}"
|
|
)
|
|
endforeach()
|
|
|
|
set(test_stdcxx_file "${CMAKE_CURRENT_BINARY_DIR}/${header}_test.cpp")
|
|
configure_file(header-test-template.c ${test_stdcxx_file} @ONLY)
|
|
foreach(stdcxx_version ${TEST_STDCXX_VERSIONS})
|
|
add_header_test(
|
|
"${header}_cpp${stdcxx_version}_test"
|
|
${test_stdcxx_file}
|
|
${target}
|
|
"c++${stdcxx_version}"
|
|
)
|
|
add_header_test(
|
|
"${header}_gnucpp${stdcxx_version}_test"
|
|
${test_stdcxx_file}
|
|
${target}
|
|
"gnu++${stdcxx_version}"
|
|
)
|
|
endforeach()
|
|
endforeach()
|