From 39adc5a82bf4f8e2575c72dc2e4ebd5bd9d43c9c Mon Sep 17 00:00:00 2001 From: Pratik Mankawde Date: Tue, 11 Nov 2025 13:57:31 +0000 Subject: [PATCH] fixes forgcc compilation errors. Signed-off-by: Pratik Mankawde --- .github/scripts/strategy-matrix/generate.py | 13 ++++- .../workflows/reusable-build-test-config.yml | 4 +- conan/profiles/sanitizers | 18 +++++-- external/asan_suppressions.txt | 47 +------------------ external/tsan_suppressions.txt | 1 - 5 files changed, 28 insertions(+), 55 deletions(-) diff --git a/.github/scripts/strategy-matrix/generate.py b/.github/scripts/strategy-matrix/generate.py index ead14c12d0..dbbebbbdd3 100755 --- a/.github/scripts/strategy-matrix/generate.py +++ b/.github/scripts/strategy-matrix/generate.py @@ -165,13 +165,19 @@ def generate_strategy_matrix(all: bool, config: Config) -> list: # so that they are easier to identify in the GitHub Actions UI, as long # names get truncated. Add Address and Thread (both coupled with UB) sanitizers when the distro is bookworm. if os['distro_version'] == 'bookworm': + # Use medium code model to avoid relocation errors with large binaries + extra_warning_flags = '-mcmodel=medium' + # Suppress false positive warnings in GCC with stringop-overflow + if os['compiler_name'] == 'gcc': + extra_warning_flags += ' -Wno-stringop-overflow' + if "-O0" in cxx_flags: cxx_flags.replace("-O0", "-O1") else: cxx_flags += " -O1" if cxx_flags: - cmake_args_flags = f'{cmake_args} -DCMAKE_CXX_FLAGS="-fsanitize=address,{sanitizers_flags} -fno-omit-frame-pointer {cxx_flags}"' + cmake_args_flags = f'{cmake_args} -DCMAKE_CXX_FLAGS="-fsanitize=address,{sanitizers_flags} -fno-omit-frame-pointer {cxx_flags} {extra_warning_flags}"' else: cmake_args_flags = f'{cmake_args}' configurations.append({ @@ -184,8 +190,11 @@ def generate_strategy_matrix(all: bool, config: Config) -> list: 'architecture': architecture, 'sanitizers': "Address" }) + # gcc doesn't supports atomic_thread_fence with tsan. Suppress warnings. + if os['compiler_name'] == 'gcc': + extra_warning_flags += ' -Wno-tsan' if cxx_flags: - cmake_args_flags = f'{cmake_args} -DCMAKE_CXX_FLAGS="-fsanitize=thread,{sanitizers_flags} -fno-omit-frame-pointer {cxx_flags}"' + cmake_args_flags = f'{cmake_args} -DCMAKE_CXX_FLAGS="-fsanitize=thread,{sanitizers_flags} -fno-omit-frame-pointer {cxx_flags} {extra_warning_flags}"' else: cmake_args_flags = f'{cmake_args}' configurations.append({ diff --git a/.github/workflows/reusable-build-test-config.yml b/.github/workflows/reusable-build-test-config.yml index 2ad961367f..84b0843518 100644 --- a/.github/workflows/reusable-build-test-config.yml +++ b/.github/workflows/reusable-build-test-config.yml @@ -170,8 +170,8 @@ jobs: env: BUILD_TYPE: ${{ inputs.build_type }} PARALLELISM: ${{ runner.os == 'Windows' && '1' || steps.nproc.outputs.nproc }} - ASAN_OPTIONS: suppressions=${working-directory}/../external/asan_suppressions.txt - TSAN_OPTIONS: suppressions=${working-directory}/../external/tsan_suppressions.txt + ASAN_OPTIONS: suppressions= ${{ inputs.build_dir }}/../external/asan_suppressions.txt + TSAN_OPTIONS: suppressions= ${{ inputs.build_dir }}/../external/tsan_suppressions.txt shell: bash run: | ctest \ diff --git a/conan/profiles/sanitizers b/conan/profiles/sanitizers index d0f23c2218..0aca6349f4 100644 --- a/conan/profiles/sanitizers +++ b/conan/profiles/sanitizers @@ -12,20 +12,28 @@ tools.info.package_ids:confs+=["user.package:sanitizers"] {% if sanitizers == "Address" %} tools.build:cxxflags+=['-fsanitize=address,undefined,float-divide-by-zero,signed-integer-overflow --fno-omit-frame-pointer -O1'] +-fno-omit-frame-pointer -O1 -Wno-stringop-overflow -mcmodel=medium'] +tools.build:sharedlinkflags+=['-mcmodel=medium'] +tools.build:exelinkflags+=['-mcmodel=medium'] {% elif sanitizers == "Thread" %} tools.build:cxxflags+=['-fsanitize=thread,undefined,float-divide-by-zero,signed-integer-overflow -fno-omit-frame-pointer --O1'] +-O1 -Wno-stringop-overflow -Wno-tsan -mcmodel=medium'] +tools.build:sharedlinkflags+=['-mcmodel=medium'] +tools.build:exelinkflags+=['-mcmodel=medium'] {% endif %} {% elif compiler == "clang" %} {% if sanitizers == "Address" %} tools.build:cxxflags+=['-fsanitize=address,undefined,float-divide-by-zero,signed-integer-overflow,unsigned-integer-overflow --fno-omit-frame-pointer -O1'] +-fno-omit-frame-pointer -O1 -mcmodel=medium'] +tools.build:sharedlinkflags+=['-mcmodel=medium'] +tools.build:exelinkflags+=['-mcmodel=medium'] {% elif sanitizers == "Thread" %} tools.build:cxxflags+=['-fsanitize=thread,undefined,float-divide-by-zero,signed-integer-overflow,unsigned-integer-overflow --fno-omit-frame-pointer -O1'] +-fno-omit-frame-pointer -O1 -mcmodel=medium'] +tools.build:sharedlinkflags+=['-mcmodel=medium'] +tools.build:exelinkflags+=['-mcmodel=medium'] {% endif %} -{% endif %} +{% endif %} \ No newline at end of file diff --git a/external/asan_suppressions.txt b/external/asan_suppressions.txt index bbc3415779..431fcc52fe 100644 --- a/external/asan_suppressions.txt +++ b/external/asan_suppressions.txt @@ -1,45 +1,2 @@ -leak:libboost_atomic.a -leak:libboost_charconv.a -leak:libboost_chrono.a -leak:libboost_cobalt.a -leak:libboost_container.a -leak:libboost_context.a -leak:libboost_contract.a -leak:libboost_coroutine.a -leak:libboost_date_time.a -leak:libboost_exception.a -leak:libboost_fiber_numa.a -leak:libboost_fiber.a -leak:libboost_filesystem.a -leak:libboost_graph.a -leak:libboost_iostreams.a -leak:libboost_json.a -leak:libboost_locale.a -leak:libboost_log_setup.a -leak:libboost_log.a -leak:libboost_math_c99.a -leak:libboost_math_c99f.a -leak:libboost_math_c99l.a -leak:libboost_math_tr1.a -leak:libboost_math_tr1f.a -leak:libboost_math_tr1l.a -leak:libboost_nowide.a -leak:libboost_prg_exec_monitor.a -leak:libboost_process.a -leak:libboost_program_options.a -leak:libboost_random.a -leak:libboost_regex.a -leak:libboost_serialization.a -leak:libboost_stacktrace_addr2line.a -leak:libboost_stacktrace_backtrace.a -leak:libboost_stacktrace_basic.a -leak:libboost_stacktrace_noop.a -leak:libboost_system.a -leak:libboost_test_exec_monitor.a -leak:libboost_thread.a -leak:libboost_timer.a -leak:libboost_type_erasure.a -leak:libboost_unit_test_framework.a -leak:libboost_url.a -leak:libboost_wave.a -leak:libboost_wserialization.a \ No newline at end of file +leak:libboost* +leak:^external/* \ No newline at end of file diff --git a/external/tsan_suppressions.txt b/external/tsan_suppressions.txt index 2227bc7bf1..e69de29bb2 100644 --- a/external/tsan_suppressions.txt +++ b/external/tsan_suppressions.txt @@ -1 +0,0 @@ -suppressions: __atomic_thread_fence