[libcxx] [llvm] [libc++][CI] Reenables clang-tidy. (PR #90077)
via llvm-commits
llvm-commits at lists.llvm.org
Tue May 7 08:26:38 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-libcxx
Author: Mark de Wever (mordante)
<details>
<summary>Changes</summary>
This is currently a test patch; locally clang-tidy seems to be used in the Docker image.
This was noticed while investigating https://github.com/llvm/llvm-project/issues/89898
---
Full diff: https://github.com/llvm/llvm-project/pull/90077.diff
5 Files Affected:
- (modified) libcxx/modules/std/chrono.inc (+5-1)
- (modified) libcxx/modules/std/ranges.inc (+4-3)
- (modified) libcxx/test/CMakeLists.txt (+6)
- (modified) libcxx/test/libcxx/clang_tidy.gen.py (+3)
- (modified) libcxx/test/tools/clang_tidy_checks/CMakeLists.txt (+20-2)
``````````diff
diff --git a/libcxx/modules/std/chrono.inc b/libcxx/modules/std/chrono.inc
index 1265e21dc54ef..aa275a112e0f0 100644
--- a/libcxx/modules/std/chrono.inc
+++ b/libcxx/modules/std/chrono.inc
@@ -213,11 +213,15 @@ export namespace std {
using std::chrono::ambiguous_local_time;
using std::chrono::nonexistent_local_time;
# endif // if 0
+#endif // !defined(_LIBCPP_HAS_NO_TIME_ZONE_DATABASE) && !defined(_LIBCPP_HAS_NO_FILESYSTEM) &&
+ // !defined(_LIBCPP_HAS_NO_LOCALIZATION)
// [time.zone.info], information classes
using std::chrono::local_info;
using std::chrono::sys_info;
+#if !defined(_LIBCPP_HAS_NO_TIME_ZONE_DATABASE) && !defined(_LIBCPP_HAS_NO_FILESYSTEM) && \
+ !defined(_LIBCPP_HAS_NO_LOCALIZATION)
# if 0
// [time.zone.timezone], class time_zone
using std::chrono::choose;
@@ -248,7 +252,7 @@ export namespace std {
# endif
# endif // _LIBCPP_ENABLE_EXPERIMENTAL
#endif // !defined(_LIBCPP_HAS_NO_TIME_ZONE_DATABASE) && !defined(_LIBCPP_HAS_NO_FILESYSTEM) &&
- // !defined(_LIBCPP_HAS_NO_LOCALIZATION)
+ // !defined(_LIBCPP_HAS_NO_LOCALIZATION)
} // namespace chrono
diff --git a/libcxx/modules/std/ranges.inc b/libcxx/modules/std/ranges.inc
index 80f31c79a1a40..f71efe948ede1 100644
--- a/libcxx/modules/std/ranges.inc
+++ b/libcxx/modules/std/ranges.inc
@@ -138,9 +138,6 @@ export namespace std {
}
#endif // _LIBCPP_HAS_NO_LOCALIZATION
-#if _LIBCPP_STD_VER >= 23
- // [range.adaptor.object], range adaptor objects
- using std::ranges::range_adaptor_closure;
// Note: This declaration not in the synopsis or explicitly in the wording.
// However it is needed for the range adaptors.
// [range.adaptor.object]/3
@@ -151,7 +148,11 @@ export namespace std {
// involving an object of type cv D as an operand to the | operator is
// undefined if overload resolution selects a program-defined operator|
// function.
+ // This is used internally in C++20 mode.
using std::ranges::operator|;
+#if _LIBCPP_STD_VER >= 23
+ // [range.adaptor.object], range adaptor objects
+ using std::ranges::range_adaptor_closure;
#endif
// [range.all], all view
diff --git a/libcxx/test/CMakeLists.txt b/libcxx/test/CMakeLists.txt
index e0d3a0dbc4003..fd57aa9fe8b37 100644
--- a/libcxx/test/CMakeLists.txt
+++ b/libcxx/test/CMakeLists.txt
@@ -1,5 +1,11 @@
include(HandleLitArguments)
add_subdirectory(tools)
+# When the tools add clang-tidy support, the dependencies need to be updated.
+# This cannot be done in the tools CMakeLists.txt since that does not update
+# the status in this (a parent) directory.
+if(TARGET cxx-tidy)
+ list(APPEND LIBCXX_TEST_DEPS cxx-tidy)
+endif()
# By default, libcxx and libcxxabi share a library directory.
if (NOT LIBCXX_CXX_ABI_LIBRARY_PATH)
diff --git a/libcxx/test/libcxx/clang_tidy.gen.py b/libcxx/test/libcxx/clang_tidy.gen.py
index 19b6a999df607..8419a6f4637c5 100644
--- a/libcxx/test/libcxx/clang_tidy.gen.py
+++ b/libcxx/test/libcxx/clang_tidy.gen.py
@@ -24,6 +24,9 @@
// The GCC compiler flags are not always compatible with clang-tidy.
// UNSUPPORTED{BLOCKLIT}: gcc
+// Clang 17 has false positives.
+// UNSUPPORTED{BLOCKLIT}: clang-17
+
{lit_header_restrictions.get(header, '')}
// TODO: run clang-tidy with modules enabled once they are supported
diff --git a/libcxx/test/tools/clang_tidy_checks/CMakeLists.txt b/libcxx/test/tools/clang_tidy_checks/CMakeLists.txt
index 28eed61445833..aa5c2a0a1d900 100644
--- a/libcxx/test/tools/clang_tidy_checks/CMakeLists.txt
+++ b/libcxx/test/tools/clang_tidy_checks/CMakeLists.txt
@@ -64,6 +64,26 @@ if(NOT HAS_CLANG_TIDY_HEADERS)
"clang-tidy headers are not present.")
return()
endif()
+
+# The clangTidy plugin uses C++20, when using stdlibc++ verify the version is correct.
+# Note it has not been tested whether version 11 works.
+file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/test.cpp" "
+#include <version>
+#if defined(_GLIBCXX_RELEASE) && _GLIBCXX_RELEASE < 12
+ # error The stdlibc++ version is too old.
+#endif
+int main(){}
+")
+try_compile(HAS_NEWER_STANDARD_LIBRARY
+ "${CMAKE_CURRENT_BINARY_DIR}"
+ "${CMAKE_CURRENT_BINARY_DIR}/test.cpp"
+ LINK_LIBRARIES clangTidy)
+
+if(NOT HAS_NEWER_STANDARD_LIBRARY)
+ message(STATUS "Clang-tidy tests are disabled due to using "
+ "stdlibc++ older than version 12")
+ return()
+endif()
message(STATUS "Clang-tidy tests are enabled.")
set(SOURCES
@@ -88,5 +108,3 @@ set_target_properties(cxx-tidy PROPERTIES
set_target_properties(cxx-tidy PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
set(CMAKE_SHARED_MODULE_SUFFIX_CXX .plugin) # Use a portable suffix to simplify how we can find it from Lit
-
-list(APPEND LIBCXX_TEST_DEPS cxx-tidy)
``````````
</details>
https://github.com/llvm/llvm-project/pull/90077
More information about the llvm-commits
mailing list