name: sanitizer on: push: {} pull_request: {} env: UBSAN_OPTIONS: "print_stacktrace=1" jobs: job: name: ${{ matrix.sanitizer }}.${{ matrix.build_type }}.${{ matrix.compiler }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: build_type: ['Debug', 'RelWithDebInfo'] sanitizer: ['asan', 'ubsan', 'tsan'] compiler: ['clang', 'gcc'] # TODO: add 'msan' above. currently failing and needs investigation. steps: - uses: actions/checkout@v2 - name: configure msan env if: matrix.sanitizer == 'msan' run: | echo "EXTRA_FLAGS=-g -O2 -fno-omit-frame-pointer -fsanitize=memory -fsanitize-memory-track-origins" >> $GITHUB_ENV echo "LIBCXX_SANITIZER=MemoryWithOrigins" >> $GITHUB_ENV - name: configure ubsan env if: matrix.sanitizer == 'ubsan' run: | echo "EXTRA_FLAGS=-g -O2 -fno-omit-frame-pointer -fsanitize=undefined -fno-sanitize-recover=all" >> $GITHUB_ENV echo "LIBCXX_SANITIZER=Undefined" >> $GITHUB_ENV - name: configure asan env if: matrix.sanitizer == 'asan' run: | echo "EXTRA_FLAGS=-g -O2 -fno-omit-frame-pointer -fsanitize=address -fno-sanitize-recover=all" >> $GITHUB_ENV echo "LIBCXX_SANITIZER=Address" >> $GITHUB_ENV - name: configure tsan env if: matrix.sanitizer == 'tsan' run: | echo "EXTRA_FLAGS=-g -O2 -fno-omit-frame-pointer -fsanitize=thread -fno-sanitize-recover=all" >> $GITHUB_ENV echo "LIBCXX_SANITIZER=Thread" >> $GITHUB_ENV - name: configure clang if: matrix.compiler == 'clang' run: | echo "CC=clang" >> $GITHUB_ENV echo "CXX=clang++" >> $GITHUB_ENV - name: configure gcc if: matrix.compiler == 'gcc' run: | sudo apt update && sudo apt -y install gcc-10 g++-10 echo "CC=gcc-10" >> $GITHUB_ENV echo "CXX=g++-10" >> $GITHUB_ENV - name: install llvm stuff if: matrix.compiler == 'clang' run: | "${GITHUB_WORKSPACE}/.github/.libcxx-setup.sh" echo "EXTRA_CXX_FLAGS=\"-stdlib=libc++\"" >> $GITHUB_ENV - name: create build environment run: cmake -E make_directory ${{ runner.workspace }}/_build - name: configure cmake shell: bash working-directory: ${{ runner.workspace }}/_build run: > cmake $GITHUB_WORKSPACE -DBENCHMARK_ENABLE_ASSEMBLY_TESTS=OFF -DBENCHMARK_ENABLE_LIBPFM=OFF -DBENCHMARK_DOWNLOAD_DEPENDENCIES=ON -DCMAKE_C_COMPILER=${{ env.CC }} -DCMAKE_CXX_COMPILER=${{ env.CXX }} -DCMAKE_C_FLAGS="${{ env.EXTRA_FLAGS }}" -DCMAKE_CXX_FLAGS="${{ env.EXTRA_FLAGS }} ${{ env.EXTRA_CXX_FLAGS }}" -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} - name: build shell: bash working-directory: ${{ runner.workspace }}/_build run: cmake --build . --config ${{ matrix.build_type }} - name: test shell: bash working-directory: ${{ runner.workspace }}/_build run: ctest -C ${{ matrix.build_type }} -VV