iwyu: --check_also=*.h ? #329

issue maflcko opened this issue on August 2, 2026
  1. maflcko commented at 7:27 AM on August 2, 2026: contributor

    Copied from a review comment:

    The CI runs IWYU and it only audits "the input .cc file and its associated .h files" (e.g. foo.cpp also checks foo.h). type-string.h has no matching .cpp so it isn't audited.

    -  set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE "${IWYU_EXECUTABLE};-Xiwyu;--error")
    +  set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE "${IWYU_EXECUTABLE};-Xiwyu;--error;-Xiwyu;--check_also=${PROJECT_SOURCE_DIR}/include/mp/*.h")
    

    With the above diff it checks the headers too and can check for type-string.h. (Bitcoin core also uses --check_also for primitive headers):

    /home/vinicius/Code/my/libmultiprocess/include/mp/type-string.h should add these lines:
    #include <string>     // for string
    namespace mp { struct InvokeContext; }
    
    /home/vinicius/Code/my/libmultiprocess/include/mp/type-string.h should remove these lines:
    - #include <ranges>  // lines 11-11
    

    It also flag a lot of what there is currently (10+ header files) and can also make false positives: note the #include <variant> // for tuple which doens't make sense for proxy-io.h:

    /home/vinicius/Code/my/libmultiprocess/include/mp/proxy-io.h should add these lines:
    #include <capnp/capability.h>          // for Capability, CallContext, Capab...
    #include <capnp/common.h>              // for Void, word
    #include <capnp/message.h>             // for MallocMessageBuilder, ReaderOp...
    #include <capnp/rpc-twoparty.capnp.h>  // for VatId, Side, Side_9fd69ebc87b9...
    #include <capnp/rpc.h>                 // for RpcSystem, makeRpcClient, make...
    #include <kj/async-io.h>               // for LowLevelAsyncIoProvider, Async...
    #include <kj/async-prelude.h>          // for ReadyNow
    #include <kj/async.h>                  // for TaskSet, Promise, READY_NOW
    #include <kj/common.h>                 // for mv, ArrayPtr, KJ_IF_MAYBE, Maybe
    #include <kj/exception.h>              // for runCatchingExceptions, Exception
    #include <kj/memory.h>                 // for Own, heap
    #include <kj/string.h>                 // for KJ_STRINGIFY, StringPtr
    #include <list>                        // for _List_iterator, list, _List_co...
    #include <tuple>                       // for tuple
    #include <utility>                     // for forward, move
    #include <variant>                     // for tuple
    #include <vector>                      // for vector
    namespace mp { class Connection; }
    namespace mp { class EventLoop; }
    namespace mp { template <typename Interface> struct ProxyClient; }
    namespace mp { template <typename Interface> struct ProxyServer; }
    

    So I believe this isn't a one line fix, it would require a one-time PR to manually audit and fix and map the false positives in a mapping file and then enabling --check_also and --mapping_file with the mapping file to handle false positives on the CI. Maybe this is not worth effort.

    This is just what I found poking around, if there's a better way id like to hear it.

    Originally posted by @ViniciusCestarii in #307 (review)

  2. hebasto commented at 9:52 AM on August 2, 2026: member

    It ... can also make false positives:

    CI currently uses include-what-you-use 0.24. Bumping to 0.26 would pull in several bug fixes.

  3. maflcko commented at 10:31 AM on August 2, 2026: contributor

    It ... can also make false positives:

    CI currently uses include-what-you-use 0.24. Bumping to 0.26 would pull in several bug fixes.

    I tried the bump in https://github.com/bitcoin-core/libmultiprocess/pull/296


github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin-core/libmultiprocess. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-08-05 20:30 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me