From 7e0feecb56e966a23d713c4f831684f14dbe40f5 Mon Sep 17 00:00:00 2001 From: Owen Avery Date: Mon, 26 Aug 2024 23:08:30 -0400 Subject: [PATCH] Compile using ASAN on the github CI ChangeLog: * .github/workflows/ccpp.yml: Add job for running tests with ASAN. * .github/no-bootstrap-asan.mk: New file. Signed-off-by: Owen Avery --- .github/no-bootstrap-asan.mk | 7 +++ .github/workflows/ccpp.yml | 84 ++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 .github/no-bootstrap-asan.mk diff --git a/.github/no-bootstrap-asan.mk b/.github/no-bootstrap-asan.mk new file mode 100644 index 000000000000..44d985072189 --- /dev/null +++ b/.github/no-bootstrap-asan.mk @@ -0,0 +1,7 @@ +# This option enables -fsanitize=address for stage1. + +# Suppress LeakSanitizer in bootstrap. +export ASAN_OPTIONS=detect_leaks=0:use_odr_indicator=1 + +STAGE1_CFLAGS += -fsanitize=address +STAGE1_LDFLAGS += -fsanitize=address -static-libasan diff --git a/.github/workflows/ccpp.yml b/.github/workflows/ccpp.yml index 04699148a6ba..571d03183f4b 100644 --- a/.github/workflows/ccpp.yml +++ b/.github/workflows/ccpp.yml @@ -386,3 +386,87 @@ jobs: else \ exit 0; \ fi + + build-and-check-asan: + + env: + # Force locale, in particular for reproducible results re '.github/bors_log_expected_warnings' (see below). + LC_ALL: C.UTF-8 + + runs-on: ubuntu-22.04 + + steps: + - uses: actions/checkout@v3 + + - name: Install Deps + run: | + sudo apt-get update; + sudo apt-get install -y \ + automake \ + autoconf \ + libtool \ + autogen \ + bison \ + flex \ + libgmp3-dev \ + libmpfr-dev \ + libmpc-dev \ + build-essential \ + gcc-multilib \ + g++-multilib \ + dejagnu; + # install Rust directly using rustup + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain=1.72.0; + + - name: Configure + run: | + mkdir -p gccrs-build; + cd gccrs-build; + ../configure \ + --enable-languages=rust \ + --disable-bootstrap \ + --enable-multilib \ + --with-build-config=../.github/no-bootstrap-asan + + - name: Build + shell: bash + run: | + cd gccrs-build; \ + # Add cargo to our path quickly + . "$HOME/.cargo/env"; + make -Otarget -j $(nproc) 2>&1 | tee log + +# Skip warnings check +# - name: Check for new warnings +# run: | +# cd gccrs-build +# < log grep 'warning: ' | sort > log_warnings +# if diff -U0 ../.github/bors_log_expected_warnings log_warnings; then +# : +# else +# echo 'See .' +# exit 1 +# fi >&2 + + - name: Run Tests + run: | + cd gccrs-build; \ + ASAN_OPTIONS=detect_leaks=0:use_odr_indicator=1 \ + make check-rust RUNTESTFLAGS="--target_board=unix\{-m64}" + - name: Archive check-rust results + uses: actions/upload-artifact@v3 + with: + name: check-rust-logs + path: | + gccrs-build/gcc/testsuite/rust/ + - name: Check regressions + run: | + cd gccrs-build; \ + if grep -e "unexpected" -e "unresolved" -e "ERROR:" gcc/testsuite/rust/rust.sum;\ + then \ + echo "::error title=Regression test failed::some tests are not correct"; \ + perl -n ../.github/emit_test_errors.pl < gcc/testsuite/rust/rust.sum; \ + exit 1; \ + else \ + exit 0; \ + fi