Skip to content

Drone patches boost to include capy#190

Merged
mvandeberg merged 1 commit intocppalliance:developfrom
mvandeberg:pr/drone-patch-boost
Mar 4, 2026
Merged

Drone patches boost to include capy#190
mvandeberg merged 1 commit intocppalliance:developfrom
mvandeberg:pr/drone-patch-boost

Conversation

@mvandeberg
Copy link
Contributor

@mvandeberg mvandeberg commented Mar 4, 2026

Summary by CodeRabbit

  • Chores
    • CI/build updated to clone a required dependency into the superproject across multiple execution paths before build/test.
    • Build/install logic adjusted to provide full or minimal install paths depending on packaging availability.
    • Added an option to disable coverage generation in the build tooling.
  • Bug Fixes
    • Fixed coroutine timer shutdown behavior to correctly account for outstanding work and suppress a compiler false-positive.
  • Behavior
    • Immediate timer expiry now resumes coroutines with the recorded result rather than a stale cancellation state.

@coderabbitai
Copy link

coderabbitai bot commented Mar 4, 2026

📝 Walkthrough

Walkthrough

Adds capy cloning to CI scripts with branch-selection logic, sets coverage=False in .drone.star, implements waiter_node::completion_op::destroy() with GCC diagnostic guards in timer_service.hpp, and splits root install behavior in cmake/CorosioBuild.cmake based on boost_capy_FOUND.

Changes

Cohort / File(s) Summary
CI: Windows batch script
​.drone/drone.bat
Inserted four repeated blocks after common_install.bat to set CAPY_BRANCH/CAPY_TARGET (default develop, switch to master for master target) and git clone --depth 1 https://github.com/cppalliance/capy.git into BOOST_ROOT!\libs\capy.
CI: Unix shell script
​.drone/drone.sh
Added pre-build logic in common_install to derive CAPY_BRANCH (default develop, switch to master when target is master) and clone capy into BOOST_ROOT/libs/capy with --depth 1.
CI config
​.drone.star
Changed generate(...) invocation to include coverage=False.
Core runtime
include/boost/corosio/detail/timer_service.hpp
Added inline void waiter_node::completion_op::destroy() implementation (wrapped with GCC diagnostic push/pop to suppress -Wmaybe-uninitialized) that clears the stop callback, destroys/releases coroutine handle if present, signals scheduler.work_finished(), and deletes the waiter to balance scheduler accounting during shutdown.
Timer awaitable
include/boost/corosio/io/io_timer.hpp
Fast-path in await_suspend now resets the stop token on immediate expiry so await_resume returns the stored ec_ instead of a stale stop state.
Build/install
cmake/CorosioBuild.cmake
When BOOST_COROSIO_IS_ROOT is true, split install into two branches: if boost_capy_FOUND do full package-config+exports; else perform minimal install (targets+headers) without package config files.

Sequence Diagram(s)

sequenceDiagram
    autonumber
    participant Waiter as rect rgba(135,206,235,0.5) Waiter::completion_op
    participant Coroutine as rect rgba(144,238,144,0.5) coroutine_handle
    participant Scheduler as rect rgba(255,182,193,0.5) Scheduler

    Waiter->>Waiter: completion_op::destroy()
    Note right of Waiter: reset stop_callback
    Waiter->>Coroutine: destroy/release handle (if present)
    Waiter->>Scheduler: work_finished()
    Scheduler-->>Waiter: acknowledge
    Waiter->>Waiter: delete self
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Poem

I’m a rabbit in CI, I fetch with a hop, 🐇
I clone capy shallow and never stop,
Develop by default, master when told,
I tidy shutdowns and balance the fold,
Hops, installs, and graceful destroy — hip-hop! ✨

🚥 Pre-merge checks | ✅ 2
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Drone patches boost to include capy' directly reflects the main changes in the pull request, which involve adding capy dependency cloning logic across multiple drone CI configuration files.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@cppalliance-bot
Copy link

cppalliance-bot commented Mar 4, 2026

An automated preview of the documentation is available at https://190.corosio.prtest3.cppalliance.org/index.html

If more commits are pushed to the pull request, the docs will rebuild at the same URL.

2026-03-04 22:46:48 UTC

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
.drone/drone.bat (1)

37-43: Consider extracting the capy clone logic to reduce duplication.

This same block is repeated four times (lines 37-43, 65-71, 141-147, 184-190). While batch scripting makes code reuse awkward, you could extract this to a separate batch file (e.g., clone_capy.bat) or use a :label with call :label to reduce maintenance burden.

Additionally, unlike the shell script which has set -e, batch scripts don't exit on command failure. If the git clone fails, the build will continue and fail later with a confusing error.

♻️ Optional: Extract to a subroutine
+:clone_capy
+REM Clone the capy dependency into the superproject.
+SET CAPY_BRANCH=develop
+SET CAPY_TARGET=!BOOST_CI_TARGET_BRANCH!
+if NOT "!DRONE_TARGET_BRANCH!" == "" SET CAPY_TARGET=!DRONE_TARGET_BRANCH!
+if "!CAPY_TARGET!" == "master" SET CAPY_BRANCH=master
+git clone -b !CAPY_BRANCH! https://github.com/cppalliance/capy.git !BOOST_ROOT!\libs\capy --depth 1 || exit /b 1
+goto :eof

Then replace each duplicated block with:

call :clone_capy
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.drone/drone.bat around lines 37 - 43, Extract the duplicated capy clone
block (the SET CAPY_BRANCH/CAPY_TARGET logic and the git clone command) into a
reusable routine and add failure handling: create a new batch file (e.g.,
clone_capy.bat) or a subroutine label (e.g., :clone_capy) that sets CAPY_BRANCH
and CAPY_TARGET, performs the git clone of
https://github.com/cppalliance/capy.git into !BOOST_ROOT!\libs\capy, and
immediately checks the clone result (using IF ERRORLEVEL 1 or conditional
%ERRORLEVEL%) to exit the script or call EXIT /B with a non-zero code on
failure; then replace each duplicated block with a single call to that routine
(call :clone_capy or call clone_capy.bat) so all clones use the same logic and
fail fast if git clone fails.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In @.drone/drone.bat:
- Around line 37-43: Extract the duplicated capy clone block (the SET
CAPY_BRANCH/CAPY_TARGET logic and the git clone command) into a reusable routine
and add failure handling: create a new batch file (e.g., clone_capy.bat) or a
subroutine label (e.g., :clone_capy) that sets CAPY_BRANCH and CAPY_TARGET,
performs the git clone of https://github.com/cppalliance/capy.git into
!BOOST_ROOT!\libs\capy, and immediately checks the clone result (using IF
ERRORLEVEL 1 or conditional %ERRORLEVEL%) to exit the script or call EXIT /B
with a non-zero code on failure; then replace each duplicated block with a
single call to that routine (call :clone_capy or call clone_capy.bat) so all
clones use the same logic and fail fast if git clone fails.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 66441f1f-0029-4138-97ee-4539841d2654

📥 Commits

Reviewing files that changed from the base of the PR and between 4fc38ac and 960fc40.

📒 Files selected for processing (2)
  • .drone/drone.bat
  • .drone/drone.sh

@cppalliance-bot
Copy link

cppalliance-bot commented Mar 4, 2026

GCOVR code coverage report https://190.corosio.prtest3.cppalliance.org/gcovr/index.html
LCOV code coverage report https://190.corosio.prtest3.cppalliance.org/genhtml/index.html
Coverage Diff Report https://190.corosio.prtest3.cppalliance.org/diff-report/index.html

Build time: 2026-03-04 22:53:55 UTC

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.drone.star:
- Line 32: The pipeline disables the generated coverage job by passing
coverage=False to generate(), removing CI coverage reporting; either remove the
coverage=False argument to restore the default coverage job or replace it by
adding an explicit coverage stage configured in the Drone pipeline (e.g.,
re-enable generate() coverage or add a new coverage step/job) so that coverage
signal is present in CI. Ensure you update the call/site that sets
coverage=False in .drone.star (the generate() invocation) and add a proper
coverage job definition if you choose the explicit stage route.

In `@include/boost/corosio/detail/timer_service.hpp`:
- Around line 763-768: The GCC diagnostic suppression is too broad; narrow it to
GCC 14 and newer by changing the preprocessor guard around the pragma lines (the
block that currently reads `#if` defined(__GNUC__) && !defined(__clang__) ...
`#pragma` GCC diagnostic ignored "-Wmaybe-uninitialized" ... `#endif`) to also test
the GCC major/minor version (e.g. defined(__GNUC__) && !defined(__clang__) &&
((__GNUC__ > 14) || (__GNUC__ == 14 && __GNUC_MINOR__ >= 0))). Apply the same
tightened condition at both suppression sites near the comment about the "GCC 14
false-positive" so only GCC 14+ triggers the pragma.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 694f1a45-a465-4bd1-994e-494beffeef6d

📥 Commits

Reviewing files that changed from the base of the PR and between 960fc40 and 391cfb5.

⛔ Files ignored due to path filters (3)
  • test/cmake_test/CMakeLists.txt is excluded by !**/test/**
  • test/unit/CMakeLists.txt is excluded by !**/test/**
  • test/unit/Jamfile is excluded by !**/test/**
📒 Files selected for processing (2)
  • .drone.star
  • include/boost/corosio/detail/timer_service.hpp

Comment on lines +763 to +768
// GCC 14 false-positive: inlining ~optional<stop_callback> through
// delete loses track that stop_cb_ was already .reset() above.
#if defined(__GNUC__) && !defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

# First, check if the file exists and read the relevant sections
cd /tmp/repo 2>/dev/null || cd . || true
cat -n include/boost/corosio/detail/timer_service.hpp | sed -n '760,770p'

Repository: cppalliance/corosio

Length of output: 486


🏁 Script executed:

# Also check the second location mentioned (792-794)
cat -n include/boost/corosio/detail/timer_service.hpp | sed -n '790,800p'

Repository: cppalliance/corosio

Length of output: 394


🏁 Script executed:

# Search for any related GCC version checks and diagnostic pragmas in the file
rg -n 'GCC|__GNUC__|pragma GCC|Wmaybe-uninitialized' include/boost/corosio/detail/timer_service.hpp

Repository: cppalliance/corosio

Length of output: 354


🏁 Script executed:

# Check if GCC version checks are used elsewhere in the codebase for similar workarounds
rg -n '__GNUC__.*>=.*14' --type cpp --type hpp | head -20

Repository: cppalliance/corosio

Length of output: 90


🏁 Script executed:

# Check git history or comments around this pragma to understand the rationale
rg -B2 -A2 'GCC 14 false-positive' include/boost/corosio/detail/timer_service.hpp

Repository: cppalliance/corosio

Length of output: 242


🏁 Script executed:

# Check if there are other GCC version-specific compiler guards in the codebase
rg -n '__GNUC__' include/boost/corosio/ -A1 -B1 | grep -E '(__GNUC__|>|>=|<|<=)' | head -30

Repository: cppalliance/corosio

Length of output: 520


🏁 Script executed:

# Check if GCC < 14 also has this false positive or if it's truly GCC 14 specific
rg -n 'false.positive|false-positive|workaround' include/boost/corosio/ | grep -i gcc

Repository: cppalliance/corosio

Length of output: 181


Narrow the suppression to GCC 14+ to match the stated rationale.

At lines 765 and 792, the guard currently applies to all GCC versions, but the comment explicitly states this is a "GCC 14 false positive." This can suppress legitimate -Wmaybe-uninitialized warnings on older GCC releases that may not exhibit the false positive.

Proposed patch
-#if defined(__GNUC__) && !defined(__clang__)
+#if defined(__GNUC__) && !defined(__clang__) && (__GNUC__ >= 14)
 `#pragma` GCC diagnostic push
 `#pragma` GCC diagnostic ignored "-Wmaybe-uninitialized"
 `#endif`
@@
-#if defined(__GNUC__) && !defined(__clang__)
+#if defined(__GNUC__) && !defined(__clang__) && (__GNUC__ >= 14)
 `#pragma` GCC diagnostic pop
 `#endif`
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
// GCC 14 false-positive: inlining ~optional<stop_callback> through
// delete loses track that stop_cb_ was already .reset() above.
#if defined(__GNUC__) && !defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif
// GCC 14 false-positive: inlining ~optional<stop_callback> through
// delete loses track that stop_cb_ was already .reset() above.
`#if` defined(__GNUC__) && !defined(__clang__) && (__GNUC__ >= 14)
`#pragma` GCC diagnostic push
`#pragma` GCC diagnostic ignored "-Wmaybe-uninitialized"
`#endif`
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@include/boost/corosio/detail/timer_service.hpp` around lines 763 - 768, The
GCC diagnostic suppression is too broad; narrow it to GCC 14 and newer by
changing the preprocessor guard around the pragma lines (the block that
currently reads `#if` defined(__GNUC__) && !defined(__clang__) ... `#pragma` GCC
diagnostic ignored "-Wmaybe-uninitialized" ... `#endif`) to also test the GCC
major/minor version (e.g. defined(__GNUC__) && !defined(__clang__) && ((__GNUC__
> 14) || (__GNUC__ == 14 && __GNUC_MINOR__ >= 0))). Apply the same tightened
condition at both suppression sites near the comment about the "GCC 14
false-positive" so only GCC 14+ triggers the pragma.

@mvandeberg mvandeberg force-pushed the pr/drone-patch-boost branch 3 times, most recently from bbda728 to 8c989c9 Compare March 4, 2026 22:01
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

♻️ Duplicate comments (1)
include/boost/corosio/detail/timer_service.hpp (1)

763-768: ⚠️ Potential issue | 🟡 Minor

Narrow the suppression to GCC 14+ only.

The comment says this is a GCC 14 false positive, but the current guard suppresses -Wmaybe-uninitialized for all GCC versions.

Proposed patch
-#if defined(__GNUC__) && !defined(__clang__)
+#if defined(__GNUC__) && !defined(__clang__) && (__GNUC__ >= 14)
 `#pragma` GCC diagnostic push
 `#pragma` GCC diagnostic ignored "-Wmaybe-uninitialized"
 `#endif`
@@
-#if defined(__GNUC__) && !defined(__clang__)
+#if defined(__GNUC__) && !defined(__clang__) && (__GNUC__ >= 14)
 `#pragma` GCC diagnostic pop
 `#endif`
#!/bin/bash
# Verify pragma guards around the destroy() block are restricted to GCC 14+.
rg -n -C2 'Wmaybe-uninitialized|GCC diagnostic (push|pop)|__GNUC__' include/boost/corosio/detail/timer_service.hpp

Expected result: both guard lines include (__GNUC__ >= 14).

Also applies to: 792-794

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@include/boost/corosio/detail/timer_service.hpp` around lines 763 - 768, The
current GCC pragma suppression around the destroy() block (the "#pragma GCC
diagnostic push/ignored \"-Wmaybe-uninitialized\"" region) is applied to all GCC
versions; restrict it to GCC 14 and newer by changing the preprocessor checks to
require (__GNUC__ >= 14) and still exclude clang (i.e., use defined(__GNUC__) &&
(__GNUC__ >= 14) && !defined(__clang__)) for both pragma push/ignore and the
matching pragma pop blocks mentioned around the
destroy()/~optional<stop_callback> handling so the warning is only silenced for
GCC 14+.
🧹 Nitpick comments (1)
cmake/CorosioBuild.cmake (1)

41-67: Move BOOST_COROSIO_CAPY_TAG assignment into the cache-initialization conditional block to prevent clobbering pre-seeded values.

When the cache variable is pre-seeded (e.g., via CMake command-line -D flag), the conditional block at lines 41-65 does not execute, leaving _default_capy_tag undefined. The unconditional set(...) at lines 66-67 then assigns the undefined variable to the cache, overriding the pre-seeded value. Moving the assignment into the conditional block ensures the cache variable is only recomputed when needed.

Proposed refactor
         if(NOT DEFINED CACHE{BOOST_COROSIO_CAPY_TAG})
             execute_process(
                 COMMAND git rev-parse --abbrev-ref HEAD
                 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
                 OUTPUT_VARIABLE _corosio_branch
                 OUTPUT_STRIP_TRAILING_WHITESPACE
                 ERROR_QUIET
                 RESULT_VARIABLE _git_result)
             if(_git_result EQUAL 0 AND _corosio_branch)
                 execute_process(
                     COMMAND git ls-remote --heads
                         https://github.com/cppalliance/capy.git
                         ${_corosio_branch}
                     OUTPUT_VARIABLE _capy_has_branch
                     OUTPUT_STRIP_TRAILING_WHITESPACE
                     ERROR_QUIET
                     TIMEOUT 30)
                 if(_capy_has_branch)
                     set(_default_capy_tag "${_corosio_branch}")
                 endif()
             endif()
             if(NOT DEFINED _default_capy_tag)
                 set(_default_capy_tag "develop")
             endif()
+            set(BOOST_COROSIO_CAPY_TAG "${_default_capy_tag}" CACHE STRING
+                "Git tag/branch for capy when fetching via FetchContent")
         endif()
-        set(BOOST_COROSIO_CAPY_TAG "${_default_capy_tag}" CACHE STRING
-            "Git tag/branch for capy when fetching via FetchContent")
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@cmake/CorosioBuild.cmake` around lines 41 - 67, The CACHE variable
BOOST_COROSIO_CAPY_TAG is being unconditionally set to the possibly-undefined
_default_capy_tag, which clobbers any pre-seeded value; move the
set(BOOST_COROSIO_CAPY_TAG ... CACHE STRING ...) call inside the surrounding
if(NOT DEFINED CACHE{BOOST_COROSIO_CAPY_TAG}) block so it only assigns when the
cache was not pre-seeded, and ensure _default_capy_tag is computed (or defaulted
to "develop") before that set call; update references to _default_capy_tag and
the conditional that computes it (the git rev-parse/git ls-remote logic) so the
assignment happens only within the NOT DEFINED CACHE{BOOST_COROSIO_CAPY_TAG}
branch.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@include/boost/corosio/detail/timer_service.hpp`:
- Around line 763-768: The current GCC pragma suppression around the destroy()
block (the "#pragma GCC diagnostic push/ignored \"-Wmaybe-uninitialized\""
region) is applied to all GCC versions; restrict it to GCC 14 and newer by
changing the preprocessor checks to require (__GNUC__ >= 14) and still exclude
clang (i.e., use defined(__GNUC__) && (__GNUC__ >= 14) && !defined(__clang__))
for both pragma push/ignore and the matching pragma pop blocks mentioned around
the destroy()/~optional<stop_callback> handling so the warning is only silenced
for GCC 14+.

---

Nitpick comments:
In `@cmake/CorosioBuild.cmake`:
- Around line 41-67: The CACHE variable BOOST_COROSIO_CAPY_TAG is being
unconditionally set to the possibly-undefined _default_capy_tag, which clobbers
any pre-seeded value; move the set(BOOST_COROSIO_CAPY_TAG ... CACHE STRING ...)
call inside the surrounding if(NOT DEFINED CACHE{BOOST_COROSIO_CAPY_TAG}) block
so it only assigns when the cache was not pre-seeded, and ensure
_default_capy_tag is computed (or defaulted to "develop") before that set call;
update references to _default_capy_tag and the conditional that computes it (the
git rev-parse/git ls-remote logic) so the assignment happens only within the NOT
DEFINED CACHE{BOOST_COROSIO_CAPY_TAG} branch.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 4fc13539-eea4-4cee-8129-a7405e014db3

📥 Commits

Reviewing files that changed from the base of the PR and between 391cfb5 and 8c989c9.

⛔ Files ignored due to path filters (4)
  • test/cmake_test/CMakeLists.txt is excluded by !**/test/**
  • test/unit/CMakeLists.txt is excluded by !**/test/**
  • test/unit/Jamfile is excluded by !**/test/**
  • test/unit/test_utils.hpp is excluded by !**/test/**
📒 Files selected for processing (5)
  • .drone.star
  • .drone/drone.bat
  • .drone/drone.sh
  • cmake/CorosioBuild.cmake
  • include/boost/corosio/detail/timer_service.hpp
🚧 Files skipped from review as they are similar to previous changes (2)
  • .drone.star
  • .drone/drone.bat

…tall

- Clone capy in drone.sh/drone.bat; disable coverage in .drone.star
- Suppress GCC 14 false-positive -Wmaybe-uninitialized in destroy()
- Exclude tls_stream_stress from non-TLS builds (CMake filter + separate
  per-backend B2 targets to avoid <build>no propagation)
- Use BOOST_INCLUDE_LIBRARIES in cmake_test for cmake-subdirectory
- Fix missing install target: guard on BOOST_COROSIO_IS_ROOT instead of
  boost_capy_FOUND (never set when capy comes from boost root subdirectory)
- Scale test failsafes when running under valgrind
- Timer wait fast-path must clear token_ (like the normal path's std::move)
  so that cancel_at_awaitable's post-completion request_stop() doesn't
  cause await_resume() to return a spurious canceled

Another valgrind fix
@mvandeberg mvandeberg force-pushed the pr/drone-patch-boost branch from 8c989c9 to a047831 Compare March 4, 2026 22:43
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

♻️ Duplicate comments (1)
include/boost/corosio/detail/timer_service.hpp (1)

765-768: ⚠️ Potential issue | 🟡 Minor

Limit the suppression to GCC 14+ to match the stated workaround scope.

The comment says this is a GCC 14 false-positive, but the current condition suppresses -Wmaybe-uninitialized on all GCC versions.

🔧 Proposed patch
-#if defined(__GNUC__) && !defined(__clang__)
+#if defined(__GNUC__) && !defined(__clang__) && (__GNUC__ >= 14)
 `#pragma` GCC diagnostic push
 `#pragma` GCC diagnostic ignored "-Wmaybe-uninitialized"
 `#endif`
@@
-#if defined(__GNUC__) && !defined(__clang__)
+#if defined(__GNUC__) && !defined(__clang__) && (__GNUC__ >= 14)
 `#pragma` GCC diagnostic pop
 `#endif`
#!/bin/bash
# Verify both pragma guards are scoped to GCC 14+ in timer_service.hpp
rg -n -C2 'GCC 14 false-positive|pragma GCC diagnostic|defined\(__GNUC__\)' include/boost/corosio/detail/timer_service.hpp

Also applies to: 792-794

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@include/boost/corosio/detail/timer_service.hpp` around lines 765 - 768, The
pragma block that suppresses -Wmaybe-uninitialized is currently enabled for all
GCC versions; narrow the guard to only GCC 14 and newer by changing the
preprocessor check from `#if` defined(__GNUC__) && !defined(__clang__) to `#if`
defined(__GNUC__) && (__GNUC__ >= 14) && !defined(__clang__); apply the same
change to the matching pop/ignored pragma pair(s) in the same file (the other
pragma GCC diagnostic push/ignored/ pop sequence in timer_service.hpp) so the
suppression is limited to the stated GCC 14+ workaround.
🧹 Nitpick comments (1)
.drone/drone.bat (1)

37-43: Extract the CAPY clone logic into one reusable label and quote the clone destination.

Same block is duplicated four times, which increases drift risk. Also quote !BOOST_ROOT!\libs\capy to avoid path-splitting failures on Windows runners with spaces in workspace paths.

♻️ Proposed refactor
+REM Reusable CAPY clone routine
+:clone_capy
+SET CAPY_BRANCH=develop
+SET CAPY_TARGET=!BOOST_CI_TARGET_BRANCH!
+if NOT "!DRONE_TARGET_BRANCH!" == "" SET CAPY_TARGET=!DRONE_TARGET_BRANCH!
+if "!CAPY_TARGET!" == "master" SET CAPY_BRANCH=master
+git clone -b !CAPY_BRANCH! https://github.com/cppalliance/capy.git "!BOOST_ROOT!\libs\capy" --depth 1
+goto :eof

Then replace each duplicated block with:

-call ...
-REM Clone the capy dependency into the superproject.
-...
-git clone -b !CAPY_BRANCH! https://github.com/cppalliance/capy.git !BOOST_ROOT!\libs\capy --depth 1
+call :clone_capy

Also applies to: 65-71, 141-147, 184-190

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.drone/drone.bat around lines 37 - 43, Extract the CAPY clone logic into a
single reusable batch label (e.g., :clone_capy) that computes
CAPY_BRANCH/CAPY_TARGET using the existing variables (CAPY_BRANCH, CAPY_TARGET,
DRONE_TARGET_BRANCH, BOOST_CI_TARGET_BRANCH) and performs the git clone; ensure
the clone destination is quoted (use "%BOOST_ROOT%\libs\capy") to avoid space
splitting on Windows, then replace each duplicated clone block (the four
occurrences with the git clone -b !CAPY_BRANCH! ... !BOOST_ROOT!\libs\capy
--depth 1) with a call/jump to the new label so all branches use the centralized
logic.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@include/boost/corosio/detail/timer_service.hpp`:
- Around line 765-768: The pragma block that suppresses -Wmaybe-uninitialized is
currently enabled for all GCC versions; narrow the guard to only GCC 14 and
newer by changing the preprocessor check from `#if` defined(__GNUC__) &&
!defined(__clang__) to `#if` defined(__GNUC__) && (__GNUC__ >= 14) &&
!defined(__clang__); apply the same change to the matching pop/ignored pragma
pair(s) in the same file (the other pragma GCC diagnostic push/ignored/ pop
sequence in timer_service.hpp) so the suppression is limited to the stated GCC
14+ workaround.

---

Nitpick comments:
In @.drone/drone.bat:
- Around line 37-43: Extract the CAPY clone logic into a single reusable batch
label (e.g., :clone_capy) that computes CAPY_BRANCH/CAPY_TARGET using the
existing variables (CAPY_BRANCH, CAPY_TARGET, DRONE_TARGET_BRANCH,
BOOST_CI_TARGET_BRANCH) and performs the git clone; ensure the clone destination
is quoted (use "%BOOST_ROOT%\libs\capy") to avoid space splitting on Windows,
then replace each duplicated clone block (the four occurrences with the git
clone -b !CAPY_BRANCH! ... !BOOST_ROOT!\libs\capy --depth 1) with a call/jump to
the new label so all branches use the centralized logic.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 36f3e770-b846-4fd7-a2af-97a031bb44cb

📥 Commits

Reviewing files that changed from the base of the PR and between 8c989c9 and a047831.

⛔ Files ignored due to path filters (4)
  • test/cmake_test/CMakeLists.txt is excluded by !**/test/**
  • test/unit/CMakeLists.txt is excluded by !**/test/**
  • test/unit/Jamfile is excluded by !**/test/**
  • test/unit/test_utils.hpp is excluded by !**/test/**
📒 Files selected for processing (6)
  • .drone.star
  • .drone/drone.bat
  • .drone/drone.sh
  • cmake/CorosioBuild.cmake
  • include/boost/corosio/detail/timer_service.hpp
  • include/boost/corosio/io/io_timer.hpp
🚧 Files skipped from review as they are similar to previous changes (2)
  • .drone/drone.sh
  • .drone.star

@codecov
Copy link

codecov bot commented Mar 4, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 76.07%. Comparing base (4fc38ac) to head (a047831).
⚠️ Report is 1 commits behind head on develop.

Additional details and impacted files

Impacted file tree graph

@@             Coverage Diff             @@
##           develop     #190      +/-   ##
===========================================
+ Coverage    76.01%   76.07%   +0.05%     
===========================================
  Files           98       98              
  Lines        10533    10534       +1     
  Branches      2390     2390              
===========================================
+ Hits          8007     8014       +7     
  Misses        1801     1801              
+ Partials       725      719       -6     
Flag Coverage Δ
windows 69.74% <100.00%> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
include/boost/corosio/detail/timer_service.hpp 93.30% <ø> (ø)
include/boost/corosio/io/io_timer.hpp 95.00% <100.00%> (+0.12%) ⬆️

... and 3 files with indirect coverage changes


Continue to review full report in Codecov by Sentry.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 4fc38ac...a047831. Read the comment docs.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@mvandeberg mvandeberg merged commit 9132ffc into cppalliance:develop Mar 4, 2026
38 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants