Initial sanitizer configurations#1
Conversation
Signed-off-by: rahul.singh <rahul.sa.singh@partner.bmwgroup.com>
Signed-off-by: rahul.singh <rahul.sa.singh@partner.bmwgroup.com>
| jobs: | ||
| test-sanitizers: | ||
| name: Validate sanitizer configs | ||
| runs-on: ubuntu-latest |
There was a problem hiding this comment.
why using latest? this can easily break our workflows in case it gets upgraded
| EXPECT_EQ(counter.load(), 4000); | ||
| } | ||
|
|
||
| // Test for undefined behavior detection (UBSan) |
There was a problem hiding this comment.
this comment is highly misleading. the below test does not contain any UB hence, how shall it help for verifying UB detection? better adjust the comment
| EXPECT_EQ(vec[4], 5); | ||
| } | ||
|
|
||
| // Test that allocates memory (for ASan/LSan validation) |
There was a problem hiding this comment.
how about
| // Test that allocates memory (for ASan/LSan validation) | |
| // Memory allocation test that should pass with all sanitizers |
?
| bazel_dep(name = "score_bazel_cpp_toolchains", version = "0.2.2") | ||
| bazel_dep(name = "score_bazel_platforms", version = "0.0.4") |
There was a problem hiding this comment.
Why are these two required here? Where are they used actually?
| - `--config=asan` - AddressSanitizer (memory errors, buffer overflows) | ||
| - `--config=tsan` - ThreadSanitizer (data races, deadlocks) | ||
| - `--config=ubsan` - UndefinedBehaviorSanitizer (undefined behavior) | ||
| - `--config=lsan` - LeakSanitizer (memory leaks) |
There was a problem hiding this comment.
prefer alphabetical sorting instead?
| - `--config=asan` - AddressSanitizer (memory errors, buffer overflows) | |
| - `--config=tsan` - ThreadSanitizer (data races, deadlocks) | |
| - `--config=ubsan` - UndefinedBehaviorSanitizer (undefined behavior) | |
| - `--config=lsan` - LeakSanitizer (memory leaks) | |
| - `--config=asan` - AddressSanitizer (memory errors, buffer overflows) | |
| - `--config=lsan` - LeakSanitizer (memory leaks) | |
| - `--config=tsan` - ThreadSanitizer (data races, deadlocks) | |
| - `--config=ubsan` - UndefinedBehaviorSanitizer (undefined behavior) |
There was a problem hiding this comment.
how about preferring plural here? would be more appropriate in my eyes since it makes clear that it will contain multiple sanitizer configs
i.e. sanitizers/sanitizers.bazelrc
| # ******************************************************************************* | ||
|
|
||
| # ASan + UBSan + LSan (Combined - recommended for most testing) | ||
| test:asan_ubsan_lsan --compilation_mode=dbg |
There was a problem hiding this comment.
please do not use dbg compliation mode. this would potentially enable code which is not part of the actual production code and hence you would potentially run into different code paths. just omit that everywhere since such compilation flags must come from the toolchain which defines the respective sanitizer features.
also see https://github.com/eclipse-score/communication/blob/main/quality/sanitizer/sanitizer.bazelrc#L20-L30 for further reference which flags we require for sanitizer configs
| test:tsan --compilation_mode=dbg | ||
| test:tsan --features=tsan | ||
| test:tsan --platform_suffix=tsan |
There was a problem hiding this comment.
here and also for all the other configs:
| test:tsan --compilation_mode=dbg | |
| test:tsan --features=tsan | |
| test:tsan --platform_suffix=tsan | |
| build:tsan --features=tsan | |
| build:tsan --platform_suffix=tsan |
only the runtime options should get added as test config, the others are build configs!
| test:asan_ubsan_lsan --test_env=ASAN_OPTIONS=exitcode=55:allow_addr2line=1:verbosity=1:detect_leaks=1:halt_on_error=1:allocator_may_return_null=1 | ||
| test:asan_ubsan_lsan --test_env=UBSAN_OPTIONS=exitcode=55:allow_addr2line=1:verbosity=1:print_stacktrace=1:halt_on_error=1 | ||
| test:asan_ubsan_lsan --test_env=LSAN_OPTIONS=exitcode=55:allow_addr2line=1:verbosity=1:halt_on_error=1 |
There was a problem hiding this comment.
such runtime options should get extracted into a single place and then reused here instead
| test:asan_ubsan_lsan --test_env=ASAN_OPTIONS=exitcode=55:allow_addr2line=1:verbosity=1:detect_leaks=1:halt_on_error=1:allocator_may_return_null=1 | |
| test:asan_ubsan_lsan --test_env=UBSAN_OPTIONS=exitcode=55:allow_addr2line=1:verbosity=1:print_stacktrace=1:halt_on_error=1 | |
| test:asan_ubsan_lsan --test_env=LSAN_OPTIONS=exitcode=55:allow_addr2line=1:verbosity=1:halt_on_error=1 | |
| test:_asan_runtime_options --test_env=ASAN_OPTIONS=exitcode=55:allow_addr2line=1:verbosity=1:detect_leaks=1:halt_on_error=1:allocator_may_return_null=1 | |
| test:_asan_runtime_options --test_env=LSAN_OPTIONS=exitcode=55:allow_addr2line=1:verbosity=1:halt_on_error=1 | |
| test:_ubsan_runtime_options --test_env=UBSAN_OPTIONS=exitcode=55:allow_addr2line=1:verbosity=1:print_stacktrace=1:halt_on_error=1 | |
| <...> | |
| test:asan_ubsan_lsan --config=_asan_runtime_options | |
| test:asan_ubsan_lsan --config=_lsan_runtime_options | |
| test:asan_ubsan_lsan --config=_ubsan_runtime_options | |
| <...> | |
| test:asan --config=_asan_runtime_options | |
There was a problem hiding this comment.
and please use the following runtime options instead:
test:_asan_runtime_options --test_env=ASAN_OPTIONS="exitcode=55 allow_addr2line=1 halt_on_error=1 print_stats=1 verbosity=1 allocator_may_return_null=1 check_initialization_order=1 detect_leaks=1 detect_stack_use_after_return=1 strict_string_checks=1"
test:_lsan_runtime_options --test_env=LSAN_OPTIONS="exitcode=55 allow_addr2line=1 halt_on_error=1 print_stats=1 verbosity=1"
test:_ubsan_runtime_options --test_env=UBSAN_OPTIONS="exitcode=55 allow_addr2line=1 halt_on_error=1 print_stacktrace=1 verbosity=1"
test:_tsan_runtime_options --test_env=TSAN_OPTIONS="exitcode=55 allow_addr2line=1 halt_on_error=1 print_stats=1 verbosity=1 detect_deadlocks=1 second_deadlock_stack=1"
| - name: Test with ${{ matrix.config }} | ||
| working-directory: tests | ||
| run: | | ||
| bazel test --config=${{ matrix.config }} //:sample_test --verbose_failures |
There was a problem hiding this comment.
why not
| bazel test --config=${{ matrix.config }} //:sample_test --verbose_failures | |
| bazel test --config=${{ matrix.config }} //... --verbose_failures |
?
since there will be further unit tests in this repo soon
|
|
||
| module( | ||
| name = "score_cpp_policies", | ||
| version = "0.0.1", |
There was a problem hiding this comment.
Can you please set the version to 0.0.0 here? The workflow in the S-CORE bazel registry is taking care of generating a patch when a release is picked.
| @@ -0,0 +1,13 @@ | |||
| Copyright 2026 Contributors to the Eclipse Foundation | |||
There was a problem hiding this comment.
Please put the entire license text here and remove .md extension. You can copy it,for example for here: https://github.com/eclipse-score/module_template/blob/main/LICENSE
General guideline: https://www.eclipse.org/projects/handbook/#legaldoc-license
|
|
||
| The [Eclipse Safe Open Vehicle Core (S-CORE)](https://projects.eclipse.org/projects/automotive.score) project develops an open-source core stack for Software Defined Vehicles (SDVs). This repository centralizes the shared C++ quality tool policies (sanitizers, clang-tidy, clang-format) that S-CORE modules reuse to maintain consistent, safety-focused defaults. | ||
|
|
||
| Project communication happens via the [score-dev mailing list](https://accounts.eclipse.org/mailing-list/score-dev), GitHub issues and pull requests, and the [Eclipse SCORE chatroom](https://chat.eclipse.org/#/room/#automotive.score:matrix.eclipse.org). |
There was a problem hiding this comment.
Where is the statement coming from? S-CORE is not using Eclipse matrix chat for communication, but Slack instead.
No description provided.