mirror of
https://github.com/boostorg/gil.git
synced 2026-01-19 04:12:11 +00:00
Add Boost.Build variants for UBSan-enabled builds
The build variants enable group of checks offered by clang
UndefinedBehaviorSanitizer detector.
Add sanitizers suppression file in .ci/blacklist.supp based on
copy of the file from Boost.Beast.
Update Travis CI:
- Add .ci/build-and-test.sh script as handy proxy for b2 command.
- Add build jobs for each of the three new UBSan variants.
- Display COMPILER and VARIANT first as these two are most important
details while inspecting the build matrix
(TOOLSET can be derived from COMPILER).
This commit is contained in:
committed by
Stefan Seefeld
parent
472ec6bafc
commit
189889e39f
40
.ci/blacklist.supp
Normal file
40
.ci/blacklist.supp
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
# LLVM/clang sanitizers suppression file for Boost.GIL
|
||||||
|
#
|
||||||
|
# Copied from https://github.com/boostorg/beast/blob/develop/tools/blacklist.supp
|
||||||
|
#
|
||||||
|
# Remember that this blacklist file is GLOBAL to all sanitizers
|
||||||
|
# Be therefore extremely careful when considering to add a sanitizer
|
||||||
|
# filter here instead of using a runtime suppression
|
||||||
|
#
|
||||||
|
# Remember also that filters here quite literally completely
|
||||||
|
# remove instrumentation altogether, so filtering here means
|
||||||
|
# that sanitizers such as tsan will false positive on problems
|
||||||
|
# introduced by code filtered here.
|
||||||
|
#
|
||||||
|
# The main use for this file is ubsan, as it's the only sanitizer
|
||||||
|
# without a runtime suppression facility.
|
||||||
|
#
|
||||||
|
# Be ESPECIALLY careful when filtering out entire source files!
|
||||||
|
# Try if at all possible to filter only functions using fun:regex
|
||||||
|
# Remember you must use mangled symbol names with fun:regex
|
||||||
|
|
||||||
|
# boost/lexical_cast.hpp:1625:43: runtime error: downcast of address 0x7fbb4fffbce8 which does not point to an object of type 'buffer_t' (aka 'parser_buf<std::basic_streambuf<char, char_traits<char> >, char>')
|
||||||
|
# Fixed in Boost 1.63.0 https://svn.boost.org/trac/boost/ticket/12889
|
||||||
|
#
|
||||||
|
fun:*shl_input_streamable*
|
||||||
|
|
||||||
|
## The well known ubsan failure in libstdc++ extant for years :)
|
||||||
|
# Line 96:24: runtime error: load of value 4294967221, which is not a valid value for type 'std::_Ios_Fmtflags'
|
||||||
|
#
|
||||||
|
#fun:*_Ios_Fmtflags*
|
||||||
|
|
||||||
|
# boost/any.hpp:259:16: runtime error: downcast of address 0x000004392e70 which does not point to an object of type 'any::holder<int>'
|
||||||
|
#
|
||||||
|
#fun:*any_cast*
|
||||||
|
|
||||||
|
# basic_string.h:409:51: runtime error: unsigned integer overflow: 3 - 9 cannot be represented in type 'unsigned long' in std::string::_S_compare(unsigned long, unsigned long)
|
||||||
|
fun:*_S_compare*
|
||||||
|
fun:*string::compare*
|
||||||
|
|
||||||
|
# stl_tree.h:702:24: runtime error: downcast of address 0x000001271b68 with insufficient space for an object of type
|
||||||
|
fun:*_Rb_tree*
|
||||||
40
.ci/build-and-test.sh
Executable file
40
.ci/build-and-test.sh
Executable file
@@ -0,0 +1,40 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Boost.GIL proxy for b2 command on Travis CI (can run locally too)
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
if [ ! -z ${TRAVIS+x} ] && [ "$TRAVIS" == "true" ] && [ ! -z ${DOC+x} ]; then
|
||||||
|
echo "Documentation build requested, skipping tests build"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z ${TOOLSET+x} ]; then
|
||||||
|
echo "Missing environment TOOLSET"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z ${VARIANT+x} ]; then
|
||||||
|
echo "Missing environment VARIANT"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z ${B2_OPTIONS+x} ]; then
|
||||||
|
B2_OPTIONS=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -z ${TRAVIS+x} ] && [ "$TRAVIS" == "true" ]; then
|
||||||
|
JOBS="2"
|
||||||
|
elif [[ $(uname -s) == "Linux" ]]; then
|
||||||
|
JOBS=$(lscpu -p | grep -v '^#' | sort -u -t, -k 2,4 | wc -l)
|
||||||
|
elif [[ $(uname) == "Darwin" ]]; then
|
||||||
|
JOBS=$(sysctl -n hw.physicalcpu)
|
||||||
|
else
|
||||||
|
JOBS=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Running ./b2 -j $JOBS $B2_OPTIONS toolset=$TOOLSET variant=$VARIANT"
|
||||||
|
|
||||||
|
set -euv
|
||||||
|
./b2 -j $JOBS $B2_OPTIONS toolset=$TOOLSET variant=$VARIANT libs/gil/test
|
||||||
|
./b2 -j $JOBS $B2_OPTIONS toolset=$TOOLSET variant=$VARIANT libs/gil/toolbox/test
|
||||||
|
./b2 -j $JOBS $B2_OPTIONS toolset=$TOOLSET variant=$VARIANT libs/gil/numeric/test
|
||||||
|
./b2 -j $JOBS $B2_OPTIONS toolset=$TOOLSET variant=$VARIANT libs/gil/io/test//simple
|
||||||
3
.gitattributes
vendored
3
.gitattributes
vendored
@@ -52,3 +52,6 @@ CMakeLists.txt text eol=lf
|
|||||||
*.html text
|
*.html text
|
||||||
*.txt text
|
*.txt text
|
||||||
*.yml text
|
*.yml text
|
||||||
|
|
||||||
|
# sanitizers suppression
|
||||||
|
*.supp text eol=lf
|
||||||
|
|||||||
79
.travis.yml
79
.travis.yml
@@ -19,7 +19,6 @@ branches:
|
|||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
- secure: "UHit2f6Hq2pkHvx8rfrQvFacYiQKVO3vrCbNuDi/VSAIzQjRnqCqE06y4vpXLMsXf62TvBeCBStIuI8g+HP8B+f39oGb/9Om+yIgN/yes47R4sLFKFbRiOS6sfCIefJp7Kx7GSFf81xWxStpIU4QaSsk8Dlt5xyurTWXFSde+lQ="
|
- secure: "UHit2f6Hq2pkHvx8rfrQvFacYiQKVO3vrCbNuDi/VSAIzQjRnqCqE06y4vpXLMsXf62TvBeCBStIuI8g+HP8B+f39oGb/9Om+yIgN/yes47R4sLFKFbRiOS6sfCIefJp7Kx7GSFf81xWxStpIU4QaSsk8Dlt5xyurTWXFSde+lQ="
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
- BOGUS_JOB=true
|
- BOGUS_JOB=true
|
||||||
|
|
||||||
@@ -28,7 +27,7 @@ matrix:
|
|||||||
- env: BOGUS_JOB=true
|
- env: BOGUS_JOB=true
|
||||||
include:
|
include:
|
||||||
- os: linux
|
- os: linux
|
||||||
env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++11 VARIANT=debug
|
env: COMPILER=g++-5 VARIANT=debug TOOLSET=gcc CXXSTD=c++11
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
@@ -37,7 +36,7 @@ matrix:
|
|||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++11 VARIANT=release
|
env: COMPILER=g++-5 VARIANT=release TOOLSET=gcc CXXSTD=c++11
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
@@ -46,7 +45,7 @@ matrix:
|
|||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 VARIANT=debug
|
env: COMPILER=g++-6 VARIANT=debug TOOLSET=gcc CXXSTD=c++11
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
@@ -55,7 +54,7 @@ matrix:
|
|||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 VARIANT=release
|
env: COMPILER=g++-6 VARIANT=release TOOLSET=gcc CXXSTD=c++11
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
@@ -64,7 +63,7 @@ matrix:
|
|||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
env: TOOLSET=gcc COMPILER=g++-7 CXXSTD=c++11 VARIANT=debug
|
env: COMPILER=g++-7 VARIANT=debug TOOLSET=gcc CXXSTD=c++11
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
@@ -73,7 +72,7 @@ matrix:
|
|||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
env: TOOLSET=gcc COMPILER=g++-7 CXXSTD=c++11 VARIANT=release
|
env: COMPILER=g++-7 VARIANT=release TOOLSET=gcc CXXSTD=c++11
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
@@ -82,7 +81,7 @@ matrix:
|
|||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
env: TOOLSET=clang COMPILER=clang++-3.9 CXXSTD=c++11 VARIANT=debug
|
env: COMPILER=clang++-3.9 VARIANT=debug TOOLSET=clang CXXSTD=c++11
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
@@ -92,7 +91,7 @@ matrix:
|
|||||||
- llvm-toolchain-precise-3.9
|
- llvm-toolchain-precise-3.9
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
env: TOOLSET=clang COMPILER=clang++-3.9 CXXSTD=c++11 VARIANT=release
|
env: COMPILER=clang++-3.9 VARIANT=release TOOLSET=clang CXXSTD=c++11
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
@@ -101,11 +100,41 @@ matrix:
|
|||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
- llvm-toolchain-precise-3.9
|
- llvm-toolchain-precise-3.9
|
||||||
|
|
||||||
- os: osx
|
- os: linux
|
||||||
env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++11 VARIANT=debug
|
env: COMPILER=clang++-5.0 VARIANT=ubsan_integer TOOLSET=clang CXXSTD=c++11 UBSAN_OPTIONS='print_stacktrace=1'
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-5.0
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-trusty-5.0
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
env: COMPILER=clang++-5.0 VARIANT=ubsan_undefined TOOLSET=clang CXXSTD=c++11 UBSAN_OPTIONS='print_stacktrace=1'
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-5.0
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-trusty-5.0
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
env: COMPILER=clang++-5.0 VARIANT=ubsan_nullability TOOLSET=clang CXXSTD=c++11 UBSAN_OPTIONS='print_stacktrace=1'
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-5.0
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-trusty-5.0
|
||||||
|
|
||||||
- os: osx
|
- os: osx
|
||||||
env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++11 VARIANT=release
|
env: COMPILER=clang++ VARIANT=debug TOOLSET=clang CXXSTD=c++11
|
||||||
|
|
||||||
|
- os: osx
|
||||||
|
env: COMPILER=clang++ VARIANT=release TOOLSET=clang CXXSTD=c++11
|
||||||
|
|
||||||
- env: DOC=1
|
- env: DOC=1
|
||||||
addons:
|
addons:
|
||||||
@@ -135,25 +164,21 @@ script:
|
|||||||
if [ "$DOC" ]; then
|
if [ "$DOC" ]; then
|
||||||
echo "using doxygen ;" > ~/user-config.jam
|
echo "using doxygen ;" > ~/user-config.jam
|
||||||
./b2 libs/gil/doc
|
./b2 libs/gil/doc
|
||||||
else
|
|
||||||
echo "using $TOOLSET : : $COMPILER : <cxxflags>-std=$CXXSTD ;" > ~/user-config.jam
|
|
||||||
./b2 libs/gil/test toolset=$TOOLSET variant=$VARIANT
|
|
||||||
./b2 libs/gil/toolbox/test toolset=$TOOLSET variant=$VARIANT
|
|
||||||
./b2 libs/gil/numeric/test toolset=$TOOLSET variant=$VARIANT
|
|
||||||
./b2 libs/gil/io/test//simple toolset=$TOOLSET variant=$VARIANT
|
|
||||||
fi
|
fi
|
||||||
|
- |-
|
||||||
|
echo "using $TOOLSET : : $COMPILER : <cxxflags>-std=$CXXSTD ;" > ~/user-config.jam
|
||||||
|
- travis_retry libs/gil/.ci/build-and-test.sh
|
||||||
|
|
||||||
after_success:
|
after_success:
|
||||||
# Upload docs only when building upstream.
|
# Upload docs only when building upstream.
|
||||||
- |
|
- |-
|
||||||
if [ "$DOC" -a \
|
if [ "$DOC" -a \
|
||||||
"$TRAVIS_REPO_SLUG" = "boostorg/gil" -a \
|
"$TRAVIS_REPO_SLUG" = "boostorg/gil" -a \
|
||||||
"$TRAVIS_PULL_REQUEST" = "false" ]; then
|
"$TRAVIS_PULL_REQUEST" = "false" ]; then
|
||||||
export GH_TOKEN
|
export GH_TOKEN
|
||||||
cd libs/gil
|
cd libs/gil
|
||||||
.ci/upload_docs.sh
|
.ci/upload_docs.sh
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
email:
|
email:
|
||||||
|
|||||||
34
Jamfile
34
Jamfile
@@ -1,11 +1,41 @@
|
|||||||
# Boost.GIL (Generic Image Library)
|
# Boost.GIL (Generic Image Library)
|
||||||
#
|
#
|
||||||
|
# Copyright (c) 2013-2017 Vinnie Falco (vinnie dot falco at gmail dot com)
|
||||||
# Copyright (c) 2018 Mateusz Loskot <mateusz@loskot.net>
|
# Copyright (c) 2018 Mateusz Loskot <mateusz@loskot.net>
|
||||||
#
|
#
|
||||||
# Use, modification and distribution is subject to the Boost Software License,
|
# Use, modification and distribution is subject to the Boost Software License,
|
||||||
# Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
# Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
# http://www.boost.org/LICENSE_1_0.txt)
|
# http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
# TODO: Remove -Wno-unused below once tests have been cleaned up, and no longer use of assert() macro, etc.
|
||||||
|
|
||||||
|
variant ubsan_integer
|
||||||
|
: release
|
||||||
|
:
|
||||||
|
<cxxflags>"-std=c++11 -Wno-unused -fstrict-aliasing -fno-omit-frame-pointer -fsanitize=integer -fno-sanitize-recover=integer -fsanitize-blacklist=libs/gil/.ci/blacklist.supp"
|
||||||
|
<linkflags>"-fsanitize=integer"
|
||||||
|
<debug-symbols>on
|
||||||
|
<define>BOOST_USE_ASAN=1
|
||||||
|
;
|
||||||
|
|
||||||
|
variant ubsan_nullability
|
||||||
|
: release
|
||||||
|
:
|
||||||
|
<cxxflags>"-std=c++11 -Wno-unused -fstrict-aliasing -fno-omit-frame-pointer -fsanitize=nullability -fno-sanitize-recover=nullability -fsanitize-blacklist=libs/gil/.ci/blacklist.supp"
|
||||||
|
<linkflags>"-fsanitize=nullability"
|
||||||
|
<debug-symbols>on
|
||||||
|
<define>BOOST_USE_ASAN=1
|
||||||
|
;
|
||||||
|
|
||||||
|
variant ubsan_undefined
|
||||||
|
: release
|
||||||
|
:
|
||||||
|
<cxxflags>"-std=c++11 -Wno-unused -fstrict-aliasing -fno-omit-frame-pointer -fsanitize=undefined -fno-sanitize-recover=undefined -fsanitize-blacklist=libs/gil/.ci/blacklist.supp"
|
||||||
|
<linkflags>"-fsanitize=undefined"
|
||||||
|
<debug-symbols>on
|
||||||
|
<define>BOOST_USE_ASAN=1
|
||||||
|
;
|
||||||
|
|
||||||
project boost-gil
|
project boost-gil
|
||||||
:
|
:
|
||||||
requirements
|
requirements
|
||||||
@@ -17,7 +47,9 @@ project boost-gil
|
|||||||
<toolset>intel:<debug-symbols>off
|
<toolset>intel:<debug-symbols>off
|
||||||
<toolset>gcc:<cxxflags>"-std=c++11 -pedantic -fstrict-aliasing -Wconversion -Wextra -Wfloat-equal -Wshadow -Wsign-promo -Wstrict-aliasing -Wunused-parameter "
|
<toolset>gcc:<cxxflags>"-std=c++11 -pedantic -fstrict-aliasing -Wconversion -Wextra -Wfloat-equal -Wshadow -Wsign-promo -Wstrict-aliasing -Wunused-parameter "
|
||||||
<toolset>darwin:<cxxflags>"-std=c++11 -pedantic -fstrict-aliasing -Wconversion -Wextra -Wfloat-equal -Wshadow -Wsign-promo -Wstrict-aliasing -Wunused-parameter "
|
<toolset>darwin:<cxxflags>"-std=c++11 -pedantic -fstrict-aliasing -Wconversion -Wextra -Wfloat-equal -Wshadow -Wsign-promo -Wstrict-aliasing -Wunused-parameter "
|
||||||
<toolset>clang:<cxxflags>"-std=c++11 -pedantic -fstrict-aliasing -Wconversion -Wextra -Wfloat-equal -Wshadow -Wsign-promo -Wstrict-aliasing -Wunused-parameter -Wsign-conversion"
|
# variant filter for clang is necessary to allow ubsan_* variants declare distinct set of <cxxflags>
|
||||||
|
<toolset>clang,<variant>debug:<cxxflags>"-std=c++11 -pedantic -fstrict-aliasing -Wconversion -Wextra -Wfloat-equal -Wshadow -Wsign-promo -Wstrict-aliasing -Wunused-parameter -Wsign-conversion"
|
||||||
|
<toolset>clang,<variant>release:<cxxflags>"-std=c++11 -pedantic -fstrict-aliasing -Wconversion -Wextra -Wfloat-equal -Wshadow -Wsign-promo -Wstrict-aliasing -Wunused-parameter -Wsign-conversion"
|
||||||
;
|
;
|
||||||
|
|
||||||
build-project example ;
|
build-project example ;
|
||||||
|
|||||||
Reference in New Issue
Block a user