[libcxx-commits] [PATCH] D128146: [libc++] Use uninitialized algorithms for vector

Bogdan Graur via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Fri Jul 22 08:52:32 PDT 2022


bgraur added a comment.

Hi folks,

We have some code which compiles fine with the version previous to this patch and fails after.
The code compiles fine with godbolt: https://gcc.godbolt.org/z/ToPGG5cMb

But fails when built with `clang` containing this revision.
Repro compilation command:

  clang -stdlib=libc++ -std=gnu++17 \
    -c /tmp/test.cc \
    -o /tmp/test.o

Compiler output:

  /tmp/test.cc:5:17: error: assigning to 'float' from incompatible type 'Vx<float, 2>'
    data[Index] = std::forward<LastArg>(last_arg);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  /tmp/test.cc:22:5: note: in instantiation of function template specialization 'SetData<0, 2, float, Vx<float, 2> &>' requested here
      SetData<0, Length, Element>(data_, std::forward<Args>(args)...);
      ^
  [redacted]/include/c++/v1/__memory/allocator.h:165:28: note: in instantiation of function template specialization 'Vx<float, 2>::Vx<Vx<float, 2> &>' requested here
          ::new ((void*)__p) _Up(_VSTD::forward<_Args>(__args)...);
                             ^
  [redacted]/include/c++/v1/__memory/allocator_traits.h:290:13: note: in instantiation of function template specialization 'std::allocator<Vx<float, 2>>::construct<Vx<float, 2>, Vx<float, 2> &>' requested here
          __a.construct(__p, _VSTD::forward<_Args>(__args)...);
              ^
  [redacted]/include/c++/v1/__memory/uninitialized_algorithms.h:536:31: note: in instantiation of function template specialization 'std::allocator_traits<std::allocator<Vx<float, 2>>>::construct<Vx<float, 2>, Vx<float, 2> &, void>' requested here
      allocator_traits<_Alloc>::construct(__alloc, std::__to_address(__first2), *__first1);
                                ^
  [redacted]/include/c++/v1/vector:1012:22: note: in instantiation of function template specialization 'std::__uninitialized_allocator_copy<std::allocator<Vx<float, 2>>, Vx<float, 2> *, Vx<float, 2> *, Vx<float, 2> *>' requested here
    __tx.__pos_ = std::__uninitialized_allocator_copy(__alloc(), __first, __last, __tx.__pos_);
                       ^
  [redacted]/include/c++/v1/vector:1162:9: note: in instantiation of function template specialization 'std::vector<Vx<float, 2>>::__construct_at_end<Vx<float, 2> *>' requested here
          __construct_at_end(__x.__begin_, __x.__end_, __n);
          ^
  /tmp/test.cc:35:16: note: in instantiation of member function 'std::vector<Vx<float, 2>>::vector' requested here
    do_something(vertices);
                 ^
  1 error generated.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D128146



More information about the libcxx-commits mailing list