sberg added a comment.

Since this commit (plus its follow-up 
https://github.com/llvm/llvm-project/commit/ce861ec782ae3f41807b61e855512aaccf3c2149
 "[Clang][Sema] Add a temporary workaround in SemaConcept.cpp", to avoid 
`clang/lib/AST/ExprConstant.cpp:15332: bool 
clang::Expr::EvaluateAsConstantExpr(EvalResult &, const ASTContext &, 
ConstantExprKind) const: Assertion `!isValueDependent() && "Expression 
evaluator can't be called on a dependent expression."' failed` in 
`-DLLVM_ENABLE_ASSERTIONS=ON` builds):

  $ cat test.cc
  #include <memory>
  #include <utility>
  #include <vector>
  std::vector<std::unique_ptr<int>> v1;
  std::vector<std::unique_ptr<int>> v2;
  void f() {
    v2.insert(v2.end(), std::make_move_iterator(v1.begin()), 
std::make_move_iterator(v1.end()));
  }

  $ clang++ -std=c++20 -fsyntax-only test.cc
  In file included from test.cc:1:
  In file included from 
/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/memory:66:
  In file included from 
/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/stl_tempbuf.h:61:
  
/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/stl_construct.h:115:4:
 error: no matching function for call to 'construct_at'
            std::construct_at(__p, std::forward<_Args>(__args)...);
            ^~~~~~~~~~~~~~~~~
  
/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/stl_uninitialized.h:120:11:
 note: in instantiation of function template specialization 
'std::_Construct<std::unique_ptr<int>, std::unique_ptr<int> &>' requested here
              std::_Construct(std::__addressof(*__cur), *__first);
                   ^
  
/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/stl_uninitialized.h:371:14:
 note: in instantiation of function template specialization 
'std::__do_uninit_copy<std::move_iterator<std::unique_ptr<int> *>, 
std::unique_ptr<int> *>' requested here
          return std::__do_uninit_copy(__first, __last, __result);
                      ^
  
/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/stl_uninitialized.h:384:19:
 note: in instantiation of function template specialization 
'std::__uninitialized_copy_a<std::move_iterator<std::unique_ptr<int> *>, 
std::unique_ptr<int> *, std::unique_ptr<int>>' requested here
        return std::__uninitialized_copy_a(_GLIBCXX_MAKE_MOVE_ITERATOR(__first),
                    ^
  
/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/vector.tcc:766:12:
 note: in instantiation of function template specialization 
'std::__uninitialized_move_a<std::unique_ptr<int> *, std::unique_ptr<int> *, 
std::allocator<std::unique_ptr<int>>>' requested here
                      std::__uninitialized_move_a(this->_M_impl._M_finish - __n,
                           ^
  
/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/stl_vector.h:1481:4:
 note: in instantiation of function template specialization 
'std::vector<std::unique_ptr<int>>::_M_range_insert<std::move_iterator<__gnu_cxx::__normal_iterator<std::unique_ptr<int>
 *, std::vector<std::unique_ptr<int>>>>>' requested here
            _M_range_insert(begin() + __offset, __first, __last,
            ^
  test.cc:7:6: note: in instantiation of function template specialization 
'std::vector<std::unique_ptr<int>>::insert<std::move_iterator<__gnu_cxx::__normal_iterator<std::unique_ptr<int>
 *, std::vector<std::unique_ptr<int>>>>, void>' requested here
    v2.insert(v2.end(), std::make_move_iterator(v1.begin()), 
std::make_move_iterator(v1.end()));
       ^
  
/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/stl_construct.h:94:5:
 note: candidate template ignored: substitution failure [with _Tp = 
std::unique_ptr<int>, _Args = <std::unique_ptr<int> &>]: call to deleted 
constructor of 'std::unique_ptr<int>'
      construct_at(_Tp* __location, _Args&&... __args)
      ^
  
/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/stl_construct.h:119:25:
 error: call to deleted constructor of 'std::unique_ptr<int>'
        ::new((void*)__p) _Tp(std::forward<_Args>(__args)...);
                          ^   ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/unique_ptr.h:522:7:
 note: 'unique_ptr' has been explicitly marked deleted here
        unique_ptr(const unique_ptr&) = delete;
        ^
  In file included from test.cc:1:
  In file included from 
/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/memory:69:
  
/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/stl_uninitialized.h:120:6:
 error: no matching function for call to '_Construct'
              std::_Construct(std::__addressof(*__cur), *__first);
              ^~~~~~~~~~~~~~~
  
/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/stl_uninitialized.h:371:14:
 note: in instantiation of function template specialization 
'std::__do_uninit_copy<std::move_iterator<__gnu_cxx::__normal_iterator<std::unique_ptr<int>
 *, std::vector<std::unique_ptr<int>>>>, std::unique_ptr<int> *>' requested here
          return std::__do_uninit_copy(__first, __last, __result);
                      ^
  
/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/vector.tcc:781:12:
 note: in instantiation of function template specialization 
'std::__uninitialized_copy_a<std::move_iterator<__gnu_cxx::__normal_iterator<std::unique_ptr<int>
 *, std::vector<std::unique_ptr<int>>>>, std::unique_ptr<int> *, 
std::unique_ptr<int>>' requested here
                      std::__uninitialized_copy_a(__mid, __last,
                           ^
  
/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/stl_vector.h:1481:4:
 note: in instantiation of function template specialization 
'std::vector<std::unique_ptr<int>>::_M_range_insert<std::move_iterator<__gnu_cxx::__normal_iterator<std::unique_ptr<int>
 *, std::vector<std::unique_ptr<int>>>>>' requested here
            _M_range_insert(begin() + __offset, __first, __last,
            ^
  test.cc:7:6: note: in instantiation of function template specialization 
'std::vector<std::unique_ptr<int>>::insert<std::move_iterator<__gnu_cxx::__normal_iterator<std::unique_ptr<int>
 *, std::vector<std::unique_ptr<int>>>>, void>' requested here
    v2.insert(v2.end(), std::make_move_iterator(v1.begin()), 
std::make_move_iterator(v1.end()));
       ^
  
/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/stl_construct.h:109:5:
 note: candidate template ignored: substitution failure [with _Tp = 
std::unique_ptr<int>, _Args = <std::unique_ptr<int> &>]
      _Construct(_Tp* __p, _Args&&... __args)
      ^
  In file included from test.cc:1:
  In file included from 
/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/memory:69:
  
/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/stl_uninitialized.h:90:21:
 error: static assertion failed due to requirement 
'is_constructible<std::unique_ptr<int, std::default_delete<int>>, 
std::unique_ptr<int, std::default_delete<int>> &>::value': result type must be 
constructible from input type
        static_assert(is_constructible<_ValueType, _Tp>::value,
                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/stl_uninitialized.h:182:4:
 note: in instantiation of function template specialization 
'std::__check_constructible<std::unique_ptr<int>, std::unique_ptr<int> &>' 
requested here
          = _GLIBCXX_USE_ASSIGN_FOR_INIT(_ValueType2, _From);
            ^
  
/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/stl_uninitialized.h:101:13:
 note: expanded from macro '_GLIBCXX_USE_ASSIGN_FOR_INIT'
      && std::__check_constructible<T, U>()
              ^
  
/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/stl_uninitialized.h:373:19:
 note: in instantiation of function template specialization 
'std::uninitialized_copy<std::move_iterator<std::unique_ptr<int> *>, 
std::unique_ptr<int> *>' requested here
        return std::uninitialized_copy(__first, __last, __result);
                    ^
  4 errors generated.

(When building against `libstdc++-devel-13.1.1-1.fc38.x86_64` at least, but 
also when building against a GCC trunk libstdc++.  And compilation succeeds 
with both GCC and older Clang, so it looks like an issue with this commit 
rather than with the used libstdc++.)


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D146178/new/

https://reviews.llvm.org/D146178

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to