[libcxx-commits] [libcxx] [libc++] Put [[gnu::nodebug]] on all internal aliases (PR #118710)

via libcxx-commits libcxx-commits at lists.llvm.org
Mon Dec 9 07:56:22 PST 2024


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-libcxx

Author: Nikolas Klauser (philnik777)

<details>
<summary>Changes</summary>



---

Patch is 200.99 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/118710.diff


155 Files Affected:

- (modified) libcxx/include/__algorithm/comp_ref_type.h (+2-2) 
- (modified) libcxx/include/__algorithm/copy.h (+1-1) 
- (modified) libcxx/include/__algorithm/iterator_operations.h (+9-9) 
- (modified) libcxx/include/__algorithm/move.h (+1-1) 
- (modified) libcxx/include/__algorithm/ranges_iterator_concept.h (+1-1) 
- (modified) libcxx/include/__algorithm/ranges_unique_copy.h (+1-1) 
- (modified) libcxx/include/__algorithm/simd_utils.h (+4-3) 
- (modified) libcxx/include/__algorithm/sort.h (+2-2) 
- (modified) libcxx/include/__algorithm/three_way_comp_ref_type.h (+2-2) 
- (modified) libcxx/include/__algorithm/unwrap_iter.h (+1-1) 
- (modified) libcxx/include/__atomic/aliases.h (+5-5) 
- (modified) libcxx/include/__atomic/atomic.h (+10-10) 
- (modified) libcxx/include/__atomic/atomic_ref.h (+5-5) 
- (modified) libcxx/include/__atomic/atomic_sync.h (+1-1) 
- (modified) libcxx/include/__atomic/contention_t.h (+3-3) 
- (modified) libcxx/include/__atomic/memory_order.h (+1-1) 
- (modified) libcxx/include/__bit_reference (+12-12) 
- (modified) libcxx/include/__chrono/formatter.h (+23-23) 
- (modified) libcxx/include/__chrono/hh_mm_ss.h (+1-1) 
- (modified) libcxx/include/__chrono/parser_std_format_spec.h (+1-1) 
- (modified) libcxx/include/__compare/ordering.h (+2-2) 
- (modified) libcxx/include/__compare/synth_three_way.h (+2-1) 
- (modified) libcxx/include/__exception/exception_ptr.h (+1-1) 
- (modified) libcxx/include/__expected/expected.h (+5-5) 
- (modified) libcxx/include/__expected/unexpected.h (+6-6) 
- (modified) libcxx/include/__filesystem/path.h (+17-17) 
- (modified) libcxx/include/__flat_map/flat_map.h (+4-3) 
- (modified) libcxx/include/__format/buffer.h (+9-8) 
- (modified) libcxx/include/__format/concepts.h (+1-1) 
- (modified) libcxx/include/__format/container_adaptor.h (+2-2) 
- (modified) libcxx/include/__format/format_arg.h (+1-1) 
- (modified) libcxx/include/__format/format_arg_store.h (+1-1) 
- (modified) libcxx/include/__format/format_functions.h (+1-1) 
- (modified) libcxx/include/__format/formatter_floating_point.h (+1-1) 
- (modified) libcxx/include/__format/formatter_string.h (+5-5) 
- (modified) libcxx/include/__format/range_default_formatter.h (+7-6) 
- (modified) libcxx/include/__format/unicode.h (+5-5) 
- (modified) libcxx/include/__functional/binary_function.h (+2-2) 
- (modified) libcxx/include/__functional/bind.h (+1-1) 
- (modified) libcxx/include/__functional/boyer_moore_searcher.h (+2-2) 
- (modified) libcxx/include/__functional/function.h (+2-2) 
- (modified) libcxx/include/__functional/perfect_forward.h (+1-1) 
- (modified) libcxx/include/__functional/unary_function.h (+1-1) 
- (modified) libcxx/include/__hash_table (+2-2) 
- (modified) libcxx/include/__iterator/aliasing_iterator.h (+3-3) 
- (modified) libcxx/include/__iterator/concepts.h (+4-4) 
- (modified) libcxx/include/__iterator/insert_iterator.h (+2-2) 
- (modified) libcxx/include/__iterator/iterator_traits.h (+29-23) 
- (modified) libcxx/include/__iterator/projected.h (+6-6) 
- (modified) libcxx/include/__iterator/ranges_iterator_traits.h (+3-3) 
- (modified) libcxx/include/__iterator/reverse_iterator.h (+2-2) 
- (modified) libcxx/include/__iterator/segmented_iterator.h (+1-1) 
- (modified) libcxx/include/__locale (+1-1) 
- (modified) libcxx/include/__locale_dir/locale_base_api.h (+1-1) 
- (modified) libcxx/include/__mdspan/extents.h (+7-6) 
- (modified) libcxx/include/__memory/allocation_guard.h (+2-2) 
- (modified) libcxx/include/__memory/allocator_traits.h (+19-14) 
- (modified) libcxx/include/__memory/pointer_traits.h (+4-4) 
- (modified) libcxx/include/__memory/shared_ptr.h (+5-4) 
- (modified) libcxx/include/__memory/unique_ptr.h (+5-5) 
- (modified) libcxx/include/__memory/unique_temporary_buffer.h (+1-1) 
- (modified) libcxx/include/__node_handle (+2-2) 
- (modified) libcxx/include/__pstl/backend_fwd.h (+6-3) 
- (modified) libcxx/include/__pstl/dispatch.h (+2-1) 
- (modified) libcxx/include/__ranges/chunk_by_view.h (+1-1) 
- (modified) libcxx/include/__ranges/drop_view.h (+3-3) 
- (modified) libcxx/include/__ranges/drop_while_view.h (+2-2) 
- (modified) libcxx/include/__ranges/elements_view.h (+2-2) 
- (modified) libcxx/include/__ranges/filter_view.h (+3-3) 
- (modified) libcxx/include/__ranges/iota_view.h (+1-1) 
- (modified) libcxx/include/__ranges/join_view.h (+20-17) 
- (modified) libcxx/include/__ranges/lazy_split_view.h (+6-5) 
- (modified) libcxx/include/__ranges/repeat_view.h (+3-2) 
- (modified) libcxx/include/__ranges/reverse_view.h (+2-1) 
- (modified) libcxx/include/__ranges/split_view.h (+1-1) 
- (modified) libcxx/include/__ranges/subrange.h (+1-1) 
- (modified) libcxx/include/__ranges/take_view.h (+3-3) 
- (modified) libcxx/include/__ranges/take_while_view.h (+1-1) 
- (modified) libcxx/include/__ranges/transform_view.h (+5-5) 
- (modified) libcxx/include/__split_buffer (+13-13) 
- (modified) libcxx/include/__stop_token/stop_state.h (+4-4) 
- (modified) libcxx/include/__thread/support/pthread.h (+1-1) 
- (modified) libcxx/include/__tuple/make_tuple_types.h (+6-5) 
- (modified) libcxx/include/__tuple/sfinae_helpers.h (+1-1) 
- (modified) libcxx/include/__tuple/tuple_size.h (+1-1) 
- (modified) libcxx/include/__type_traits/add_lvalue_reference.h (+1-1) 
- (modified) libcxx/include/__type_traits/add_pointer.h (+1-1) 
- (modified) libcxx/include/__type_traits/add_rvalue_reference.h (+1-1) 
- (modified) libcxx/include/__type_traits/common_reference.h (+10-10) 
- (modified) libcxx/include/__type_traits/common_type.h (+1-1) 
- (modified) libcxx/include/__type_traits/conjunction.h (+1-1) 
- (modified) libcxx/include/__type_traits/copy_cv.h (+5-5) 
- (modified) libcxx/include/__type_traits/copy_cvref.h (+1-1) 
- (modified) libcxx/include/__type_traits/detected_or.h (+1-1) 
- (modified) libcxx/include/__type_traits/disjunction.h (+1-1) 
- (modified) libcxx/include/__type_traits/invoke.h (+11-10) 
- (modified) libcxx/include/__type_traits/is_always_bitcastable.h (+2-2) 
- (modified) libcxx/include/__type_traits/is_char_like_type.h (+1-1) 
- (modified) libcxx/include/__type_traits/is_equality_comparable.h (+1-1) 
- (modified) libcxx/include/__type_traits/is_execution_policy.h (+1-1) 
- (modified) libcxx/include/__type_traits/is_primary_template.h (+3-2) 
- (modified) libcxx/include/__type_traits/is_same.h (+2-2) 
- (modified) libcxx/include/__type_traits/is_swappable.h (+3-2) 
- (modified) libcxx/include/__type_traits/make_32_64_or_128_bit.h (+1-1) 
- (modified) libcxx/include/__type_traits/make_const_lvalue_ref.h (+1-1) 
- (modified) libcxx/include/__type_traits/make_signed.h (+1-1) 
- (modified) libcxx/include/__type_traits/make_unsigned.h (+3-2) 
- (modified) libcxx/include/__type_traits/maybe_const.h (+1-1) 
- (modified) libcxx/include/__type_traits/remove_all_extents.h (+1-1) 
- (modified) libcxx/include/__type_traits/remove_const.h (+1-1) 
- (modified) libcxx/include/__type_traits/remove_const_ref.h (+1-1) 
- (modified) libcxx/include/__type_traits/remove_cv.h (+2-2) 
- (modified) libcxx/include/__type_traits/remove_cvref.h (+1-1) 
- (modified) libcxx/include/__type_traits/remove_extent.h (+1-1) 
- (modified) libcxx/include/__type_traits/remove_pointer.h (+2-2) 
- (modified) libcxx/include/__type_traits/remove_reference.h (+1-1) 
- (modified) libcxx/include/__type_traits/remove_volatile.h (+1-1) 
- (modified) libcxx/include/__type_traits/void_t.h (+1-1) 
- (modified) libcxx/include/__utility/exception_guard.h (+2-2) 
- (modified) libcxx/include/__utility/forward_like.h (+6-5) 
- (modified) libcxx/include/__utility/in_place.h (+2-2) 
- (modified) libcxx/include/__utility/integer_sequence.h (+4-4) 
- (modified) libcxx/include/__utility/move.h (+1-1) 
- (modified) libcxx/include/__utility/pair.h (+1-1) 
- (modified) libcxx/include/__utility/swap.h (+3-2) 
- (modified) libcxx/include/__vector/vector.h (+1-1) 
- (modified) libcxx/include/any (+7-5) 
- (modified) libcxx/include/array (+15-14) 
- (modified) libcxx/include/barrier (+1-1) 
- (modified) libcxx/include/ccomplex (+5-4) 
- (modified) libcxx/include/ciso646 (+3-2) 
- (modified) libcxx/include/complex (+1-1) 
- (modified) libcxx/include/cstdalign (+4-4) 
- (modified) libcxx/include/cstdbool (+4-4) 
- (modified) libcxx/include/ctgmath (+6-4) 
- (modified) libcxx/include/deque (+16-14) 
- (modified) libcxx/include/experimental/__simd/scalar.h (+3-3) 
- (modified) libcxx/include/experimental/__simd/simd.h (+2-2) 
- (modified) libcxx/include/experimental/__simd/simd_mask.h (+2-2) 
- (modified) libcxx/include/experimental/__simd/vec_ext.h (+3-3) 
- (modified) libcxx/include/forward_list (+2-1) 
- (modified) libcxx/include/ios (+2-2) 
- (modified) libcxx/include/optional (+14-13) 
- (modified) libcxx/include/ratio (+1-1) 
- (modified) libcxx/include/regex (+2-1) 
- (modified) libcxx/include/source_location (+1-1) 
- (modified) libcxx/include/string (+3-3) 
- (modified) libcxx/include/tuple (+2-1) 
- (modified) libcxx/include/variant (+17-17) 
- (modified) libcxx/test/tools/clang_tidy_checks/CMakeLists.txt (+1) 
- (modified) libcxx/test/tools/clang_tidy_checks/libcpp_module.cpp (+2) 
- (added) libcxx/test/tools/clang_tidy_checks/nodebug_on_internal_aliases.cpp (+35) 
- (added) libcxx/test/tools/clang_tidy_checks/nodebug_on_internal_aliases.hpp (+18) 
- (modified) libcxx/test/tools/clang_tidy_checks/uglify_attributes.cpp (+5-16) 
- (added) libcxx/test/tools/clang_tidy_checks/utilities.hpp (+23) 


``````````diff
diff --git a/libcxx/include/__algorithm/comp_ref_type.h b/libcxx/include/__algorithm/comp_ref_type.h
index c367fbb91ac282..d98aef40a79ddb 100644
--- a/libcxx/include/__algorithm/comp_ref_type.h
+++ b/libcxx/include/__algorithm/comp_ref_type.h
@@ -56,10 +56,10 @@ struct __debug_less {
 // Pass the comparator by lvalue reference. Or in the debug mode, using a debugging wrapper that stores a reference.
 #if _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_DEBUG
 template <class _Comp>
-using __comp_ref_type = __debug_less<_Comp>;
+using __comp_ref_type [[__gnu__::__nodebug__]] = __debug_less<_Comp>;
 #else
 template <class _Comp>
-using __comp_ref_type = _Comp&;
+using __comp_ref_type [[__gnu__::__nodebug__]] = _Comp&;
 #endif
 
 _LIBCPP_END_NAMESPACE_STD
diff --git a/libcxx/include/__algorithm/copy.h b/libcxx/include/__algorithm/copy.h
index 4f30b2050abbaf..210ae3086ab7a5 100644
--- a/libcxx/include/__algorithm/copy.h
+++ b/libcxx/include/__algorithm/copy.h
@@ -47,7 +47,7 @@ struct __copy_impl {
 
   template <class _InIter, class _OutIter>
   struct _CopySegment {
-    using _Traits = __segmented_iterator_traits<_InIter>;
+    using _Traits [[__gnu__::__nodebug__]] = __segmented_iterator_traits<_InIter>;
 
     _OutIter& __result_;
 
diff --git a/libcxx/include/__algorithm/iterator_operations.h b/libcxx/include/__algorithm/iterator_operations.h
index 6cdb0aec9b2db8..4ba9072ddf63bd 100644
--- a/libcxx/include/__algorithm/iterator_operations.h
+++ b/libcxx/include/__algorithm/iterator_operations.h
@@ -48,13 +48,13 @@ struct _RangeAlgPolicy {};
 template <>
 struct _IterOps<_RangeAlgPolicy> {
   template <class _Iter>
-  using __value_type = iter_value_t<_Iter>;
+  using __value_type [[__gnu__::__nodebug__]] = iter_value_t<_Iter>;
 
   template <class _Iter>
-  using __iterator_category = ranges::__iterator_concept<_Iter>;
+  using __iterator_category [[__gnu__::__nodebug__]] = ranges::__iterator_concept<_Iter>;
 
   template <class _Iter>
-  using __difference_type = iter_difference_t<_Iter>;
+  using __difference_type [[__gnu__::__nodebug__]] = iter_difference_t<_Iter>;
 
   static constexpr auto advance      = ranges::advance;
   static constexpr auto distance     = ranges::distance;
@@ -72,13 +72,13 @@ struct _ClassicAlgPolicy {};
 template <>
 struct _IterOps<_ClassicAlgPolicy> {
   template <class _Iter>
-  using __value_type = typename iterator_traits<_Iter>::value_type;
+  using __value_type [[__gnu__::__nodebug__]] = typename iterator_traits<_Iter>::value_type;
 
   template <class _Iter>
-  using __iterator_category = typename iterator_traits<_Iter>::iterator_category;
+  using __iterator_category [[__gnu__::__nodebug__]] = typename iterator_traits<_Iter>::iterator_category;
 
   template <class _Iter>
-  using __difference_type = typename iterator_traits<_Iter>::difference_type;
+  using __difference_type [[__gnu__::__nodebug__]] = typename iterator_traits<_Iter>::difference_type;
 
   // advance
   template <class _Iter, class _Distance>
@@ -94,10 +94,10 @@ struct _IterOps<_ClassicAlgPolicy> {
   }
 
   template <class _Iter>
-  using __deref_t = decltype(*std::declval<_Iter&>());
+  using __deref_t [[__gnu__::__nodebug__]] = decltype(*std::declval<_Iter&>());
 
   template <class _Iter>
-  using __move_t = decltype(std::move(*std::declval<_Iter&>()));
+  using __move_t [[__gnu__::__nodebug__]] = decltype(std::move(*std::declval<_Iter&>()));
 
   template <class _Iter>
   _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 static void __validate_iter_reference() {
@@ -217,7 +217,7 @@ struct _IterOps<_ClassicAlgPolicy> {
 };
 
 template <class _AlgPolicy, class _Iter>
-using __policy_iter_diff_t = typename _IterOps<_AlgPolicy>::template __difference_type<_Iter>;
+using __policy_iter_diff_t [[__gnu__::__nodebug__]] = typename _IterOps<_AlgPolicy>::template __difference_type<_Iter>;
 
 _LIBCPP_END_NAMESPACE_STD
 
diff --git a/libcxx/include/__algorithm/move.h b/libcxx/include/__algorithm/move.h
index 005099dcac06e3..48c3b9061f06f2 100644
--- a/libcxx/include/__algorithm/move.h
+++ b/libcxx/include/__algorithm/move.h
@@ -50,7 +50,7 @@ struct __move_impl {
 
   template <class _InIter, class _OutIter>
   struct _MoveSegment {
-    using _Traits = __segmented_iterator_traits<_InIter>;
+    using _Traits [[__gnu__::__nodebug__]] = __segmented_iterator_traits<_InIter>;
 
     _OutIter& __result_;
 
diff --git a/libcxx/include/__algorithm/ranges_iterator_concept.h b/libcxx/include/__algorithm/ranges_iterator_concept.h
index 2af891d3af005a..4846ef4139d0f5 100644
--- a/libcxx/include/__algorithm/ranges_iterator_concept.h
+++ b/libcxx/include/__algorithm/ranges_iterator_concept.h
@@ -44,7 +44,7 @@ consteval auto __get_iterator_concept() {
 }
 
 template <class _Iter>
-using __iterator_concept = decltype(__get_iterator_concept<_Iter>());
+using __iterator_concept [[__gnu__::__nodebug__]] = decltype(__get_iterator_concept<_Iter>());
 
 } // namespace ranges
 _LIBCPP_END_NAMESPACE_STD
diff --git a/libcxx/include/__algorithm/ranges_unique_copy.h b/libcxx/include/__algorithm/ranges_unique_copy.h
index 3b4a64e94ca1f5..2b0e7358f47a51 100644
--- a/libcxx/include/__algorithm/ranges_unique_copy.h
+++ b/libcxx/include/__algorithm/ranges_unique_copy.h
@@ -60,7 +60,7 @@ struct __unique_copy {
   }
 
   template <class _InIter, class _OutIter>
-  using __algo_tag_t = decltype(__get_algo_tag<_InIter, _OutIter>());
+  using __algo_tag_t [[__gnu__::__nodebug__]] = decltype(__get_algo_tag<_InIter, _OutIter>());
 
   template <input_iterator _InIter,
             sentinel_for<_InIter> _Sent,
diff --git a/libcxx/include/__algorithm/simd_utils.h b/libcxx/include/__algorithm/simd_utils.h
index 4e3e4f2b9404e3..ab359bb8c8fa97 100644
--- a/libcxx/include/__algorithm/simd_utils.h
+++ b/libcxx/include/__algorithm/simd_utils.h
@@ -70,7 +70,7 @@ struct __get_as_integer_type_impl<8> {
 };
 
 template <class _Tp>
-using __get_as_integer_type_t = typename __get_as_integer_type_impl<sizeof(_Tp)>::type;
+using __get_as_integer_type_t [[__gnu__::__nodebug__]] = typename __get_as_integer_type_impl<sizeof(_Tp)>::type;
 
 // This isn't specialized for 64 byte vectors on purpose. They have the potential to significantly reduce performance
 // in mixed simd/non-simd workloads and don't provide any performance improvement for currently vectorized algorithms
@@ -90,7 +90,7 @@ inline constexpr size_t __native_vector_size = 1;
 #  endif
 
 template <class _ArithmeticT, size_t _Np>
-using __simd_vector __attribute__((__ext_vector_type__(_Np))) = _ArithmeticT;
+using __simd_vector __attribute__((__ext_vector_type__(_Np))) [[__gnu__::__nodebug__]] = _ArithmeticT;
 
 template <class _VecT>
 inline constexpr size_t __simd_vector_size_v = []<bool _False = false>() -> size_t {
@@ -106,7 +106,8 @@ _LIBCPP_HIDE_FROM_ABI _Tp __simd_vector_underlying_type_impl(__simd_vector<_Tp,
 }
 
 template <class _VecT>
-using __simd_vector_underlying_type_t = decltype(std::__simd_vector_underlying_type_impl(_VecT{}));
+using __simd_vector_underlying_type_t [[__gnu__::__nodebug__]] =
+    decltype(std::__simd_vector_underlying_type_impl(_VecT{}));
 
 // This isn't inlined without always_inline when loading chars.
 template <class _VecT, class _Iter>
diff --git a/libcxx/include/__algorithm/sort.h b/libcxx/include/__algorithm/sort.h
index ed828b6d723147..9a5f64f9e69f69 100644
--- a/libcxx/include/__algorithm/sort.h
+++ b/libcxx/include/__algorithm/sort.h
@@ -890,10 +890,10 @@ __sort_dispatch(_RandomAccessIterator __first, _RandomAccessIterator __last, _Co
 }
 
 template <class _Type, class... _Options>
-using __is_any_of = _Or<is_same<_Type, _Options>...>;
+using __is_any_of [[__gnu__::__nodebug__]] = _Or<is_same<_Type, _Options>...>;
 
 template <class _Type>
-using __sort_is_specialized_in_library = __is_any_of<
+using __sort_is_specialized_in_library [[__gnu__::__nodebug__]] = __is_any_of<
     _Type,
     char,
 #if _LIBCPP_HAS_WIDE_CHARACTERS
diff --git a/libcxx/include/__algorithm/three_way_comp_ref_type.h b/libcxx/include/__algorithm/three_way_comp_ref_type.h
index 5702a1fee08262..a76392988503d6 100644
--- a/libcxx/include/__algorithm/three_way_comp_ref_type.h
+++ b/libcxx/include/__algorithm/three_way_comp_ref_type.h
@@ -61,10 +61,10 @@ struct __debug_three_way_comp {
 // Pass the comparator by lvalue reference. Or in the debug mode, using a debugging wrapper that stores a reference.
 #  if _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_DEBUG
 template <class _Comp>
-using __three_way_comp_ref_type = __debug_three_way_comp<_Comp>;
+using __three_way_comp_ref_type [[__gnu__::__nodebug__]] = __debug_three_way_comp<_Comp>;
 #  else
 template <class _Comp>
-using __three_way_comp_ref_type = _Comp&;
+using __three_way_comp_ref_type [[__gnu__::__nodebug__]] = _Comp&;
 #  endif
 
 #endif // _LIBCPP_STD_VER >= 20
diff --git a/libcxx/include/__algorithm/unwrap_iter.h b/libcxx/include/__algorithm/unwrap_iter.h
index 8cc0d22d4fc211..57b5a22240bb71 100644
--- a/libcxx/include/__algorithm/unwrap_iter.h
+++ b/libcxx/include/__algorithm/unwrap_iter.h
@@ -46,7 +46,7 @@ struct __unwrap_iter_impl {
 // It's a contiguous iterator, so we can use a raw pointer instead
 template <class _Iter>
 struct __unwrap_iter_impl<_Iter, true> {
-  using _ToAddressT = decltype(std::__to_address(std::declval<_Iter>()));
+  using _ToAddressT [[__gnu__::__nodebug__]] = decltype(std::__to_address(std::declval<_Iter>()));
 
   static _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _Iter __rewrap(_Iter __orig_iter, _ToAddressT __unwrapped_iter) {
     return __orig_iter + (__unwrapped_iter - std::__to_address(__orig_iter));
diff --git a/libcxx/include/__atomic/aliases.h b/libcxx/include/__atomic/aliases.h
index 37d11dd0aabf36..a95de035cc33ee 100644
--- a/libcxx/include/__atomic/aliases.h
+++ b/libcxx/include/__atomic/aliases.h
@@ -84,19 +84,19 @@ using atomic_uintmax_t = atomic<uintmax_t>;
 // C++20 atomic_{signed,unsigned}_lock_free: prefer the contention type most highly, then the largest lock-free type
 #if _LIBCPP_STD_VER >= 20
 #  if ATOMIC_LLONG_LOCK_FREE == 2
-using __largest_lock_free_type = long long;
+using __largest_lock_free_type [[__gnu__::__nodebug__]] = long long;
 #  elif ATOMIC_INT_LOCK_FREE == 2
-using __largest_lock_free_type = int;
+using __largest_lock_free_type [[__gnu__::__nodebug__]] = int;
 #  elif ATOMIC_SHORT_LOCK_FREE == 2
-using __largest_lock_free_type = short;
+using __largest_lock_free_type [[__gnu__::__nodebug__]] = short;
 #  elif ATOMIC_CHAR_LOCK_FREE == 2
-using __largest_lock_free_type = char;
+using __largest_lock_free_type [[__gnu__::__nodebug__]] = char;
 #  else
 #    define _LIBCPP_NO_LOCK_FREE_TYPES // There are no lockfree types (this can happen on unusual platforms)
 #  endif
 
 #  ifndef _LIBCPP_NO_LOCK_FREE_TYPES
-using __contention_t_or_largest =
+using __contention_t_or_largest [[__gnu__::__nodebug__]] =
     __conditional_t<__libcpp_is_always_lock_free<__cxx_contention_t>::__value,
                     __cxx_contention_t,
                     __largest_lock_free_type>;
diff --git a/libcxx/include/__atomic/atomic.h b/libcxx/include/__atomic/atomic.h
index d83719c8733d7e..79dc2277bf7a2e 100644
--- a/libcxx/include/__atomic/atomic.h
+++ b/libcxx/include/__atomic/atomic.h
@@ -143,7 +143,7 @@ struct __atomic_base // false
 
 template <class _Tp>
 struct __atomic_base<_Tp, true> : public __atomic_base<_Tp, false> {
-  using __base = __atomic_base<_Tp, false>;
+  using __base [[__gnu__::__nodebug__]] = __atomic_base<_Tp, false>;
 
   _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __atomic_base() _NOEXCEPT = default;
 
@@ -228,9 +228,9 @@ struct __atomic_waitable_traits<__atomic_base<_Tp, _IsIntegral> > {
 
 template <class _Tp>
 struct atomic : public __atomic_base<_Tp> {
-  using __base          = __atomic_base<_Tp>;
-  using value_type      = _Tp;
-  using difference_type = value_type;
+  using __base [[__gnu__::__nodebug__]] = __atomic_base<_Tp>;
+  using value_type                      = _Tp;
+  using difference_type                 = value_type;
 
 #if _LIBCPP_STD_VER >= 20
   _LIBCPP_HIDE_FROM_ABI atomic() = default;
@@ -257,9 +257,9 @@ struct atomic : public __atomic_base<_Tp> {
 
 template <class _Tp>
 struct atomic<_Tp*> : public __atomic_base<_Tp*> {
-  using __base          = __atomic_base<_Tp*>;
-  using value_type      = _Tp*;
-  using difference_type = ptrdiff_t;
+  using __base [[__gnu__::__nodebug__]] = __atomic_base<_Tp*>;
+  using value_type                      = _Tp*;
+  using difference_type                 = ptrdiff_t;
 
   _LIBCPP_HIDE_FROM_ABI atomic() _NOEXCEPT = default;
 
@@ -389,9 +389,9 @@ struct atomic<_Tp> : __atomic_base<_Tp> {
   }
 
 public:
-  using __base          = __atomic_base<_Tp>;
-  using value_type      = _Tp;
-  using difference_type = value_type;
+  using __base [[__gnu__::__nodebug__]] = __atomic_base<_Tp>;
+  using value_type                      = _Tp;
+  using difference_type                 = value_type;
 
   _LIBCPP_HIDE_FROM_ABI constexpr atomic() noexcept = default;
   _LIBCPP_HIDE_FROM_ABI constexpr atomic(_Tp __d) noexcept : __base(__d) {}
diff --git a/libcxx/include/__atomic/atomic_ref.h b/libcxx/include/__atomic/atomic_ref.h
index eef15983b98331..2ff573f99aab21 100644
--- a/libcxx/include/__atomic/atomic_ref.h
+++ b/libcxx/include/__atomic/atomic_ref.h
@@ -221,7 +221,7 @@ struct __atomic_ref_base {
   _LIBCPP_HIDE_FROM_ABI void notify_all() const noexcept { std::__atomic_notify_all(*this); }
 
 protected:
-  using _Aligned_Tp [[__gnu__::__aligned__(required_alignment)]] = _Tp;
+  using _Aligned_Tp [[__gnu__::__aligned__(required_alignment), __gnu__::__nodebug__]] = _Tp;
   _Aligned_Tp* __ptr_;
 
   _LIBCPP_HIDE_FROM_ABI __atomic_ref_base(_Tp& __obj) : __ptr_(std::addressof(__obj)) {}
@@ -241,7 +241,7 @@ template <class _Tp>
 struct atomic_ref : public __atomic_ref_base<_Tp> {
   static_assert(is_trivially_copyable_v<_Tp>, "std::atomic_ref<T> requires that 'T' be a trivially copyable type");
 
-  using __base = __atomic_ref_base<_Tp>;
+  using __base [[__gnu__::__nodebug__]] = __atomic_ref_base<_Tp>;
 
   _LIBCPP_HIDE_FROM_ABI explicit atomic_ref(_Tp& __obj) : __base(__obj) {
     _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN(
@@ -259,7 +259,7 @@ struct atomic_ref : public __atomic_ref_base<_Tp> {
 template <class _Tp>
   requires(std::integral<_Tp> && !std::same_as<bool, _Tp>)
 struct atomic_ref<_Tp> : public __atomic_ref_base<_Tp> {
-  using __base = __atomic_ref_base<_Tp>;
+  using __base [[__gnu__::__nodebug__]] = __atomic_ref_base<_Tp>;
 
   using difference_type = __base::value_type;
 
@@ -305,7 +305,7 @@ struct atomic_ref<_Tp> : public __atomic_ref_base<_Tp> {
 template <class _Tp>
   requires std::floating_point<_Tp>
 struct atomic_ref<_Tp> : public __atomic_ref_base<_Tp> {
-  using __base = __atomic_ref_base<_Tp>;
+  using __base [[__gnu__::__nodebug__]] = __atomic_ref_base<_Tp>;
 
   using difference_type = __base::value_type;
 
@@ -344,7 +344,7 @@ struct atomic_ref<_Tp> : public __atomic_ref_base<_Tp> {
 
 template <class _Tp>
 struct atomic_ref<_Tp*> : public __atomic_ref_base<_Tp*> {
-  using __base = __atomic_ref_base<_Tp*>;
+  using __base [[__gnu__::__nodebug__]] = __atomic_ref_base<_Tp*>;
 
   using difference_type = ptrdiff_t;
 
diff --git a/libcxx/include/__atomic/atomic_sync.h b/libcxx/include/__atomic/atomic_sync.h
index a699b60d131844..73dd3ba5c5a619 100644
--- a/libcxx/include/__atomic/atomic_sync.h
+++ b/libcxx/include/__atomic/atomic_sync.h
@@ -82,7 +82,7 @@ struct __atomic_wait_backoff_impl {
   _Poll __poll_;
   memory_order __order_;
 
-  using __waitable_traits = __atomic_waitable_traits<__decay_t<_AtomicWaitable> >;
+  using __waitable_traits [[__gnu__::__nodebug__]] = __atomic_waitable_traits<__decay_t<_AtomicWaitable> >;
 
   _LIBCPP_AVAILABILITY_SYNC
   _LIBCPP_HIDE_FROM_ABI bool
diff --git a/libcxx/include/__atomic/contention_t.h b/libcxx/include/__atomic/contention_t.h
index 65890f338ce990..11ba5b9a9d64e2 100644
--- a/libcxx/include/__atomic/contention_t.h
+++ b/libcxx/include/__atomic/contention_t.h
@@ -20,12 +20,12 @@
 _LIBCPP_BEGIN_NAMESPACE_STD
 
 #if defined(__linux__) || (defined(_AIX) && !defined(__64BIT__))
-using __cxx_contention_t = int32_t;
+using __cxx_contention_t [[__gnu__::__nodebug__]] = int32_t;
 #else
-using __cxx_contention_t = int64_t;
+using __cxx_contention_t [[__gnu__::__nodebug__]] = int64_t;
 #endif // __linux__ || (_AIX && !__64BIT__)
 
-using __cxx_atomic_contention_t = __cxx_atomic_impl<__cxx_contention_t>;
+using __cxx_atomic_contention_t [[__gnu__::__nodebug__]] = __cxx_atomic_impl<__cxx_contention_t>;
 
 _LIBCPP_END_NAMESPACE_STD
 
diff --git a/libcxx/include/__atomic/memory_order.h b/libcxx/include/__atomic/memory_order.h
index 294121d1c4e7f4..5d51e1b15b3a75 100644
--- a/libcxx/include/__atomic/memory_order.h
+++ b/libcxx/include/__atomic/memory_order.h
@@ -24,7 +24,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD
 // to pin the underlying type in C++20.
 enum __legacy_memory_order { __mo_relaxed, __mo_consume, __mo_acquire, __mo_release, __mo_acq_rel, __mo_seq_cst };
 
-using __memory_order_underlying_t = underlying_type<__legacy_memory_order>::type;
+using __memory_order_underlying_t [[__gnu__::__nodebug__]] = underlying_type<__legacy_memory_order>::type;
 
 #if _LIBCPP_STD_VER >= 20
 
diff --git a/libcxx/include/__bit_reference b/libcxx/include/__bit_reference
index 22637d43974123..10fce5cc689176 100644
--- a/libcxx/include/__bit_reference
+++ b/libcxx/include/__bit_reference
@@ -45,8 +45,8 @@ struct __has_storage_type {
 
 template <class _Cp, bool = __has_storage_type<_Cp>::value>
 class __bit_reference {
-  using __storage_type    = typename _Cp::__storage_type;
-  using __storage_pointer = typename _Cp::__storage_pointer;
+  using __storage_type [[__gnu__::__nodebug__]]    = typename _Cp::__storage_type;
+  using __storage_pointer [[__gnu__::__nodebug__]] = typename _Cp::__storage_pointer;
 
   __storage_pointer __seg_;
   __storage_type __mask_;
@@ -57,7 +57,7 @@ class __bit_reference {
   friend class __bit_iterator<_Cp, false>;
 
 public:
-  using __container = typename _Cp::__self;
+  using __container [[__gnu__::__nodebug__]] = typename _Cp::__self;
 
   _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __bit_reference(const __bit_reference&) = default;
 
@@ -137,8 +137,8 @@ inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void swap(bool& __x,
 
 template <class _Cp>
 class __bit_const_reference {
-  using __storage_type    = typename _Cp::__storage_type;
-  using __storage_pointer = typename _Cp::__const_storage_pointer;
+  using __storage_type [[__gnu__::__nodebug__]]    = typename _Cp::__storage_type;
+  using __storage_pointer [[__gnu__::__nodebug__]] = typename _Cp::__const_storage_pointer;
 
   __storage_pointer __seg_;
   __storage_type __mask_;
@@ -147,7 +147,7 @@ class __bit_const_reference {
   friend class __bit_iterator<_Cp, true>;
 
 public:
-  using __container = typename _Cp::__self;
+  using __container [[__gnu__::__nodebug__]] = typename _Cp::__self;
 
   _LIBCPP_HIDE_FROM_ABI __bit_const_reference(const __bit_const_reference&) = default;
   __bit_const_reference& operator=(const __bit_const_reference&)            = delete;
@@ -589,10 +589,10 @@ inline _LIBCPP_HIDE_FROM_ABI __bit_iterator<_Cr, false> swap_ranges(
 
 template <class _Cp>
 struct __bit_array {
-  using difference_type   = typename _Cp::difference_type;
-  using __storage_type    = typename _Cp::__storage_type;
-  using __storage_pointer = typename _Cp::__storage_pointer;
-  using iterator          = typename _Cp::iterator;
+  using difference_type [[__gnu__::__nodebug__]]   = typename _Cp::difference_type;
+  using __storage_type [[__gnu__::__nodebug__]]    = typename _Cp::__storage_type;
+  using __storage_pointer [[__gnu__::__nodebug__]] = typename _Cp::__storage_pointer;
+  using iterator [[__gnu__::__nodebug__]]          = typename _Cp::iterator;
 
   static const unsigned __bits_per_word = _Cp::__bits_per_word;
   static const unsigned _Np             = 4;
@@ -792,8 +792,8 @@ public:
   using iterator_category = random_access_iterator_tag;
 
 private:
-  using __storage_type = typename _Cp::__storage_type;
-  using __storage_pointer =
+  using __storage_type [[__gnu__::__nodebug__]] = typename _Cp::__storage_type;
+  using __storage_pointer [[__gnu__::__nodebug__]] =
       __conditional_t<_IsConst, typename _Cp::__const_storage_pointer, typename _Cp::__storage_pointer>;
 
   static const unsigned __bits_per_word = _Cp::__bits_per_word;
di...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/118710


More information about the libcxx-commits mailing list