[
https://issues.apache.org/jira/browse/ARROW-12325?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17326040#comment-17326040
]
Mauricio 'Pachá' Vargas Sepúlveda commented on ARROW-12325:
-----------------------------------------------------------
this is affecting the last nightly build (2021-04-20)
https://github.com/ursacomputing/crossbow/runs/2387780946
https://github.com/ursacomputing/crossbow/runs/2387785393
> [C++] [CI] Nightly gandiva build failing due to failure of compiler to move
> return value
> ----------------------------------------------------------------------------------------
>
> Key: ARROW-12325
> URL: https://issues.apache.org/jira/browse/ARROW-12325
> Project: Apache Arrow
> Issue Type: Improvement
> Components: C++, Continuous Integration
> Reporter: Weston Pace
> Priority: Major
> Labels: pull-request-available
> Time Spent: 2h 10m
> Remaining Estimate: 0h
>
> The nightly gandiva build is failing with the below build error.
>
> According to vague sources
> ([https://channel9.msdn.com/Events/GoingNative/2013/Don-t-Help-the-Compiler#c635161962798701359)]
> and some experimentation ([https://gcc.godbolt.org/z/x138zevhE)] it appears
> that GCC 4.8.2 will not apply a move to a return value if that value is being
> implicitly cast to another type (more specifically, it will not use the
> implicit rvalue constructor of the return type).
>
> This is a pretty common occurrence in Arrow given so many of our returns are
> Result<...> but more specifically it is causing a test with a
> MoveOnlyDataType to fail.
>
> {code:java}
> FAILED: src/arrow/util/CMakeFiles/arrow-utility-test.dir/stl_util_test.cc.o
>
>
>
> /usr/bin/ccache /opt/rh/devtoolset-2/root/usr/bin/c++
> -DARROW_HAVE_RUNTIME_SSE4_2 -DARROW_HAVE_SSE4_2 -DARROW_JEMALLOC
> -DARROW_JEMALLOC_INCLUDE_DIR="" -DARROW_WITH_RE2 -DARROW_WITH_TIMING_TESTS
> -DURI_STATIC_BUILD -Isrc -I/arrow/cpp/src -I/arrow/cpp/src/generated -isystem
> /arrow/cpp/thirdparty/flatbuffers/include -isystem /arrow_boost_dist/include
> -isystem gflags_ep-prefix/src/gflags_ep/include -isystem
> jemalloc_ep-prefix/src -isystem rapidjson_ep/src/rapidjson_ep-install/include
> -isystem xsimd_ep/src/xsimd_ep-install/include -isystem
> re2_ep-install/include -isystem /arrow/cpp/thirdparty/hadoop/include -O3
> -DNDEBUG -Wall -Wno-attributes -msse4.2 -O3 -DNDEBUG -fPIE -pthread
> -std=c++11 -MD -MT
> src/arrow/util/CMakeFiles/arrow-utility-test.dir/stl_util_test.cc.o -MF
> src/arrow/util/CMakeFiles/arrow-utility-test.dir/stl_util_test.cc.o.d -o
> src/arrow/util/CMakeFiles/arrow-utility-test.dir/stl_util_test.cc.o -c
> /arrow/cpp/src/arrow/util/stl_util_test.cc
>
>
>
> In file included from
> /opt/rh/devtoolset-2/root/usr/include/c++/4.8.2/vector:62:0,
>
>
>
> from /arrow/cpp/src/arrow/util/stl_util_test.cc:19:
>
>
>
> /opt/rh/devtoolset-2/root/usr/include/c++/4.8.2/bits/stl_construct.h: In
> instantiation of ‘void std::_Construct(_T1*, _Args&& ...) [with _T1 =
> arrow::MoveOnlyDataType; _Args = {const arrow::MoveOnlyDataType&}]’:
>
>
>
>
> /opt/rh/devtoolset-2/root/usr/include/c++/4.8.2/bits/stl_uninitialized.h:75:53:
> required from ‘static _ForwardIterator
> std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator,
> _InputIterator, _ForwardIterator) [with _InputIterator =
> __gnu_cxx::__normal_iterator<const arrow::MoveOnlyDataType*,
> std::vector<arrow::MoveOnlyDataType, std::allocator<arrow::MoveOnlyDataType>
> > >; _ForwardIterator = arrow::MoveOnlyDataType*; bool _TrivialValueTypes =
> false]’
>
>
>
>
> /opt/rh/devtoolset-2/root/usr/include/c++/4.8.2/bits/stl_uninitialized.h:117:41:
> required from ‘_ForwardIterator std::uninitialized_copy(_InputIterator,
> _InputIterator, _ForwardIterator) [with _InputIterator =
> __gnu_cxx::__normal_iterator<const arrow::MoveOnlyDataType*,
> std::vector<arrow::MoveOnlyDataType, std::allocator<arrow::MoveOnlyDataType>
> > >; _ForwardIterator = arrow::MoveOnlyDataType*]’
>
>
>
>
> /opt/rh/devtoolset-2/root/usr/include/c++/4.8.2/bits/stl_uninitialized.h:258:63:
> required from ‘_ForwardIterator
> std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator,
> std::allocator<_Tp>&) [with _InputIterator =
> __gnu_cxx::__normal_iterator<const arrow::MoveOnlyDataType*,
> std::vector<arrow::MoveOnlyDataType, std::allocator<arrow::MoveOnlyDataType>
> > >; _ForwardIterator = arrow::MoveOnlyDataType*; _Tp =
> arrow::MoveOnlyDataType]’
>
>
>
> /opt/rh/devtoolset-2/root/usr/include/c++/4.8.2/bits/stl_vector.h:316:32:
> required from ‘std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp,
> _Alloc>&) [with _Tp = arrow::MoveOnlyDataType; _Alloc =
> std::allocator<arrow::MoveOnlyDataType>]’
>
>
>
> /arrow/cpp/src/arrow/result.h:446:5: required from ‘void
> arrow::Result<T>::ConstructValue(U&&) [with U =
> std::vector<arrow::MoveOnlyDataType, std::allocator<arrow::MoveOnlyDataType>
> >&; T = std::vector<arrow::MoveOnlyDataType,
> std::allocator<arrow::MoveOnlyDataType> >]’
>
>
>
> /arrow/cpp/src/arrow/result.h:171:42: required from
> ‘arrow::Result<T>::Result(U&&) [with U = std::vector<arrow::MoveOnlyDataType,
> std::allocator<arrow::MoveOnlyDataType> >&; E = void; T =
> std::vector<arrow::MoveOnlyDataType, std::allocator<arrow::MoveOnlyDataType>
> >]’
>
>
>
> /arrow/cpp/src/arrow/util/vector.h:133:10: required from
> ‘arrow::Result<std::vector<_RealType> >
> arrow::internal::UnwrapOrRaise(std::vector<arrow::Result<T> >&&) [with T =
> arrow::MoveOnlyDataType]’
>
>
>
> /arrow/cpp/src/arrow/util/stl_util_test.cc:160:3: required from here
>
>
>
>
>
>
> /opt/rh/devtoolset-2/root/usr/include/c++/4.8.2/bits/stl_construct.h:75:7:
> error: use of deleted function
> ‘arrow::MoveOnlyDataType::MoveOnlyDataType(const arrow::MoveOnlyDataType&)’
>
>
>
> { ::new(static_cast<void*>(__p))
> _T1(std::forward<_Args>(__args)...); }
>
>
>
> ^
>
>
>
> In file included from /arrow/cpp/src/arrow/util/stl_util_test.cc:24:0:
>
>
>
> /arrow/cpp/src/arrow/testing/gtest_util.h:527:3: error: declared here
>
>
>
> MoveOnlyDataType(const MoveOnlyDataType& other) = delete;
>
>
>
> ^
> {code}
> A simple fix is to `std::move` the return value but that opens up a whole can
> of worms. I'm open to alternative solutions.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)