apache / arrow

Apache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing
https://arrow.apache.org/
Apache License 2.0
14.35k stars 3.49k forks source link

[C++][Parquet] Build fails on illumos #41338

Open ptribble opened 5 months ago

ptribble commented 5 months ago

Describe the bug, including details regarding any error messages, version, and platform.

Attempting to build Arrow 16.0.0 (cpp) with -DARROW_PARQUET=ON on illumos (Solaris derivative) fails with:

In file included from /export/home/ptribble/ud/apache-arrow-16.0.0-64bit/cpp/src/parquet/stream_reader.h:31,
                 from /export/home/ptribble/ud/apache-arrow-16.0.0-64bit/cpp/src/parquet/stream_reader.cc:18:
/export/home/ptribble/ud/apache-arrow-16.0.0-64bit/cpp/src/parquet/stream_writer.h:122:17: error: 'parquet::StreamWriter& parquet::StreamWriter::operator<<(char)' cannot be overloaded with 'parquet::StreamWriter& parquet::StreamWriter::operator<<(int8_t)'
  122 |   StreamWriter& operator<<(char v);
      |                 ^~~~~~~~
/export/home/ptribble/ud/apache-arrow-16.0.0-64bit/cpp/src/parquet/stream_writer.h:98:17: note: previous declaration 'parquet::StreamWriter& parquet::StreamWriter::operator<<(int8_t)'
   98 |   StreamWriter& operator<<(int8_t v);
      |                 ^~~~~~~~
In file included from /export/home/ptribble/ud/apache-arrow-16.0.0-64bit/cpp/src/parquet/stream_reader.cc:18:
/export/home/ptribble/ud/apache-arrow-16.0.0-64bit/cpp/src/parquet/stream_reader.h:116:17: error: 'parquet::StreamReader& parquet::StreamReader::operator>>(char&)' cannot be overloaded with 'parquet::StreamReader& parquet::StreamReader::operator>>(int8_t&)'
  116 |   StreamReader& operator>>(char& v);
      |                 ^~~~~~~~
/export/home/ptribble/ud/apache-arrow-16.0.0-64bit/cpp/src/parquet/stream_reader.h:92:17: note: previous declaration 'parquet::StreamReader& parquet::StreamReader::operator>>(int8_t&)'
   92 |   StreamReader& operator>>(int8_t& v);
      |                 ^~~~~~~~
/export/home/ptribble/ud/apache-arrow-16.0.0-64bit/cpp/src/parquet/stream_reader.h:167:17: error: 'parquet::StreamReader& parquet::StreamReader::operator>>(parquet::StreamReader::optional<char>&)' cannot be overloaded with 'parquet::StreamReader& parquet::StreamReader::operator>>(parquet::StreamReader::optional<char>&)'
  167 |   StreamReader& operator>>(optional<char>& v);
      |                 ^~~~~~~~
/export/home/ptribble/ud/apache-arrow-16.0.0-64bit/cpp/src/parquet/stream_reader.h:143:17: note: previous declaration 'parquet::StreamReader& parquet::StreamReader::operator>>(parquet::StreamReader::optional<char>&)'
  143 |   StreamReader& operator>>(optional<int8_t>& v);
      |                 ^~~~~~~~
/export/home/ptribble/ud/apache-arrow-16.0.0-64bit/cpp/src/parquet/stream_reader.cc:159:15: error: redefinition of 'parquet::StreamReader& parquet::StreamReader::operator>>(char&)'
  159 | StreamReader& StreamReader::operator>>(char& v) {
      |               ^~~~~~~~~~~~
/export/home/ptribble/ud/apache-arrow-16.0.0-64bit/cpp/src/parquet/stream_reader.cc:83:15: note: 'parquet::StreamReader& parquet::StreamReader::operator>>(int8_t&)' previously defined here
   83 | StreamReader& StreamReader::operator>>(int8_t& v) {
      |               ^~~~~~~~~~~~
/export/home/ptribble/ud/apache-arrow-16.0.0-64bit/cpp/src/parquet/stream_reader.cc:255:15: error: redefinition of 'parquet::StreamReader& parquet::StreamReader::operator>>(parquet::StreamReader::optional<char>&)'
  255 | StreamReader& StreamReader::operator>>(optional<char>& v) {
      |               ^~~~~~~~~~~~
/export/home/ptribble/ud/apache-arrow-16.0.0-64bit/cpp/src/parquet/stream_reader.cc:183:15: note: 'parquet::StreamReader& parquet::StreamReader::operator>>(parquet::StreamReader::optional<char>&)' previously defined here
  183 | StreamReader& StreamReader::operator>>(optional<int8_t>& v) {
      |               ^~~~~~~~~~~~

In some way this is expected - int8_t and char are the same type:

/usr/include/sys/int_types.h:
typedef char                       int8_t;

Deleting one or the other (and in StreamWriter) will allow the build to complete, but that doesn't seem quite right.

Is there a proper way to resolve the redefinition?

Component(s)

C++

wgtmac commented 5 months ago

On my macOS this is defined as typedef signed char int8_t; and perhaps by default char is unsigned char so it does not fail.

pitrou commented 1 week ago

@ptribble Can you perhaps open a PR for this?