[all-commits] [llvm/llvm-project] 73e8e1: [libc++][NFC] Qualify declval

philnik777 via All-commits all-commits at lists.llvm.org
Thu Jan 12 09:28:55 PST 2023


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 73e8e1ba8daddae1e0f5a013025596e6ff2a0101
      https://github.com/llvm/llvm-project/commit/73e8e1ba8daddae1e0f5a013025596e6ff2a0101
  Author: Nikolas Klauser <nikolasklauser at berlin.de>
  Date:   2023-01-12 (Thu, 12 Jan 2023)

  Changed paths:
    M libcxx/include/__algorithm/comp_ref_type.h
    M libcxx/include/__algorithm/iter_swap.h
    M libcxx/include/__compare/compare_three_way_result.h
    M libcxx/include/__compare/synth_three_way.h
    M libcxx/include/__concepts/common_with.h
    M libcxx/include/__concepts/convertible_to.h
    M libcxx/include/__format/format_arg.h
    M libcxx/include/__functional/invoke.h
    M libcxx/include/__functional/reference_wrapper.h
    M libcxx/include/__functional/weak_result_type.h
    M libcxx/include/__iterator/advance.h
    M libcxx/include/__iterator/common_iterator.h
    M libcxx/include/__iterator/incrementable_traits.h
    M libcxx/include/__iterator/iter_move.h
    M libcxx/include/__iterator/iter_swap.h
    M libcxx/include/__iterator/iterator_traits.h
    M libcxx/include/__iterator/move_iterator.h
    M libcxx/include/__iterator/reverse_iterator.h
    M libcxx/include/__memory/allocator_traits.h
    M libcxx/include/__memory/construct_at.h
    M libcxx/include/__memory/pointer_traits.h
    M libcxx/include/__memory/ranges_construct_at.h
    M libcxx/include/__memory/shared_ptr.h
    M libcxx/include/__random/is_valid.h
    M libcxx/include/__ranges/access.h
    M libcxx/include/__ranges/all.h
    M libcxx/include/__ranges/concepts.h
    M libcxx/include/__ranges/ref_view.h
    M libcxx/include/__ranges/size.h
    M libcxx/include/__ranges/zip_view.h
    M libcxx/include/__type_traits/common_reference.h
    M libcxx/include/__type_traits/common_type.h
    M libcxx/include/__type_traits/is_allocator.h
    M libcxx/include/__type_traits/is_convertible.h
    M libcxx/include/__type_traits/is_destructible.h
    M libcxx/include/__type_traits/is_nothrow_constructible.h
    M libcxx/include/__type_traits/is_nothrow_convertible.h
    M libcxx/include/__type_traits/is_nothrow_destructible.h
    M libcxx/include/__type_traits/is_swappable.h
    M libcxx/include/__type_traits/promote.h
    M libcxx/include/experimental/propagate_const
    M libcxx/include/istream
    M libcxx/include/optional
    M libcxx/include/ostream
    M libcxx/include/scoped_allocator
    M libcxx/include/variant
    M libcxx/test/tools/clang_tidy_checks/CMakeLists.txt
    M libcxx/test/tools/clang_tidy_checks/libcpp_module.cpp
    A libcxx/test/tools/clang_tidy_checks/qualify_declval.cpp
    A libcxx/test/tools/clang_tidy_checks/qualify_declval.hpp

  Log Message:
  -----------
  [libc++][NFC] Qualify declval

While it's not necessary to qualify calls to `declval` it makes error messages very crypric if the declaration isn't reachable anymore

For example:
```
    /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__chrono/duration.h:53:66: error: no type named 'type' in 'std::common_type<long, long>'
        typedef chrono::duration<typename common_type<_Rep1, _Rep2>::type,
                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
    /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__type_traits/common_type.h:107:14: note: in instantiation of template class 'std::common_type<std::chrono::duration<long, std::ratio<3600, 1>>, std::chrono::duration<long, std::ratio<3600, 1>>>' requested here
        : public common_type<_Tp, _Tp> {};
                 ^
    /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__chrono/duration.h:279:58: note: in instantiation of template class 'std::common_type<std::chrono::duration<long, std::ratio<3600, 1>>>' requested here
        _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR typename common_type<duration>::type operator+() const {return typename common_type<duration>::type(*this);}
                                                             ^
    /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__chrono/duration.h:308:54: note: in instantiation of template class 'std::chrono::duration<long, std::ratio<3600, 1>>' requested here
    typedef duration<     int, ratio_multiply<ratio<24>, hours::period>>         days;
                                                         ^
    /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__chrono/duration.h:280:81: error: no type named 'type' in 'std::common_type<std::chrono::duration<long, std::ratio<3600, 1>>>'
        _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR typename common_type<duration>::type operator-() const {return typename common_type<duration>::type(-__rep_);}
                                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
    /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__chrono/duration.h:308:54: note: in instantiation of template class 'std::chrono::duration<long, std::ratio<3600, 1>>' requested here
    typedef duration<     int, ratio_multiply<ratio<24>, hours::period>>         days;
                                                         ^
    /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__chrono/duration.h:53:66: error: no type named 'type' in 'std::common_type<int, int>'
        typedef chrono::duration<typename common_type<_Rep1, _Rep2>::type,
                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
    /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__type_traits/common_type.h:107:14: note: in instantiation of template class 'std::common_type<std::chrono::duration<int, std::ratio<86400, 1>>, std::chrono::duration<int, std::ratio<86400, 1>>>' requested here
        : public common_type<_Tp, _Tp> {};
                 ^
    /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__chrono/duration.h:279:58: note: in instantiation of template class 'std::common_type<std::chrono::duration<int, std::ratio<86400, 1>>>' requested here
        _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR typename common_type<duration>::type operator+() const {return typename common_type<duration>::type(*this);}
                                                             ^
    /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__chrono/duration.h:309:55: note: in instantiation of template class 'std::chrono::duration<int, std::ratio<86400, 1>>' requested here
    typedef duration<     int, ratio_multiply<ratio<7>,   days::period>>         weeks;
                                                          ^
    19 similar errors omitted
```
changes with qualification added to:
```
    While building module 'std' imported from /home/nikolask/llvm-projects/libcxx/libcxx/test/std/utilities/meta/meta.trans/meta.trans.other/common_type.pass.cpp:13:
    In file included from <module-includes>:17:
    In file included from /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/math.h:309:
    In file included from /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/limits:107:
    In file included from /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/type_traits:432:
    In file included from /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__type_traits/common_reference.h:13:
    /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__type_traits/common_type.h:28:43: error: declaration of 'declval' must be imported from module 'std.utility.__utility.declval' before it is required
    using __cond_type = decltype(false ? std::declval<_Tp>() : std::declval<_Up>());
                                              ^
    /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__utility/declval.h:30:34: note: declaration here is not visible
    decltype(std::__declval<_Tp>(0)) declval() _NOEXCEPT;
                                     ^
    /home/nikolask/llvm-projects/libcxx/libcxx/test/std/utilities/meta/meta.trans/meta.trans.other/common_type.pass.cpp:13:10: fatal error: could not build module 'std'
    #include <functional>
     ~~~~~~~~^
    2 errors generated.
```

Reviewed By: ldionne, Mordante, #libc

Spies: libcxx-commits

Differential Revision: https://reviews.llvm.org/D130854




More information about the All-commits mailing list