Repository navigation
Fix clang-tidy and sanitizer CI config blocking score/time_daemon checks - #216
MaciejSalwa543 wants to merge 9 commits into
Conversation
License Check Results🚀 The license check job ran with the Bazel command: bazel run //:license-checkStatus: Click to expand output |
|
Ran TSan+UBSan manually against
Looks like something I want to fix and add TSan to CI, would you agree? |
|
Closed due to missing clang-tidy config file |
172e39e to
8926082
Compare
pawelrutkaq
left a comment
There was a problem hiding this comment.
We need to tue this return type as auto or at least confirm it
Signed-off-by: Maciej Salwa <maciej.salwa.ext@qorix.ai>
Signed-off-by: Maciej Salwa <maciej.salwa.ext@qorix.ai>
Signed-off-by: Maciej Salwa <maciej.salwa.ext@qorix.ai>
873aa0b to
96907e6
Compare
pawelrutkaq
left a comment
There was a problem hiding this comment.
beside two small thing, now looks good to me
| # Default clang-tidy configuration for S-CORE C++ modules. | ||
| # NOTE: the set of enabled checks is yet subject to be tailored per module. | ||
| Checks: "-*,clang-analyzer-*,cert-*,cppcoreguidelines-*,bugprone-*,misc-*,performance-*,readability-*,modernize-*,-modernize-use-trailing-return-type" |
There was a problem hiding this comment.
I'm curious if it is the full or not the full list.
where this list shall be taken from
| clang_tidy_aspect = make_clang_tidy_aspect( | ||
| binary = Label("@llvm_toolchain//:clang-tidy"), | ||
| # No local_configs: use only the S-CORE baseline from score_cpp_policies. | ||
| local_configs = [Label("//:.clang-tidy")], |
There was a problem hiding this comment.
why can't we use the score baseline?
or it is intentional too narrow and we want to extend it?
| std::vector<Job> jobs_; | ||
| const std::string name_; | ||
| Result status_; | ||
| Result status_{Result::kIdle}; |
There was a problem hiding this comment.
shall it be done in the constructor?
| gptp_machine_{nullptr}, | ||
| verification_machine_{nullptr}, | ||
| ipc_publisher_{nullptr}, | ||
| ctrl_flow_divider_{nullptr}, |
There was a problem hiding this comment.
why did yuo drop them from the init list?
| std::shared_ptr<SvtVerificationMachine> verification_machine_; ///< Handles SVT verification | ||
| std::shared_ptr<SvtPublisher> ipc_publisher_; ///< Publishes SVT data via IPC | ||
| std::shared_ptr<PtpControlFlowDivider> ctrl_flow_divider_; ///< Divides PTP control flow | ||
| TimebaseHandler::Status handler_status_{TimebaseHandler::Status::kIdle}; ///< Current status of the handler |
There was a problem hiding this comment.
why not to set it in the ctor in init list, like all other members?
| /// \brief General type class to store and pass all necessary data | ||
| struct TimeBaseSnapshot | ||
| { | ||
| // NOLINTBEGIN(misc-non-private-member-variables-in-classes) — plain data aggregate, like the |
There was a problem hiding this comment.
but that is nt a class, that is a struct.
where public member s are allowed or?
| // kGptpIpcName is a char-array constant used as a default arg for a std::string param; | ||
| // ordinary literal decay, not raw pointer/buffer use. | ||
| // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-array-to-pointer-decay) | ||
| explicit ShmPTPEngine(std::string ipc_name = score::ts::details::kGptpIpcName) noexcept; |
There was a problem hiding this comment.
can we update it to not char*? can use it as a string or not use it as defualt value?
then we can try to avoid suppression or?
| */ | ||
| std::shared_ptr<GPTPShmMachine> CreateGPTPShmMachine(const std::string& name, | ||
| const std::string& ipc_name = score::ts::details::kGptpIpcName); | ||
| // kGptpIpcName is a char-array constant used as a default arg for a const std::string&; the |
| std::chrono::nanoseconds max_time_jump_allowed, | ||
| std::chrono::nanoseconds sync_debounce_threshold, | ||
| std::uint8_t valid_frames_threshold) | ||
| std::uint8_t valid_frames_threshold, |
There was a problem hiding this comment.
why did you swap them?
|
|
||
| if (!last_sync_frame_.has_value()) | ||
| { | ||
| return false; |
There was a problem hiding this comment.
either return here the is_time_jump_detected
or move this if to the very top
Description
Starting on #77, found that
QA / Clang-TidyandQA / Sanitizersshow green but aren'tactually checking anything.
Clang-Tidy: under
--config=clang-tidy, most targets fail to build before the aspectruns (
clang: error: argument unused during compilation: '-stdlib=libc++' [-Werror,-Wunused-command-line-argument]).MODULE.bazeldefines two LLVM toolchains; theone used here never sets
stdlib, unlike the newerllvm_toolchain_coverageone. Fix:mirror
stdlib = {"": "stdc++"}onto it.Sanitizers: under
--config=asan_ubsan_lsan, every test is silently skipped(
Executed 0 out of 22 tests: 22 were skipped)..bazelrcset--@score_cpp_policies//sanitizers/flags:sanitizer=asan_ubsan_lsan, a flag removed in thescore_cpp_policiescommit this repo pins — real API is three bool flags (:asan,:ubsan,:lsan). Since none were set, the sanitizerrun_underwrapper is incompatible and everytest gets skipped. Fix: set the three bool flags.
Both look like they've been broken since #102 (2026-07-03), not a recent regression —
continue-on-error: trueon both jobs hid it.Once the build actually worked, digging further
showed clang-tidy was still only running its own narrow built-in default (
clang-diagnostic-*,clang-analyzer-*) instead of the S-CORE baseline — the baseline lives inscore_cpp_policies, butexternal/is a sibling ofscore/, not an ancestor, so clang-tidy'sown directory-walk config discovery could never reach it. Mirrored the baseline into
//:.clang-tidyand wired it vialocal_configs. That surfaced 552 real findings inscore/time_daemon/that had never actually been checked — fixed what's genuinely fixable(missing includes, redundant/missing default member inits, magic numbers, pass-by-value+move,
const-correctness, trailing return types, a duplicated global turned into a member) and added
specific justification comments for the suppressions that are the right call.
Results
bazel test --config=clang-tidy //score/time_daemon/...→ 22/22 pass, 0 clang-tidy findingsbazel test --config=asan_ubsan_lsan --config=x86_64-linux //score/time_daemon/...→22/22 pass, zero failures.
bazel test //:format.check→ 5/5 pass.Scope note
These two potential bugs are repo-wide (
MODULE.bazel/.bazelrc), nottime_daemon-specific —also unblocks #76/#78/#79 and is a prerequisite for #111/#112. Open to splitting into its own
issue/PR if preferred.
Related ticket
closes #77