The branch main has been updated by jhb:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=c36de97088a2b9141cdaf2fae2a7f41bf820ffa0

commit c36de97088a2b9141cdaf2fae2a7f41bf820ffa0
Author:     John Baldwin <j...@freebsd.org>
AuthorDate: 2022-11-24 00:10:05 +0000
Commit:     John Baldwin <j...@freebsd.org>
CommitDate: 2022-11-24 00:10:05 +0000

    <type_traits>: Avoid instantiating a pointer type in std::decay<>.
    
    GCC expands the pointer type in this conditional expression even for
    template types _Up that are not arrays.  This raises an error when
    std::decay<> is used with reference types (as is done in LLVM's
    sources).  Using add_pointer<> causes GCC to only instantiate a
    pointer type for array types.
    
    A similar change to this commit (albeit reworked due to upstream
    changes) has been merged to libc++ in commit
    26068c6e60324ed866a1ca2afb5cb5eb0aaf015b.
    
    In file included from 
/usr/obj/usr/src/amd64.amd64/tmp/usr/include/c++/v1/__compare/ordering.h:13,
                     from 
/usr/obj/usr/src/amd64.amd64/tmp/usr/include/c++/v1/__compare/common_comparison_category.h:12,
                     from 
/usr/obj/usr/src/amd64.amd64/tmp/usr/include/c++/v1/tuple:168,
                     from 
/usr/src/contrib/llvm-project/llvm/include/llvm/ADT/DenseMapInfo.h:20,
                     from 
/usr/src/contrib/llvm-project/llvm/include/llvm/ADT/DenseMap.h:17,
                     from 
/usr/src/contrib/llvm-project/llvm/lib/Transforms/Scalar/GVNHoist.cpp:36:
    /usr/obj/usr/src/amd64.amd64/tmp/usr/include/c++/v1/type_traits: In 
instantiation of 'struct std::__1::__decay<llvm::CHIArg&, true>':
    /usr/obj/usr/src/amd64.amd64/tmp/usr/include/c++/v1/type_traits:1591:89:   
required from 'struct std::__1::decay<llvm::CHIArg&&>'
    
/usr/obj/usr/src/amd64.amd64/tmp/usr/include/c++/v1/__utility/pair.h:132:16:   
required by substitution of 'template<class _Tuple, typename 
std::__1::enable_if<typename 
std::__1::conditional<(std::__1::__tuple_like_with_size<_Tuple, 2, typename 
std::__1::__uncvref<_Tp>::type>::value && (! std::__1::is_same<typename 
std::__1::decay<_Tp>::type, std::__1::pair<llvm::BasicBlock*, 
llvm::SmallVector<llvm::CHIArg, 2> > >::value)), 
std::__1::pair<llvm::BasicBlock*, llvm::SmallVector<llvm::CHIArg, 2> 
>::_CheckTupleLikeConstructor, 
std::__1::__check_tuple_constructor_fail>::type::__enable_implicit<_Tuple>(), 
void>::type* <anonymous> > constexpr std::__1::pair<llvm::BasicBlock*, 
llvm::SmallVector<llvm::CHIArg, 2> >::pair(_Tuple&&) [with _Tuple = 
llvm::CHIArg&&; typename std::__1::enable_if<typename 
std::__1::conditional<(std::__1::__tuple_like_with_size<_Tuple, 2, typename 
std::__1::__uncvref<_Tp>::type>::value && (! std::__1::is_same<typename 
std::__1::decay<_Tp>::type, std::__1::pair<llvm
 ::BasicBlock*, llvm::SmallVector<llvm::CHIArg, 2> > >::value)), 
std::__1::pair<llvm::BasicBlock*, llvm::SmallVector<llvm::CHIArg, 2> 
>::_CheckTupleLikeConstructor, 
std::__1::__check_tuple_constructor_fail>::type::__enable_implicit<_Tuple>(), 
void>::type* <anonymous> = <missing>]'
    
/usr/src/contrib/llvm-project/llvm/lib/Transforms/Scalar/GVNHoist.cpp:892:51:   
required from here
    /usr/obj/usr/src/amd64.amd64/tmp/usr/include/c++/v1/type_traits:1582:30: 
error: forming pointer to reference type 
'std::__1::remove_extent<llvm::CHIArg&>::type' {aka 'llvm::CHIArg&'}
     1582 |                      >::type type;
          |                              ^~~~
    
    Reviewed by:    dim
    Differential Revision:  https://reviews.freebsd.org/D36898
---
 contrib/llvm-project/libcxx/include/type_traits | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/contrib/llvm-project/libcxx/include/type_traits 
b/contrib/llvm-project/libcxx/include/type_traits
index 3391999675a0..daf031e475f7 100644
--- a/contrib/llvm-project/libcxx/include/type_traits
+++ b/contrib/llvm-project/libcxx/include/type_traits
@@ -1572,7 +1572,7 @@ public:
     typedef _LIBCPP_NODEBUG typename conditional
                      <
                          is_array<_Up>::value,
-                         typename remove_extent<_Up>::type*,
+                         typename add_pointer<typename 
remove_extent<_Up>::type>::type,
                          typename conditional
                          <
                               is_function<_Up>::value,

Reply via email to