Seems useful to me. If you're interested, we could kill multiple birds with one stone. Specifically, I'm also interested in centos6/rh6 pre-merge testing. There are a variety of ways to do so, including running with test-with-docker stuff. I recognize it's more work, but happy to help if you want to try it.
-- Philip On Sat, Nov 10, 2018 at 11:10 PM Jim Apple <jbap...@cloudera.com> wrote: > C++ has some constructs that have undefined behavior. Shall we test for > this during pre-merge testing? > > When the behavior of C++ code is formally "undefined" by the standard, > compilers can behave erratically, like not taking either branch of a > if/else statement. This can be reproduced in the wild. The standard itself > notes: > > "Using a bool value in ways described by this International Standard as > 'undefined,' such as by examining the value of an uninitialized automatic > object, might cause it to behave as if it is neither true nor false." > > Clang has a checker for this called UBSAN, and, after some effort, the data > loading part of our build is now UBSAN-clean. I'm suggesting we add that > test to the pre-merge testing. I'm happy to handle the details. > > When it fails, the output will look something like this: > > https://jenkins.impala.io/job/ubuntu-16.04-from-scratch/3573/console > > exprs/math-functions-ir.cc:405:13: runtime error: signed integer overflow: > 4738381338321616896 * 36 cannot be represented in type 'long' > runtime/decimal-value.inline.h:254:17: runtime error: signed integer > overflow: 0x4b3b4ca85a86c47a098a223fffffffff + > 0x4b3b4ca85a86c47a098a223fffffffff cannot be represented in type '__int128' > runtime/row-batch-serialize-test.cc:243:18: runtime error: variable length > array bound evaluates to non-positive value 0 >