travis-ci: Enable undefined behavior checking
authorJoost VandeVondele <Joost.VandeVondele@mat.ethz.ch>
Wed, 26 Oct 2016 19:24:26 +0000 (21:24 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Thu, 27 Oct 2016 04:29:24 +0000 (06:29 +0200)
.travis.yml
src/Makefile

index ea635c8..af0bb2b 100644 (file)
@@ -9,9 +9,9 @@ matrix:
       addons:
         apt:
           sources: ['ubuntu-toolchain-r-test']
-          packages: ['g++-multilib', 'valgrind']
+          packages: ['g++-6', 'g++-6-multilib', 'g++-multilib', 'valgrind']
       env:
-        - COMPILER=g++
+        - COMPILER=g++-6
         - COMP=gcc
 
     - os: linux
@@ -51,3 +51,5 @@ script:
   - test ! -s result
   # if valgrind is available check the build is without error, reduce depth to speedup testing, but not too shallow to catch more cases.
   - if [ -x "$(command -v valgrind )" ] ; then make clean && make ARCH=x86-64 debug=yes build && valgrind --error-exitcode=42 ./stockfish bench 128 1 10 default depth 1>/dev/null ; fi
+  # use g++-6 as a proxy for having sanitizers ... might need revision as they become available for more recent versions of clang/gcc than trusty provides
+  - if [[ "$COMPILER" == "g++-6" ]]; then make clean && make ARCH=x86-64 sanitize=yes build && ! ./stockfish bench 2>&1 | grep "runtime error:" ; fi
index 95e6ac9..cdedd25 100644 (file)
@@ -50,6 +50,7 @@ OBJS = benchmark.o bitbase.o bitboard.o endgame.o evaluate.o main.o \
 # ----------------------------------------------------------------------------
 #
 # debug = yes/no      --- -DNDEBUG         --- Enable/Disable debug mode
+# sanitize = yes/no   --- (-fsanitize )    --- enable undefined behavior checks
 # optimize = yes/no   --- (-O3/-fast etc.) --- Enable/Disable optimizations
 # arch = (name)       --- (-arch)          --- Target architecture
 # bits = 64/32        --- -DIS_64BIT       --- 64-/32-bit operating system
@@ -65,6 +66,7 @@ OBJS = benchmark.o bitbase.o bitboard.o endgame.o evaluate.o main.o \
 ### 2.1. General and architecture defaults
 optimize = yes
 debug = no
+sanitize = no
 bits = 32
 prefetch = no
 popcnt = no
@@ -253,13 +255,18 @@ ifneq ($(comp),mingw)
        endif
 endif
 
-### 3.2 Debugging
+### 3.2.1 Debugging
 ifeq ($(debug),no)
        CXXFLAGS += -DNDEBUG
 else
        CXXFLAGS += -g
 endif
 
+### 3.2.2 Debugging with undefined behavior sanitizers
+ifeq ($(sanitize),yes)
+       CXXFLAGS += -g3 -fsanitize=undefined
+endif
+
 ### 3.3 Optimization
 ifeq ($(optimize),yes)