You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@arrow.apache.org by "Rene Sugar (JIRA)" <ji...@apache.org> on 2017/09/27 01:06:00 UTC

[jira] [Created] (ARROW-1615) CXX flags for development more permissive than Travis CI builds

Rene Sugar created ARROW-1615:
---------------------------------

             Summary: CXX flags for development more permissive than Travis CI builds
                 Key: ARROW-1615
                 URL: https://issues.apache.org/jira/browse/ARROW-1615
             Project: Apache Arrow
          Issue Type: Bug
            Reporter: Rene Sugar
         Attachments: ARROW-TravisCI-CLang-CXXflags.patch


arrow/cpp/cmake_modules/SetupCxxFlags.cmake uses more permissive CXX flags than the Travis CI integration build.

A project that builds without warnings or errors on a development machine can break during a Travis build.

Those using CLang and GNU may not see the same warnings before a check-in.

Travis CI:

-Wall -std=c11 -Wconversion -Wno-sign-conversion -Werror -std=gnu+11

Arrow:

-Wall -std=c++11 -std=gnu++11

Parquet-CPP:

-Wall -std=gnu++11


With only CLang installed, g++ is a wrapper for CLang.

To make it less likely that a Clang build will break when checked-in, CLang has a -Weverything flag from which specific warnings can be disabled and enabled.

http://amattn.com/p/better_apps_clang_weverything_or_wall_is_a_lie.html

https://gcc.gnu.org/wiki/ClangDiagnosticsComparison

https://github.com/Barro/compiler-warnings


However, the warning that caused this particular build failure is specific to GNU gcc.

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=40752

https://stackoverflow.com/questions/12641387/is-gccs-wconversion-incompatible-with-the-use-of-compound-assignment-etc

CLang has a "-Weverything" flag. Individual warnings were disabled until the current Arrow source code compiled without errors.

Individual warnings can be enabled when using the CLang compiler to see if there is anything that needs to be fixed.

```
elseif((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") OR (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang"))
  # NOTE: -Wconversion does not return the same warnings on CLang and GNU (build can still fail even when enabled)
  set(CXX_COMMON_FLAGS "-Weverything -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-deprecated -Wno-weak-vtables -Wno-padded -Wno-unused-parameter -Wno-undef -Wno-documentation-deprecated-sync -Wno-reserved-id-macro -Wno-shadow -Wno-switch-enum -Wno-documentation -Wno-exit-time-destructors -Wno-global-constructors -Wno-weak-template-vtables -Wno-undefined-reinterpret-cast -Wno-implicit-fallthrough -Wno-old-style-cast -Wno-unreachable-code-return -Wno-float-equal -Wno-missing-prototypes -Wno-double-promotion -Wno-non-virtual-dtor -Wno-unused-macros -Wno-covered-switch-default -Wno-unreachable-code-break -Wno-extra-semi -Wno-range-loop-analysis -Wno-shift-sign-overflow -Wno-used-but-marked-unused -Wno-missing-variable-declarations -Wno-gnu-zero-variadic-macro-arguments -Wconversion -Wno-sign-conversion -Wc++11-narrowing -Wnarrowing -Werror -std=c++11")
else()
  # Travis CI builds use these flags
  set(CXX_COMMON_FLAGS "-Wall -Wconversion -Wno-sign-conversion -Werror -std=c++11")
endif()
```

```
In file included from /home/travis/build/apache/arrow/cpp/src/arrow/buffer.h:29:0,
from /home/travis/build/apache/arrow/cpp/src/arrow/buffer.cc:18:
/home/travis/build/apache/arrow/cpp/src/arrow/util/bit-util.h: In member function ‘void arrow::internal::BitmapWriter::Set()’:
/home/travis/build/apache/arrow/cpp/src/arrow/util/bit-util.h:108:30: error: conversion to ‘uint8_t
{aka unsigned char}’ from ‘int’ may alter its value [-Werror=conversion]
void Set() { current_byte_ |= (1 << bit_offset_); }
^
/home/travis/build/apache/arrow/cpp/src/arrow/util/bit-util.h: In member function ‘void arrow::internal::BitmapWriter::Clear()’:
/home/travis/build/apache/arrow/cpp/src/arrow/util/bit-util.h:110:32: error: conversion to ‘uint8_t {aka unsigned char}
’ from ‘int’ may alter its value [-Werror=conversion]
void Clear()
{ current_byte_ &= ~(1 << bit_offset_); }
^
cc1plus: all warnings being treated as errors
[28/137] Building CXX object CMakeFiles/arrow_objlib.dir/src/arrow/array.cc.o
FAILED: CMakeFiles/arrow_objlib.dir/src/arrow/array.cc.o 
/usr/bin/ccache /usr/lib/ccache/g+-4.9 -DARROW_EXTRA_ERROR_CONTEXT -DARROW_NO_DEPRECATED_API -DARROW_WITH_BROTLI -DARROW_WITH_LZ4 -DARROW_WITH_SNAPPY -DARROW_WITH_ZLIB -DARROW_WITH_ZSTD -isystem /home/travis/build/apache/arrow/cpp-toolchain/include -isystem googletest_ep-prefix/src/googletest_ep/include -isystem gbenchmark_ep/src/gbenchmark_ep-install/include -isystem /home/travis/build/apache/arrow/cpp/thirdparty/hadoop/include -I/home/travis/build/apache/arrow/cpp/src -ggdb -O0 -Wall -std=c11 -msse3 -Wconversion -Wno-sign-conversion -Werror -g -fPIC -std=gnu+11 -MD -MT CMakeFiles/arrow_objlib.dir/src/arrow/array.cc.o -MF CMakeFiles/arrow_objlib.dir/src/arrow/array.cc.o.d -o CMakeFiles/arrow_objlib.dir/src/arrow/array.cc.o -c /home/travis/build/apache/arrow/cpp/src/arrow/array.cc
In file included from /home/travis/build/apache/arrow/cpp/src/arrow/buffer.h:29:0,
from /home/travis/build/apache/arrow/cpp/src/arrow/array.h:27,
from /home/travis/build/apache/arrow/cpp/src/arrow/array.cc:18:
/home/travis/build/apache/arrow/cpp/src/arrow/util/bit-util.h: In member function ‘void arrow::internal::BitmapWriter::Set()’:
/home/travis/build/apache/arrow/cpp/src/arrow/util/bit-util.h:108:30: error: conversion to ‘uint8_t {aka unsigned char}’ from ‘int’ may alter its value [-Werror=conversion]
void Set() { current_byte_ |= (1 << bit_offset_); }
^
/home/travis/build/apache/arrow/cpp/src/arrow/util/bit-util.h: In member function ‘void arrow::internal::BitmapWriter::Clear()’:
/home/travis/build/apache/arrow/cpp/src/arrow/util/bit-util.h:110:32: error: conversion to ‘uint8_t {aka unsigned char}’ from ‘int’ may alter its value [-Werror=conversion]
void Clear() { current_byte_ &= ~(1 << bit_offset_); }
^
cc1plus: all warnings being treated as errors
```



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)