Skip to content

[libc++] Clean up some now dead code with the upgrade to GCC 14 #97746

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 17 additions & 41 deletions libcxx/include/__config
Original file line number Diff line number Diff line change
Expand Up @@ -162,16 +162,6 @@ _LIBCPP_HARDENING_MODE_DEBUG
# define _LIBCPP_CXX03_LANG
# endif

// TODO: Remove once we switch to GCC 14
# ifndef __has_extension
# define __has_extension(__x) 0
# endif

// TODO: Remove once we switch to GCC 14
# ifndef __has_feature
# define __has_feature(__x) 0
# endif

# ifndef __has_constexpr_builtin
# define __has_constexpr_builtin(x) 0
# endif
Expand Down Expand Up @@ -348,44 +338,30 @@ typedef __char32_t char32_t;

# define _LIBCPP_PREFERRED_ALIGNOF(_Tp) __alignof(_Tp)

# if defined(_LIBCPP_COMPILER_CLANG_BASED)

// Objective-C++ features (opt-in)
# if __has_feature(objc_arc)
# define _LIBCPP_HAS_OBJC_ARC
# endif

# if __has_feature(objc_arc_weak)
# define _LIBCPP_HAS_OBJC_ARC_WEAK
# endif

# if __has_extension(blocks)
# define _LIBCPP_HAS_EXTENSION_BLOCKS
# endif

# if defined(_LIBCPP_HAS_EXTENSION_BLOCKS) && defined(__APPLE__)
# define _LIBCPP_HAS_BLOCKS_RUNTIME
# endif

# if !__has_feature(address_sanitizer)
# define _LIBCPP_HAS_NO_ASAN
# endif

# define _LIBCPP_ALWAYS_INLINE __attribute__((__always_inline__))
# if __has_feature(objc_arc)
# define _LIBCPP_HAS_OBJC_ARC
# endif

# define _LIBCPP_DISABLE_EXTENSION_WARNING __extension__
# if __has_feature(objc_arc_weak)
# define _LIBCPP_HAS_OBJC_ARC_WEAK
# endif

# elif defined(_LIBCPP_COMPILER_GCC)
# if __has_extension(blocks)
# define _LIBCPP_HAS_EXTENSION_BLOCKS
# endif

# if !defined(__SANITIZE_ADDRESS__)
# define _LIBCPP_HAS_NO_ASAN
# endif
# if defined(_LIBCPP_HAS_EXTENSION_BLOCKS) && defined(__APPLE__)
# define _LIBCPP_HAS_BLOCKS_RUNTIME
# endif

# define _LIBCPP_ALWAYS_INLINE __attribute__((__always_inline__))
# if !__has_feature(address_sanitizer)
# define _LIBCPP_HAS_NO_ASAN
# endif

# define _LIBCPP_DISABLE_EXTENSION_WARNING __extension__
# define _LIBCPP_ALWAYS_INLINE __attribute__((__always_inline__))

# endif // _LIBCPP_COMPILER_[CLANG|GCC]
# define _LIBCPP_DISABLE_EXTENSION_WARNING __extension__

# if defined(_LIBCPP_OBJECT_FORMAT_COFF)

Expand Down
26 changes: 0 additions & 26 deletions libcxx/include/__tuple/tuple_element.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,32 +40,6 @@ struct _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, const volatile _Tp> {

#ifndef _LIBCPP_CXX03_LANG

# if !__has_builtin(__type_pack_element)

namespace __indexer_detail {

template <size_t _Idx, class _Tp>
struct __indexed {
using type _LIBCPP_NODEBUG = _Tp;
};

template <class _Types, class _Indexes>
struct __indexer;

template <class... _Types, size_t... _Idx>
struct __indexer<__tuple_types<_Types...>, __tuple_indices<_Idx...>> : __indexed<_Idx, _Types>... {};

template <size_t _Idx, class _Tp>
__indexed<_Idx, _Tp> __at_index(__indexed<_Idx, _Tp> const&);

} // namespace __indexer_detail

template <size_t _Idx, class... _Types>
using __type_pack_element _LIBCPP_NODEBUG = typename decltype(__indexer_detail::__at_index<_Idx>(
__indexer_detail::__indexer< __tuple_types<_Types...>,
typename __make_tuple_indices<sizeof...(_Types)>::type >{}))::type;
# endif

template <size_t _Ip, class... _Types>
struct _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, __tuple_types<_Types...> > {
static_assert(_Ip < sizeof...(_Types), "tuple_element index out of range");
Expand Down
14 changes: 1 addition & 13 deletions libcxx/include/__type_traits/is_function.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,31 +11,19 @@

#include <__config>
#include <__type_traits/integral_constant.h>
#include <__type_traits/is_const.h>
#include <__type_traits/is_reference.h>

#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
#endif

_LIBCPP_BEGIN_NAMESPACE_STD

#if __has_builtin(__is_function)

template <class _Tp>
struct _LIBCPP_TEMPLATE_VIS is_function : integral_constant<bool, __is_function(_Tp)> {};

#else

template <class _Tp>
struct _LIBCPP_TEMPLATE_VIS is_function
: public integral_constant<bool, !(is_reference<_Tp>::value || is_const<const _Tp>::value)> {};

#endif // __has_builtin(__is_function)

#if _LIBCPP_STD_VER >= 17
template <class _Tp>
inline constexpr bool is_function_v = is_function<_Tp>::value;
inline constexpr bool is_function_v = __is_function(_Tp);
#endif

_LIBCPP_END_NAMESPACE_STD
Expand Down
31 changes: 0 additions & 31 deletions libcxx/include/__type_traits/is_member_function_pointer.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,31 +11,13 @@

#include <__config>
#include <__type_traits/integral_constant.h>
#include <__type_traits/is_function.h>
#include <__type_traits/remove_cv.h>
#include <cstddef>

#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
#endif

_LIBCPP_BEGIN_NAMESPACE_STD

template <class _Tp>
struct __libcpp_is_member_pointer {
enum { __is_member = false, __is_func = false, __is_obj = false };
};
template <class _Tp, class _Up>
struct __libcpp_is_member_pointer<_Tp _Up::*> {
enum {
__is_member = true,
__is_func = is_function<_Tp>::value,
__is_obj = !__is_func,
};
};

#if __has_builtin(__is_member_function_pointer)

template <class _Tp>
struct _LIBCPP_TEMPLATE_VIS is_member_function_pointer : _BoolConstant<__is_member_function_pointer(_Tp)> {};

Expand All @@ -44,19 +26,6 @@ template <class _Tp>
inline constexpr bool is_member_function_pointer_v = __is_member_function_pointer(_Tp);
# endif

#else // __has_builtin(__is_member_function_pointer)

template <class _Tp>
struct _LIBCPP_TEMPLATE_VIS is_member_function_pointer
: public _BoolConstant<__libcpp_is_member_pointer<__remove_cv_t<_Tp> >::__is_func> {};

# if _LIBCPP_STD_VER >= 17
template <class _Tp>
inline constexpr bool is_member_function_pointer_v = is_member_function_pointer<_Tp>::value;
# endif

#endif // __has_builtin(__is_member_function_pointer)

_LIBCPP_END_NAMESPACE_STD

#endif // _LIBCPP___TYPE_TRAITS_IS_MEMBER_FUNCTION_POINTER_H
15 changes: 0 additions & 15 deletions libcxx/include/__type_traits/is_member_object_pointer.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@

_LIBCPP_BEGIN_NAMESPACE_STD

#if __has_builtin(__is_member_object_pointer)

template <class _Tp>
struct _LIBCPP_TEMPLATE_VIS is_member_object_pointer : _BoolConstant<__is_member_object_pointer(_Tp)> {};

Expand All @@ -28,19 +26,6 @@ template <class _Tp>
inline constexpr bool is_member_object_pointer_v = __is_member_object_pointer(_Tp);
# endif

#else // __has_builtin(__is_member_object_pointer)

template <class _Tp>
struct _LIBCPP_TEMPLATE_VIS is_member_object_pointer
: public _BoolConstant<__libcpp_is_member_pointer<__remove_cv_t<_Tp> >::__is_obj> {};

# if _LIBCPP_STD_VER >= 17
template <class _Tp>
inline constexpr bool is_member_object_pointer_v = is_member_object_pointer<_Tp>::value;
# endif

#endif // __has_builtin(__is_member_object_pointer)

_LIBCPP_END_NAMESPACE_STD

#endif // _LIBCPP___TYPE_TRAITS_IS_MEMBER_FUNCTION_POINTER_H
16 changes: 0 additions & 16 deletions libcxx/include/__type_traits/is_member_pointer.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,13 @@

#include <__config>
#include <__type_traits/integral_constant.h>
#include <__type_traits/is_member_function_pointer.h>

#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
#endif

_LIBCPP_BEGIN_NAMESPACE_STD

#if __has_builtin(__is_member_pointer)

template <class _Tp>
struct _LIBCPP_TEMPLATE_VIS is_member_pointer : _BoolConstant<__is_member_pointer(_Tp)> {};

Expand All @@ -29,19 +26,6 @@ template <class _Tp>
inline constexpr bool is_member_pointer_v = __is_member_pointer(_Tp);
# endif

#else // __has_builtin(__is_member_pointer)

template <class _Tp>
struct _LIBCPP_TEMPLATE_VIS is_member_pointer
: public _BoolConstant<__libcpp_is_member_pointer<__remove_cv_t<_Tp> >::__is_member> {};

# if _LIBCPP_STD_VER >= 17
template <class _Tp>
inline constexpr bool is_member_pointer_v = is_member_pointer<_Tp>::value;
# endif

#endif // __has_builtin(__is_member_pointer)

_LIBCPP_END_NAMESPACE_STD

#endif // _LIBCPP___TYPE_TRAITS_IS_MEMBER_POINTER_H
61 changes: 0 additions & 61 deletions libcxx/include/__type_traits/is_nothrow_constructible.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,96 +13,35 @@
#include <__type_traits/add_lvalue_reference.h>
#include <__type_traits/add_rvalue_reference.h>
#include <__type_traits/integral_constant.h>
#include <__type_traits/is_constructible.h>
#include <__type_traits/is_reference.h>
#include <__utility/declval.h>
#include <cstddef>

#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
#endif

_LIBCPP_BEGIN_NAMESPACE_STD

// GCC is disabled due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106611
#if __has_builtin(__is_nothrow_constructible) && !defined(_LIBCPP_COMPILER_GCC)

template < class _Tp, class... _Args>
struct _LIBCPP_TEMPLATE_VIS is_nothrow_constructible
: public integral_constant<bool, __is_nothrow_constructible(_Tp, _Args...)> {};
#else

template <bool, bool, class _Tp, class... _Args>
struct __libcpp_is_nothrow_constructible;

template <class _Tp, class... _Args>
struct __libcpp_is_nothrow_constructible</*is constructible*/ true, /*is reference*/ false, _Tp, _Args...>
: public integral_constant<bool, noexcept(_Tp(std::declval<_Args>()...))> {};

template <class _Tp>
void __implicit_conversion_to(_Tp) noexcept {}

template <class _Tp, class _Arg>
struct __libcpp_is_nothrow_constructible</*is constructible*/ true, /*is reference*/ true, _Tp, _Arg>
: public integral_constant<bool, noexcept(std::__implicit_conversion_to<_Tp>(std::declval<_Arg>()))> {};

template <class _Tp, bool _IsReference, class... _Args>
struct __libcpp_is_nothrow_constructible</*is constructible*/ false, _IsReference, _Tp, _Args...> : public false_type {
};

template <class _Tp, class... _Args>
struct _LIBCPP_TEMPLATE_VIS is_nothrow_constructible
: __libcpp_is_nothrow_constructible<is_constructible<_Tp, _Args...>::value,
is_reference<_Tp>::value,
_Tp,
_Args...> {};

template <class _Tp, size_t _Ns>
struct _LIBCPP_TEMPLATE_VIS is_nothrow_constructible<_Tp[_Ns]>
: __libcpp_is_nothrow_constructible<is_constructible<_Tp>::value, is_reference<_Tp>::value, _Tp> {};

#endif // __has_builtin(__is_nothrow_constructible)

#if _LIBCPP_STD_VER >= 17
template <class _Tp, class... _Args>
inline constexpr bool is_nothrow_constructible_v = is_nothrow_constructible<_Tp, _Args...>::value;
#endif

// TODO: remove this implementation once https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106611 is fixed
#ifdef _LIBCPP_COMPILER_GCC

template <class _Tp>
struct _LIBCPP_TEMPLATE_VIS is_nothrow_copy_constructible
: public is_nothrow_constructible<_Tp, __add_lvalue_reference_t<const _Tp> > {};

#else // _LIBCPP_COMPILER_GCC

template <class _Tp>
struct _LIBCPP_TEMPLATE_VIS is_nothrow_copy_constructible
: public integral_constant< bool, __is_nothrow_constructible(_Tp, __add_lvalue_reference_t<const _Tp>)> {};

#endif // _LIBCPP_COMPILER_GCC

#if _LIBCPP_STD_VER >= 17
template <class _Tp>
inline constexpr bool is_nothrow_copy_constructible_v = is_nothrow_copy_constructible<_Tp>::value;
#endif

// TODO: remove this implementation once https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106611 is fixed
#ifndef _LIBCPP_COMPILER_GCC

template <class _Tp>
struct _LIBCPP_TEMPLATE_VIS is_nothrow_move_constructible
: public integral_constant<bool, __is_nothrow_constructible(_Tp, __add_rvalue_reference_t<_Tp>)> {};

#else // _LIBCPP_COMPILER_GCC

template <class _Tp>
struct _LIBCPP_TEMPLATE_VIS is_nothrow_move_constructible
: public is_nothrow_constructible<_Tp, __add_rvalue_reference_t<_Tp> > {};

#endif // _LIBCPP_COMPILER_GCC

#if _LIBCPP_STD_VER >= 17
template <class _Tp>
inline constexpr bool is_nothrow_move_constructible_v = is_nothrow_move_constructible<_Tp>::value;
Expand Down
Loading
Loading