Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ jobs:
tsan:
type: boolean
default: false
typesan:
type: boolean
default: false
ubsan:
type: boolean
default: false
Expand Down Expand Up @@ -127,6 +130,7 @@ jobs:
readonly COMPILER=<< parameters.compiler >>
readonly ASAN=<< parameters.asan >>
readonly TSAN=<< parameters.tsan >>
readonly TYPESAN=<< parameters.typesan >>
readonly UBSAN=<< parameters.ubsan >>
if [[ $COMPILER == "gcc" ]]; then
export CC=gcc-$GCC_VERSION
Expand All @@ -148,8 +152,9 @@ jobs:
fi
cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DSTANDALONE=ON \
-DMAINTAINER_MODE=ON -DSANITIZE_ADDRESS=$ASAN \
-DSANITIZE_THREAD=$TSAN -DSANITIZE_UB=$UBSAN \
-DCMAKE_CXX_FLAGS=-march=armv8.2-a "${EXTRA_CMAKE_ARGS[@]}"
-DSANITIZE_THREAD=$TSAN -DSANITIZE_TYPE=$TYPESAN \
-DSANITIZE_UB=$UBSAN -DCMAKE_CXX_FLAGS=-march=armv8.2-a \
"${EXTRA_CMAKE_ARGS[@]}"
- run:
name: Build
working_directory: build
Expand Down
16 changes: 16 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ env:
DEFAULT_COMPILER: gcc
DEFAULT_SANITIZE_ADDRESS: OFF
DEFAULT_SANITIZE_THREAD: OFF
DEFAULT_SANITIZE_TYPE: OFF
DEFAULT_SANITIZE_UB: OFF
DEFAULT_STATIC_ANALYSIS: OFF
DEFAULT_COVERAGE: OFF
Expand All @@ -26,6 +27,7 @@ jobs:
BUILD_TYPE: ${{matrix.BUILD_TYPE}}
SANITIZE_ADDRESS: ${{matrix.SANITIZE_ADDRESS}}
SANITIZE_THREAD: ${{matrix.SANITIZE_THREAD}}
SANITIZE_TYPE: ${{matrix.SANITIZE_TYPE}}
SANITIZE_UB: ${{matrix.SANITIZE_UB}}
STATIC_ANALYSIS: ${{matrix.STATIC_ANALYSIS}}
COVERAGE: ${{matrix.COVERAGE}}
Expand Down Expand Up @@ -124,6 +126,12 @@ jobs:
SANITIZE_UB: ON
COMPILER: clang

- name: clang 20 Release with TypeSan
os: ubuntu-22.04
BUILD_TYPE: Release
SANITIZE_TYPE: ON
COMPILER: clang

- name: clang 20 Debug
os: ubuntu-22.04
BUILD_TYPE: Debug
Expand All @@ -147,6 +155,12 @@ jobs:
SANITIZE_UB: ON
COMPILER: clang

- name: clang 20 Debug with TypeSan
os: ubuntu-22.04
BUILD_TYPE: Debug
SANITIZE_TYPE: ON
COMPILER: clang

- name: clang 20 Release static analysis
os: ubuntu-22.04
BUILD_TYPE: Release
Expand Down Expand Up @@ -357,6 +371,7 @@ jobs:
COMPILER="${COMPILER:-$DEFAULT_COMPILER}"
SANITIZE_ADDRESS="${SANITIZE_ADDRESS:-$DEFAULT_SANITIZE_ADDRESS}"
SANITIZE_THREAD="${SANITIZE_THREAD:-$DEFAULT_SANITIZE_THREAD}"
SANITIZE_TYPE="${SANITIZE_TYPE:-$DEFAULT_SANITIZE_TYPE}"
SANITIZE_UB="${SANITIZE_UB:-$DEFAULT_SANITIZE_UB}"
STATIC_ANALYSIS="${STATIC_ANALYSIS:-$DEFAULT_STATIC_ANALYSIS}"
COVERAGE="${COVERAGE:-$DEFAULT_COVERAGE}"
Expand Down Expand Up @@ -407,6 +422,7 @@ jobs:
-DMAINTAINER_MODE=ON -DIWYU=ON \
"-DSANITIZE_ADDRESS=${SANITIZE_ADDRESS}" \
"-DSANITIZE_THREAD=${SANITIZE_THREAD}" \
"-DSANITIZE_TYPE=${SANITIZE_TYPE}" \
"-DSANITIZE_UB=${SANITIZE_UB}" \
"-DSTATIC_ANALYSIS=${STATIC_ANALYSIS}" "-DCOVERAGE=${COVERAGE}" \
"-DAVX2=${AVX2}" "${EXTRA_CMAKE_ARGS[@]}"
Expand Down
10 changes: 10 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,16 @@ if(SANITIZE_THREAD)
list(APPEND SANITIZER_LD_FLAGS "-fsanitize=thread")
endif()

option(SANITIZE_TYPE "Enable TypeSanitizer runtime checks")
if(SANITIZE_TYPE)
if(NOT is_clang OR CMAKE_CXX_COMPILER_VERSION VERSION_LESS 20.0)
message(FATAL_ERROR "Only clang >= 20 is compatible with TypeSanitizer")
endif()
set_common_sanitizer_flags()
list(APPEND SANITIZER_CXX_FLAGS "-fsanitize=type")
list(APPEND SANITIZER_LD_FLAGS "-fsanitize=type")
endif()

option(SANITIZE_UB "Enable UndefinedBehaviorSanitizer runtime checks")
if(SANITIZE_UB)
if(MSVC)
Expand Down
2 changes: 2 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ There also other development-specific options. All of them are `OFF` by default.
* `-DSANITIZE_THREAD=ON` to enable ThreadSanitizer (tsan). It is incompatible
with the `-DSANITIZE_ADDRESS=ON` option, not available under MSVC, and will
disable libfuzzer support if it would be enabled otherwise.
* `-DSANITIZE_TYPE=ON` to enable TypeSanitizer. Only available with clang
version 20 or later.
* `-DSANITIZE_UB=ON` to enable UndefinedBehaviorSanitizer (ubsan). It is
compatible with other sanitizer options, although some [false
positive][sanitizer-combination-bug] might occur. Not available under MSVC.
Expand Down