diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt index 0c1b2fe32f7ae4..ed9aaf60f255dd 100644 --- a/libcxx/CMakeLists.txt +++ b/libcxx/CMakeLists.txt @@ -568,9 +568,15 @@ function(cxx_add_warning_flags target) else() target_add_compile_flags_if_supported(${target} PRIVATE -Wall) endif() - target_add_compile_flags_if_supported(${target} PRIVATE -Wextra -W -Wwrite-strings - -Wno-unused-parameter -Wno-long-long - -Werror=return-type -Wextra-semi -Wundef + target_add_compile_flags_if_supported(${target} PRIVATE -Wextra + -W + -Wwrite-strings + -Wno-unused-parameter + -Wno-long-long + -Werror=return-type + -Wextra-semi + -Wundef + -Wunused-template -Wformat-nonliteral) if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") target_add_compile_flags_if_supported(${target} PRIVATE diff --git a/libcxx/include/__algorithm/make_projected.h b/libcxx/include/__algorithm/make_projected.h index f4ca4c9d4a7a86..61055fcdf30d77 100644 --- a/libcxx/include/__algorithm/make_projected.h +++ b/libcxx/include/__algorithm/make_projected.h @@ -60,7 +60,7 @@ template ::type>::value && __is_identity::type>::value), int> = 0> -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR static _ProjectedPred<_Pred, _Proj> +_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _ProjectedPred<_Pred, _Proj> __make_projected(_Pred& __pred, _Proj& __proj) { return _ProjectedPred<_Pred, _Proj>(__pred, __proj); } @@ -73,7 +73,7 @@ template ::type>::value && __is_identity::type>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR static _Pred& __make_projected(_Pred& __pred, _Proj&) { +_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _Pred& __make_projected(_Pred& __pred, _Proj&) { return __pred; } @@ -86,7 +86,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD namespace ranges { template -_LIBCPP_HIDE_FROM_ABI constexpr static +_LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) __make_projected_comp(_Comp& __comp, _Proj1& __proj1, _Proj2& __proj2) { if constexpr (__is_identity>::value && __is_identity>::value && !is_member_pointer_v>) { diff --git a/libcxx/include/__config b/libcxx/include/__config index 95a75ea758d531..d3063f039a8900 100644 --- a/libcxx/include/__config +++ b/libcxx/include/__config @@ -1254,13 +1254,19 @@ _LIBCPP_BEGIN_NAMESPACE_STD _LIBCPP_END_NAMESPACE_STD // macro is used to mark them as such, which suppresses the // '-Wctad-maybe-unsupported' compiler warning when CTAD is used in user code // with these classes. -#if _LIBCPP_STD_VER >= 17 -# define _LIBCPP_CTAD_SUPPORTED_FOR_TYPE(_ClassName) \ - template \ - _ClassName(typename _Tag::__allow_ctad...) -> _ClassName<_Tag...> -#else -# define _LIBCPP_CTAD_SUPPORTED_FOR_TYPE(_ClassName) static_assert(true, "") -#endif +# if _LIBCPP_STD_VER >= 17 +# ifdef _LIBCPP_COMPILER_CLANG_BASED +# define _LIBCPP_CTAD_SUPPORTED_FOR_TYPE(_ClassName) \ + template \ + [[maybe_unused]] _ClassName(typename _Tag::__allow_ctad...)->_ClassName<_Tag...> +# else +# define _LIBCPP_CTAD_SUPPORTED_FOR_TYPE(ClassName) \ + template \ + ClassName(typename _Tag::__allow_ctad...)->ClassName<_Tag...> +# endif +# else +# define _LIBCPP_CTAD_SUPPORTED_FOR_TYPE(_ClassName) static_assert(true, "") +# endif // TODO(varconst): currently, there are bugs in Clang's intrinsics when handling Objective-C++ `id`, so don't use // compiler intrinsics in the Objective-C++ mode. diff --git a/libcxx/include/__memory/shared_ptr.h b/libcxx/include/__memory/shared_ptr.h index 3ef264dcfe48c3..70615176d3703a 100644 --- a/libcxx/include/__memory/shared_ptr.h +++ b/libcxx/include/__memory/shared_ptr.h @@ -433,10 +433,10 @@ struct __is_array_deletable<_Ptr, decltype(delete[] std::declval<_Ptr>())> : tru template ()(std::declval<_Pt>()))> -static true_type __well_formed_deleter_test(int); +true_type __well_formed_deleter_test(int); template -static false_type __well_formed_deleter_test(...); +false_type __well_formed_deleter_test(...); template struct __well_formed_deleter : decltype(std::__well_formed_deleter_test<_Dp, _Pt>(0)) {}; diff --git a/libcxx/include/__type_traits/is_nothrow_convertible.h b/libcxx/include/__type_traits/is_nothrow_convertible.h index 148c2d68ccabd0..64f75e1fd68db5 100644 --- a/libcxx/include/__type_traits/is_nothrow_convertible.h +++ b/libcxx/include/__type_traits/is_nothrow_convertible.h @@ -27,10 +27,10 @@ _LIBCPP_BEGIN_NAMESPACE_STD #if _LIBCPP_STD_VER >= 20 template -static void __test_noexcept(_Tp) noexcept; +void __test_noexcept(_Tp) noexcept; template -static bool_constant(std::declval<_Fm>()))> +bool_constant(std::declval<_Fm>()))> __is_nothrow_convertible_test(); template diff --git a/libcxx/src/filesystem/filesystem_common.h b/libcxx/src/filesystem/filesystem_common.h index fb6f88783cd038..5867805efeeebf 100644 --- a/libcxx/src/filesystem/filesystem_common.h +++ b/libcxx/src/filesystem/filesystem_common.h @@ -44,9 +44,11 @@ #endif #endif +// TODO: Check whether these functions actually need internal linkage, or if they can be made normal header functions _LIBCPP_DIAGNOSTIC_PUSH _LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wunused-function") _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wunused-function") +_LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wunused-template") #if defined(_LIBCPP_WIN32API) # define PATHSTR(x) (L##x) diff --git a/libcxx/utils/libcxx/test/params.py b/libcxx/utils/libcxx/test/params.py index 0574a00a737bd1..db4c5efc08a05d 100644 --- a/libcxx/utils/libcxx/test/params.py +++ b/libcxx/utils/libcxx/test/params.py @@ -17,6 +17,7 @@ '-Wextra', '-Wshadow', '-Wundef', + '-Wunused-template', '-Wno-unused-command-line-argument', '-Wno-attributes', '-Wno-pessimizing-move', diff --git a/libcxxabi/src/demangle/StringView.h b/libcxxabi/src/demangle/StringView.h index 90890e37711022..07b7cf85757533 100644 --- a/libcxxabi/src/demangle/StringView.h +++ b/libcxxabi/src/demangle/StringView.h @@ -17,9 +17,16 @@ #define DEMANGLE_STRINGVIEW_H #include "DemangleConfig.h" + +#include <__cxxabi_config.h> #include #include +#ifdef _LIBCXXABI_COMPILER_CLANG +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused-template" +#endif + DEMANGLE_NAMESPACE_BEGIN class StringView { @@ -119,4 +126,8 @@ inline bool operator==(const StringView &LHS, const StringView &RHS) { DEMANGLE_NAMESPACE_END +#ifdef _LIBCXXABI_COMPILER_CLANG +#pragma clang diagnostic pop +#endif + #endif