Ross Wolfson created ARROW-8534:
-----------------------------------
Summary: [C++][CSV] Issue building CSV component under GCC 6.1.0
Key: ARROW-8534
URL: https://issues.apache.org/jira/browse/ARROW-8534
Project: Apache Arrow
Issue Type: Bug
Components: C++
Affects Versions: 0.17.0
Environment: Centos 7 x86_64
Reporter: Ross Wolfson
Hi,
In the current version (0.17.0), it seems that CSV reader.cc fails to compile
when using GCC 6.1.0. This builds when using older or newer GCC versions (we
tested with 4.8.5, 8.2.0 and 9.3.0).
{{[root@1d4fcfc2580e arrow_src]# /ourgcc/gcc-6.1.0/bin/g++ -c
cpp/src/arrow/csv/reader.cc -I cpp/src}}
{{cpp/src/arrow/csv/reader.cc: In constructor
'arrow::csv::SerialBlockReader::SerialBlockReader(std::unique_ptr<arrow::Chunker>,
arrow::Iterator<std::shared_ptr<arrow::Buffer> >,
std::shared_ptr<arrow::Buffer>)':}}
{{cpp/src/arrow/csv/reader.cc:178:22: error: use of deleted function
'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with
_Tp = arrow::Chunker; _Dp = std::default_delete<arrow::Chunker>]'}}
{{ using BlockReader::BlockReader;}}
{{ ^~~~~~~~~~~}}
{{In file included from /ourgcc/gcc-6.1.0/include/c++/6.1.0/memory:81:0,}}
{{ from cpp/src/arrow/csv/reader.h:20,}}
{{ from cpp/src/arrow/csv/reader.cc:18:}}
{{/ourgcc/gcc-6.1.0/include/c++/6.1.0/bits/unique_ptr.h:356:7: note: declared
here}}
{{ unique_ptr(const unique_ptr&) = delete;}}
{{ ^~~~~~~~~~}}
{{cpp/src/arrow/csv/reader.cc:178:22: error: use of deleted function
'arrow::Iterator<std::shared_ptr<arrow::Buffer> >::Iterator(const
arrow::Iterator<std::shared_ptr<arrow::Buffer> >&)'}}
{{ using BlockReader::BlockReader;}}
{{ ^~~~~~~~~~~}}
{{In file included from cpp/src/arrow/csv/reader.cc:43:0:}}
{{cpp/src/arrow/util/iterator.h:63:7: note:
'arrow::Iterator<std::shared_ptr<arrow::Buffer> >::Iterator(const
arrow::Iterator<std::shared_ptr<arrow::Buffer> >&)' is implicitly deleted
because the default definition would be ill-formed:}}
{{ class Iterator : public util::EqualityComparable<Iterator<T>> {}}
{{ ^~~~~~~~}}
{{cpp/src/arrow/util/iterator.h:63:7: error: use of deleted function
'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with
_Tp = void; _Dp = void (*)(void*)]'}}
{{In file included from /ourgcc/gcc-6.1.0/include/c++/6.1.0/memory:81:0,}}
{{ from cpp/src/arrow/csv/reader.h:20,}}
{{ from cpp/src/arrow/csv/reader.cc:18:}}
{{/ourgcc/gcc-6.1.0/include/c++/6.1.0/bits/unique_ptr.h:356:7: note: declared
here}}
{{ unique_ptr(const unique_ptr&) = delete;}}
{{ ^~~~~~~~~~}}
{{cpp/src/arrow/csv/reader.cc: In member function 'virtual
arrow::Result<std::shared_ptr<arrow::Table> >
arrow::csv::SerialTableReader::Read()':}}
{{cpp/src/arrow/csv/reader.cc:750:88: note: synthesized method
'arrow::csv::SerialBlockReader::SerialBlockReader(std::unique_ptr<arrow::Chunker>,
arrow::Iterator<std::shared_ptr<arrow::Buffer> >,
std::shared_ptr<arrow::Buffer>)' first required here}}
{{ std::move(buffer_iterator_), std::move(first_buffer));}}
{{ ^}}
{{cpp/src/arrow/csv/reader.cc: In constructor
'arrow::csv::ThreadedBlockReader::ThreadedBlockReader(std::unique_ptr<arrow::Chunker>,
arrow::Iterator<std::shared_ptr<arrow::Buffer> >,
std::shared_ptr<arrow::Buffer>)':}}
{{cpp/src/arrow/csv/reader.cc:221:22: error: use of deleted function
'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with
_Tp = arrow::Chunker; _Dp = std::default_delete<arrow::Chunker>]'}}
{{ using BlockReader::BlockReader;}}
{{ ^~~~~~~~~~~}}
{{In file included from /ourgcc/gcc-6.1.0/include/c++/6.1.0/memory:81:0,}}
{{ from cpp/src/arrow/csv/reader.h:20,}}
{{ from cpp/src/arrow/csv/reader.cc:18:}}
{{/ourgcc/gcc-6.1.0/include/c++/6.1.0/bits/unique_ptr.h:356:7: note: declared
here}}
{{ unique_ptr(const unique_ptr&) = delete;}}
{{ ^~~~~~~~~~}}
{{cpp/src/arrow/csv/reader.cc:221:22: error: use of deleted function
'arrow::Iterator<std::shared_ptr<arrow::Buffer> >::Iterator(const
arrow::Iterator<std::shared_ptr<arrow::Buffer> >&)'}}
{{ using BlockReader::BlockReader;}}
{{ ^~~~~~~~~~~}}
{{cpp/src/arrow/csv/reader.cc: In member function 'virtual
arrow::Result<std::shared_ptr<arrow::Table> >
arrow::csv::ThreadedTableReader::Read()':}}
{{cpp/src/arrow/csv/reader.cc:815:61: note: synthesized method
'arrow::csv::ThreadedBlockReader::ThreadedBlockReader(std::unique_ptr<arrow::Chunker>,
arrow::Iterator<std::shared_ptr<arrow::Buffer> >,
std::shared_ptr<arrow::Buffer>)' first required here}}
{{ std::move(first_buffer));}}
{{ ^}}
My colleague found a workaround that avoids the build error, however, we are
not clear if this is the "best" fix.
{{--- a/cpp/src/arrow/csv/reader.cc}}
{{+++ b/cpp/src/arrow/csv/reader.cc}}
{{@@ -175,7 +175,12 @@ class BlockReader {}}
{{ // using CSVBlock::consume_bytes.}}
{{ class SerialBlockReader : public BlockReader {}}
{{ public:}}
{{- using BlockReader::BlockReader;}}
{{+ SerialBlockReader(std::unique_ptr<Chunker> chunker,}}
{{+ Iterator<std::shared_ptr<Buffer>> buffer_iterator,}}
{{+ std::shared_ptr<Buffer> first_buffer)}}
{{+ : BlockReader(std::move(chunker),}}
{{+ std::move(buffer_iterator),}}
{{+ std::move(first_buffer)) {}}}{{Result<arrow::util::optional<CSVBlock>>
Next() {}}
{{ if (buffer_ == nullptr) {}}
{{@@ -218,7 +223,12 @@ class SerialBlockReader : public BlockReader {}}
{{ // An object that reads delimited CSV blocks for threaded use.}}
{{ class ThreadedBlockReader : public BlockReader {}}
{{ public:}}
{{- using BlockReader::BlockReader;}}
{{+ ThreadedBlockReader(std::unique_ptr<Chunker> chunker,}}
{{+ Iterator<std::shared_ptr<Buffer>> buffer_iterator,}}
{{+ std::shared_ptr<Buffer> first_buffer)}}
{{+ : BlockReader(std::move(chunker),}}
{{+ std::move(buffer_iterator),}}
{{+ std::move(first_buffer)) {}}}{{Result<arrow::util::optional<CSVBlock>>
Next() {}}
{{ if (buffer_ == nullptr) {}}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)