This PR continues the ongoing effort to enforce IWYU warnings.
See Developer Notes.
This PR continues the ongoing effort to enforce IWYU warnings.
See Developer Notes.
<!--e57a25ab6845829454e8d69fc972939a-->
The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.
<!--021abf342d371248e50ceaed478a90ca-->
See the guideline for information on the review process.
| Type | Reviewers |
|---|---|
| ACK | maflcko, BrandonOdiwuor, achow101 |
If your review is incorrectly listed, please copy-paste <code><!--meta-tag:bot-skip--></code> into the comment that the bot should ignore.
<!--174a7506f384e20aa4161008e828411d-->
Reviewers, this pull request conflicts with the following ones:
-dbcache with system RAM by l0rinc)_MiB/_GiB consistently for byte conversions by l0rinc)If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.
<!--5faf32d7da4f0f540f40219e4f7537a3-->
In file included from /home/admin/actions-runner/_work/_temp/src/hash.h:16:
/home/admin/actions-runner/_work/_temp/src/uint256.h:150:17: error: no member named 'HexDigit' in the global namespace
150 | *p1 = ::HexDigit(str[--digits]);
| ^~~~~~~~
/home/admin/actions-runner/_work/_temp/src/uint256.h:152:38: error: no member named 'HexDigit' in the global namespace
152 | *p1 |= ((unsigned char)::HexDigit(str[--digits]) << 4);
| ^~~~~~~~
2 errors generated.
<!--85328a0da195eb286784d51f73fa0af9-->
🚧 At least one of the CI tasks failed.
<sub>Task Valgrind, fuzz: https://github.com/bitcoin/bitcoin/actions/runs/21484505843/job/61889746047</sub>
<sub>LLM reason (✨ experimental): Compilation failed due to missing #include <vector> causing std::vector to be undefined in string.h and related code.</sub>
<details><summary>Hints</summary>
Try to run the tests locally, according to the documentation. However, a CI failure may still happen due to a number of reasons, for example:
Possibly due to a silent merge conflict (the changes in this pull request being incompatible with the current code in the target branch). If so, make sure to rebase on the latest commit of the target branch.
A sanitizer issue, which can only be found by compiling with the sanitizer and running the affected test.
An intermittent issue.
Leave a comment here, if you need help tracking down a confusing failure.
</details>
Seems pretty odd that IWYU can be "passing" here, but nothing actually compiles.
7 | @@ -8,13 +8,16 @@ 8 | # libc symbols. 9 | { "symbol": ["AT_HWCAP", "private", "<sys/auxv.h>", "public"] }, 10 | { "symbol": ["AT_HWCAP2", "private", "<sys/auxv.h>", "public"] }, 11 | + { "symbol": ["sched_param", "private", "<sched.h>", "public"] },
Can you link to the upstream issue / changes for all of these as well?
I don't see sched_param mentioned in https://github.com/include-what-you-use/include-what-you-use/issues/1809. Are you opening separate issues for different symbols, or just adding new missing symbols to https://github.com/include-what-you-use/include-what-you-use/issues/1809? Any reason to not add the missing mappings upstream; otherwise it seems like we are just accumulating workarounds for things that are not being fixed.
I don't see
sched_parammentioned in include-what-you-use/include-what-you-use#1809.
An upstream fix has been proposed in https://github.com/include-what-you-use/include-what-you-use/pull/1918.
Any reason to not add the missing mappings upstream; otherwise it seems like we are just accumulating workarounds for things that are not being fixed.
Fixed upstream in https://github.com/include-what-you-use/include-what-you-use/pull/1923.
7 | @@ -8,13 +8,16 @@ 8 | # libc symbols. 9 | { "symbol": ["AT_HWCAP", "private", "<sys/auxv.h>", "public"] }, 10 | { "symbol": ["AT_HWCAP2", "private", "<sys/auxv.h>", "public"] }, 11 | + { "symbol": ["sched_param", "private", "<sched.h>", "public"] }, 12 | 13 | # Fixed in https://github.com/include-what-you-use/include-what-you-use/pull/1706.
Fixed in https://github.com/include-what-you-use/include-what-you-use/pull/1706.
This was fixed in IWYU 0.25, which we are using, so this whole block should be able to be dropped?
8 | #include <util/syserror.h> 9 | 10 | +#include <string> 11 | + 12 | #if (defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)) 13 | -#include <pthread.h>
this doesn't look like an iwyu change, which only runs on linux, and neither on freebsd, nor WIN32, so it seems best to commit this separately
Rebased on top of merged bitcoin/bitcoin#34454.
Rebased on top of merged bitcoin/bitcoin#34460.
Rebased on top of merged bitcoin/bitcoin#34462.
Rebased to resolve a conflict with merged bitcoin/bitcoin#34455.
5 | @@ -6,8 +6,11 @@ 6 | #ifndef BITCOIN_UTIL_TIME_H 7 | #define BITCOIN_UTIL_TIME_H 8 | 9 | +#include <compat/compat.h>
Why is compat.h being added here (with sys/time.h being added to it), rather than just including sys/time.h here? It seems like compat.h is starting to become a catch-all for includes, which is going in the opposite of the direction we want (and defeats the point of IWYU).
Why is
compat.hbeing added here (withsys/time.hbeing added to it), rather than just includingsys/time.hhere?
Without #include <compat/compat.h>, the code has to be:
#ifdef WIN32
#include <winsock2.h>
#else
#include <sys/time.h>
#endif
This was actually my first iteration while working on this PR.
It seems like
compat.his starting to become a catch-all for includes, which is going in the opposite of the direction we want (and defeats the point of IWYU).
I agree. It would be great to have clearly documented use cases for compat.h.
Without #include <compat/compat.h>, the code has to be:
What is wrong with that code?
Also, the winsock2.h change seems unrelated, given IWYU is not run for Windows.
Also, the
winsock2.hchange seems unrelated, given IWYU is not run for Windows.
We still cross-compile for it and support native Windows builds. The winsock2.h header defines the timeval structure used here: https://github.com/bitcoin/bitcoin/blob/9f8764c814ead48d45b3822dfcc4cc2b3bda80d6/src/util/time.h#L151-L159
The code currently compiles without it only because of transitive includes, which is going in the opposite of the direction we want.
Sure, just pointing out that the (Windows) diff above would not actually be tested by, or related to any IWYU changes here (it would be good if you documented in commit mesages, when certain changes have been made because of Windows, rather than following the IWYU output). In any case, I don't think the correct solution is to continue adding includes to compat, undermining IWYU.
Without #include <compat/compat.h>, the code has to be:
What is wrong with that code?
I think it is missing the IWYU export. Generally, those should be avoided, but when it comes to compat headers, I think there is a benefit to just have them imported once to get one symbol cross-platform and then IWYU export them.
Otherwise, all call-sites will have to add:
#ifdef WIN32
#include <winsock2.h>
#else
#include <sys/time.h>
#endif
,which is verbose, and hard to review, and easy to get wrong: As you say iwyu is not run on Windows and the transitive include can hide a missing winsock2 include.
So I think the options are either:
Otherwise, all call-sites will have to add:
Isn't this the only callsite though? I don't really see why we'd add #include <sys/time.h> to compat.h, just to have it included hundreds of places it isn't needed, for the sake of saving 1 #ifdef.
I think before we make any more changes, we need to decide if we are actually doing IWYU, or only when it's convenient/not inconvenient for Windows, and otherwise bundling things in 1 header to include everywhere else.
Isn't this the only callsite though?
$ git grep -l timeval -- src ":(exclude)src/leveldb" ":(exclude)src/secp256k1"
src/crypto/ctaes/bench.c
src/httpserver.cpp
src/httpserver.h
src/randomenv.cpp
src/torcontrol.cpp
src/util/sock.cpp
src/util/time.cpp
src/util/time.h
Also, compat.h already includes sys/select.h, which also defines timeval. So why does sys/time.h need to be added to compat.h?
Alternatively, we can introduce a new compat_time.h header, which exports both winsock2.h and sys/time.h, and specify a new mapping in iwyu/bitcoin.core.imp:
{ "symbol": ["timeval", "private", "<compat_time.h>", "public"] },
Isn't this the only callsite though?
$ git grep -l timeval -- src ":(exclude)src/leveldb" ":(exclude)src/secp256k1" src/crypto/ctaes/bench.c src/httpserver.cpp src/httpserver.h src/randomenv.cpp src/torcontrol.cpp src/util/sock.cpp src/util/time.cpp src/util/time.h
Right, my understanding is that all those would have to add the same
#ifdef WIN32
#include <winsock2.h>
#else
#include <sys/time.h>
#endif
Alternatively, we can introduce a new
compat_time.hheader, which exports bothwinsock2.handsys/time.h, and specify a new mapping iniwyu/bitcoin.core.imp:{ "symbol": ["timeval", "private", "<compat_time.h>", "public"] },
Yeah, that is a bit cleaner than the "iwyu export" hack. Maybe it can be named ./src/compat/time.h though?
What is the point of a new file, with a new mapping, if the symbol definition is already (correctly) coming from compat.h?
Not sure how heavy the full compat net stack headers are to parse every time util/time.h is included. It may be faster to just include what is needed via compat/time.h instead of compat/compat.h, but I haven't benchmarked this.
Is the long term plan to break up compat.h, into many more of these mini-compat headers, and have many new includes (which themselves are some #ifdef logic + includes) in every file that previously only included compat.h? I do wonder if that will make it more or less likely to run into issues like #34454, or if that is really worth it to save some (hopefully comparatively ) small amount of code duplication/preprocessor time.
I'd say it would just be two:
But no strong opinion. Leaving this pull as-is is also fine.
I think it at least needs to add a mapping / fix for the IWYU bug (along with reporting upstream). No code changes are needed in compat.h, because timeval is already defined by sys/select.h.
along with reporting upstream
https://github.com/include-what-you-use/include-what-you-use/pull/1927.
Not sure how heavy the full compat net stack headers are to parse every time util/time.h is included. It may be faster to just include what is needed via compat/time.h instead of compat/compat.h, but I haven't benchmarked this.
A third alternative could be to just move MillisToTimeval into compat.h
After an offline discussion with @fanquake, I’ve concluded that using compat.h (or any other facade header) does not guarantee adherence to the 'include what you use' paradigm, as the timeval symbol can be defined in any of four different headers. Therefore, the decision of which header to include should be based on the headers already present in the given file.
Not sure how heavy the full compat net stack headers are to parse every time util/time.h is included. It may be faster to just include what is needed via compat/time.h instead of compat/compat.h, but I haven't benchmarked this.
A third alternative could be to just move
MillisToTimevalinto compat.h
Just benchmarked this and compat.h parsing takes less than 1% of the time.cpp compile time according to -ftime-trace https://clang.llvm.org/docs/ClangCommandLineReference.html#cmdoption-clang-ftime-trace
So I guess it is fine to leave this as-is for now.
Rebased to resolve a conflict with merged bitcoin/bitcoin#33878.
Rebased.
unrelated, but the clang-format in the ci container seems broken? It removes the newlines. E.g. https://github.com/bitcoin/bitcoin/actions/runs/21830259022/job/62995439943#step:11:1639
diff --git a/src/index/base.cpp b/src/index/base.cpp
index 39d4dc7..0547fd1 100644
--- a/src/index/base.cpp
+++ b/src/index/base.cpp
@@ -10,6 +10,7 @@
#include <interfaces/chain.h>
#include <interfaces/types.h>
#include <kernel/types.h>
+#include <logging.h>
#include <node/abort.h>
#include <node/blockstorage.h>
#include <node/context.h>
@@ -21,7 +22,6 @@
#include <uint256.h>
#include <undo.h>
#include <util/fs.h>
-#include <util/log.h>
#include <util/string.h>
#include <util/thread.h>
#include <util/threadinterrupt.h>
diff --git a/src/node/blockstorage.cpp b/src/node/blockstorage.cpp
index cf31c9a..a805719 100644
--- a/src/node/blockstorage.cpp
+++ b/src/node/blockstorage.cpp
@@ -3,7 +3,6 @@
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#include <node/blockstorage.h>
-
#include <arith_uint256.h>
#include <chain.h>
#include <consensus/params.h>
@@ -30,7 +29,6 @@
#include <util/check.h>
#include <util/expected.h>
#include <util/fs.h>
-#include <util/log.h>
#include <util/obfuscation.h>
#include <util/overflow.h>
#include <util/result.h>
@@ -40,7 +38,6 @@
#include <util/time.h>
#include <util/translation.h>
#include <validation.h>
-
#include <cerrno>
#include <compare>
#include <cstddef>
Rebased.
unrelated, but the clang-format in the ci container seems broken? It removes the newlines. E.g. https://github.com/bitcoin/bitcoin/actions/runs/21830259022/job/62995439943#step:11:1639
Looks like fix_includes.py strips empty lines and clang-format-diff.py fails to restore them.
unrelated, but the clang-format in the ci container seems broken? It removes the newlines. E.g. https://github.com/bitcoin/bitcoin/actions/runs/21830259022/job/62995439943#step:11:1639
Looks like
fix_includes.pystrips empty lines andclang-format-diff.pyfails to restore them.
Fixed in #34551.
The only conflicting PR has been merged, so now seems like a good time to get this reviewed.
Friendly ping @sedited @maflcko @willcl-ark :)
19 | #include <string> 20 | #include <string_view> 21 | #include <thread> 22 | 23 | +#ifdef WIN32 24 | +#include <winsock2.h>
What is this for (same in util/time.h)?
For the timeval type.
5 | @@ -6,7 +6,6 @@ 6 | #define BITCOIN_UTIL_THREADINTERRUPT_H 7 | 8 | #include <sync.h> 9 | -#include <threadsafety.h>
Is now the time to remove the pragma: export from sync.h, and retain this header, given it is used?
Thanks! Done.
Rebased.
<!--85328a0da195eb286784d51f73fa0af9-->
🚧 At least one of the CI tasks failed.
<sub>Task Windows-cross to x86_64, ucrt: https://github.com/bitcoin/bitcoin/actions/runs/21989888993/job/63533810608</sub>
<sub>LLM reason (✨ experimental): Test failure: std::future::wait_for is called with a plain long int instead of a std::chrono::duration, causing a type-mismatch in threadpool_tests.cpp.</sub>
<details><summary>Hints</summary>
Try to run the tests locally, according to the documentation. However, a CI failure may still happen due to a number of reasons, for example:
Possibly due to a silent merge conflict (the changes in this pull request being incompatible with the current code in the target branch). If so, make sure to rebase on the latest commit of the target branch.
A sanitizer issue, which can only be found by compiling with the sanitizer and running the affected test.
An intermittent issue.
Leave a comment here, if you need help tracking down a confusing failure.
</details>
4 | @@ -5,17 +5,15 @@ 5 | #ifndef BITCOIN_UTIL_FS_H 6 | #define BITCOIN_UTIL_FS_H 7 | 8 | -#include <tinyformat.h> 9 | +#include <tinyformat.h> // IWYU pragma: keep
Why do we need the // IWYU pragma: keep here?
An explanatory comment has been added.
7 | @@ -8,6 +8,7 @@
8 |
9 | #include <crypto/siphash.h>
10 | #include <logging/categories.h> // IWYU pragma: export
If this PR is going to fix util, then I think pretty much any (existing) pramga use, outside of the config header, should be getting comments (especially given the prior added one was another IWYU bug). Pragmas should be used sparingly, and explained when so.
I agree that all pragmas should eventually be documented. However, addressing the existing ones here would significantly expand the scope of this PR and likely introduce more merge conflicts.
Since these older pragmas might need to be removed entirely rather than just documented, it would be best to loop in the original authors or reviewers to make that call. I think it makes the most sense to tackle this cleanup in follow-up PRs.
However, addressing the existing ones here would significantly expand the scope of this PR
Looking at the current state of this PR, there are 4 instances of // IWYU pragma: export in src/util/. Documenting or removing them, seems in scope for a PR that is fixing all issues in src/util/. If not done now, we'll just have to come back again later and fix them anyways (and still have merge conflicts anyways, if there are any).
Since these older pragmas might need to be removed entirely rather than just documented, it would be best to loop in the original authors or reviewers to make that call.
Isn't the best case if you can just delete the pragma, and fix the includes? Otherwise I'm not sure what call they would need to make. Either the pragma is removed, and includes fixed, there is a IWYU bug (which can be documented), or a rationale is written for keeping the pragma (even if it isn't needed)?
Looking at the current state of this PR, there are 4 instances of
// IWYU pragma: exportinsrc/util/. Documenting or removing them, seems in scope for a PR that is fixing all issues insrc/util/.
Should be resolved now.
Rebased to resolve a conflict with merged bitcoin/bitcoin#34823.
<!--85328a0da195eb286784d51f73fa0af9-->
🚧 At least one of the CI tasks failed.
<sub>Task 32 bit ARM: https://github.com/bitcoin/bitcoin/actions/runs/23304811918/job/67775781260</sub>
<sub>LLM reason (✨ experimental): CI failed during the C++ build because logging.h references MakeUCharSpan that isn’t declared (compile error in SourceLocationHasher while compiling migrate.cpp).</sub>
<details><summary>Hints</summary>
Try to run the tests locally, according to the documentation. However, a CI failure may still happen due to a number of reasons, for example:
Possibly due to a silent merge conflict (the changes in this pull request being incompatible with the current code in the target branch). If so, make sure to rebase on the latest commit of the target branch.
A sanitizer issue, which can only be found by compiling with the sanitizer and running the affected test.
An intermittent issue.
Leave a comment here, if you need help tracking down a confusing failure.
</details>
Ready for review.
7 | @@ -8,11 +8,11 @@ 8 | #include <attributes.h> 9 | 10 | #include <atomic> 11 | -#include <cassert> // IWYU pragma: export
This change effectively reverts fa971c09f24887d4848082c551d4eed98e7f4edc, which was motivated as follows:
This avoids having to include both headers when
assertandAssertare used at the same time.
I believe that's a minor convenience that undermines the "include-what-you-use" paradigm.
There is another reason: A plain cassert include is dangerous, because it lacks the
#if defined(NDEBUG)
#error "Cannot compile without assertions!"
#endif
My preference would be to just leave this as-is, or add a comment why it should be left as-is
I understand your idea.
However, it creates a chain of implicit includes due to this:https://github.com/bitcoin/bitcoin/blob/0d2428765d8a13e36a3cf5733417243fb0169faf/src/util/log.h#L12-L14
Maybe, a new header would be reasonable:
// src/util/assert.h
// We use `util/assert.h` to provide the `assert()` macro
// to ensure that `NDEBUG` is not defined.
#include <cassert> // IWYU pragma: export
#if defined(NDEBUG)
#error "Cannot compile without assertions!"
#endif
?
Maybe, a new header would be reasonable:
How would the new header solve the chain?
The new header seems to be about assert(), but log.h uses Assume, so I think moving this to a new header seems unrelated.
How would the new header solve the chain?
src/util/log.h won't implicitly include <cassert>.
Ok, sure, but including log.h would still "hide" check.h, so I don't see how the situation improves. Also, with assert.h, there will then be three patters in the code:
<cassert> + assert()<util/assert.h> + assert()<util/check.h> + Assert()Not sure if this is better. Also, it seems odd to motivate this based on a temporary include in log.h, which will likely be removed soon.
Again, my preference would be to just leave this as-is for now. If there truly is a reason to change something, it should come with a proper long-term motivation, so that it can be evaluated independently.
Thanks! Reworked.
Rebased on top of the merged bitcoin/bitcoin#34896.
A new circular dependency in the form of "clientversion -> util/translation -> util/check -> clientversion" appears to have been introduced.
A new circular dependency in the form of "clientversion -> util/translation -> util/check -> clientversion" appears to have been introduced.
Thanks! Fixed.
This was overlooked in bitcoin/bitcoin#34896.
7 | @@ -8,6 +8,8 @@ 8 | #include <tinyformat.h> 9 | #include <util/string.h> 10 | 11 | +// Including <cassert> rather than <util/check.h> 12 | +// to avoid a circular header dependency.
not sure this is the right fix. It seems odd that the header can not freely be used where devs want to use it, and instead requires manual workarounds and comments explaining them.
Also, it seems odd that the license info is placed along the version info. Just because the license is printed with the version does not mean it is the version.
So it could make sense to move-only the license info to a new module:
<details><summary>move-only</summary>
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index ad18115..967989c 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -100,2 +100,3 @@ add_library(bitcoin_common STATIC EXCLUDE_FROM_ALL
common/messages.cpp
+ common/license_info.cpp
common/netif.cpp
diff --git a/src/bitcoin-cli.cpp b/src/bitcoin-cli.cpp
index 2c02d87..b0caf2d 100644
--- a/src/bitcoin-cli.cpp
+++ b/src/bitcoin-cli.cpp
@@ -10,2 +10,3 @@
#include <common/args.h>
+#include <common/license_info.h>
#include <common/system.h>
diff --git a/src/bitcoin-tx.cpp b/src/bitcoin-tx.cpp
index fdff656..d4702a9 100644
--- a/src/bitcoin-tx.cpp
+++ b/src/bitcoin-tx.cpp
@@ -10,2 +10,3 @@
#include <common/args.h>
+#include <common/license_info.h>
#include <common/system.h>
diff --git a/src/bitcoin-util.cpp b/src/bitcoin-util.cpp
index a6fd026..aa3fd30 100644
--- a/src/bitcoin-util.cpp
+++ b/src/bitcoin-util.cpp
@@ -12,2 +12,3 @@
#include <common/args.h>
+#include <common/license_info.h>
#include <common/system.h>
diff --git a/src/bitcoin-wallet.cpp b/src/bitcoin-wallet.cpp
index 6811f8c..9b0136d 100644
--- a/src/bitcoin-wallet.cpp
+++ b/src/bitcoin-wallet.cpp
@@ -10,2 +10,3 @@
#include <common/args.h>
+#include <common/license_info.h>
#include <common/system.h>
diff --git a/src/bitcoin.cpp b/src/bitcoin.cpp
index 5d42bb0..e17bd13 100644
--- a/src/bitcoin.cpp
+++ b/src/bitcoin.cpp
@@ -9,2 +9,3 @@
#include <common/system.h>
+#include <common/license_info.h>
#include <util/fs.h>
diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp
index 32db3e7..3ec23f7 100644
--- a/src/bitcoind.cpp
+++ b/src/bitcoind.cpp
@@ -10,2 +10,3 @@
#include <common/args.h>
+#include <common/license_info.h>
#include <common/init.h>
diff --git a/src/clientversion.cpp b/src/clientversion.cpp
index 8661011..3c16990 100644
--- a/src/clientversion.cpp
+++ b/src/clientversion.cpp
@@ -9,3 +9,2 @@
#include <util/string.h>
-#include <util/translation.h>
@@ -72,32 +71 @@ std::string FormatSubVersion(const std::string& name, int nClientVersion, const
}
-
-std::string CopyrightHolders(const std::string& strPrefix)
-{
- const auto copyright_devs = strprintf(_(COPYRIGHT_HOLDERS), COPYRIGHT_HOLDERS_SUBSTITUTION).translated;
- std::string strCopyrightHolders = strPrefix + copyright_devs;
-
- // Make sure Bitcoin Core copyright is not removed by accident
- if (copyright_devs.find("Bitcoin Core") == std::string::npos) {
- strCopyrightHolders += "\n" + strPrefix + "The Bitcoin Core developers";
- }
- return strCopyrightHolders;
-}
-
-std::string LicenseInfo()
-{
- const std::string URL_SOURCE_CODE = "<https://github.com/bitcoin/bitcoin>";
-
- return CopyrightHolders(strprintf(_("Copyright (C) %i-%i"), 2009, COPYRIGHT_YEAR).translated + " ") + "\n" +
- "\n" +
- strprintf(_("Please contribute if you find %s useful. "
- "Visit %s for further information about the software."),
- CLIENT_NAME, "<" CLIENT_URL ">")
- .translated +
- "\n" +
- strprintf(_("The source code is available from %s."), URL_SOURCE_CODE).translated +
- "\n" +
- "\n" +
- _("This is experimental software.") + "\n" +
- strprintf(_("Distributed under the MIT software license, see the accompanying file %s or %s"), "COPYING", "<https://opensource.org/license/MIT>").translated +
- "\n";
-}
diff --git a/src/clientversion.h b/src/clientversion.h
index 9d09e50..f4822a1 100644
--- a/src/clientversion.h
+++ b/src/clientversion.h
@@ -36,7 +36,2 @@ std::string FormatSubVersion(const std::string& name, int nClientVersion, const
-std::string CopyrightHolders(const std::string& strPrefix);
-
-/** Returns licensing information (for -version) */
-std::string LicenseInfo();
-
#endif // RC_INVOKED
diff --git a/src/common/license_info.cpp b/src/common/license_info.cpp
new file mode 100644
index 0000000..5319085
--- /dev/null
+++ b/src/common/license_info.cpp
@@ -0,0 +1,44 @@
+// Copyright (c) The Bitcoin Core developers
+// Distributed under the MIT software license, see the accompanying
+// file COPYING or https://opensource.org/license/mit/.
+
+#include <bitcoin-build-config.h> // IWYU pragma: keep
+
+#include <common/license_info.h>
+
+#include <tinyformat.h>
+#include <util/string.h>
+#include <util/translation.h>
+
+#include <string>
+
+std::string CopyrightHolders(const std::string& strPrefix)
+{
+ const auto copyright_devs = strprintf(_(COPYRIGHT_HOLDERS), COPYRIGHT_HOLDERS_SUBSTITUTION).translated;
+ std::string strCopyrightHolders = strPrefix + copyright_devs;
+
+ // Make sure Bitcoin Core copyright is not removed by accident
+ if (copyright_devs.find("Bitcoin Core") == std::string::npos) {
+ strCopyrightHolders += "\n" + strPrefix + "The Bitcoin Core developers";
+ }
+ return strCopyrightHolders;
+}
+
+std::string LicenseInfo()
+{
+ const std::string URL_SOURCE_CODE = "<https://github.com/bitcoin/bitcoin>";
+
+ return CopyrightHolders(strprintf(_("Copyright (C) %i-%i"), 2009, COPYRIGHT_YEAR).translated + " ") + "\n" +
+ "\n" +
+ strprintf(_("Please contribute if you find %s useful. "
+ "Visit %s for further information about the software."),
+ CLIENT_NAME, "<" CLIENT_URL ">")
+ .translated +
+ "\n" +
+ strprintf(_("The source code is available from %s."), URL_SOURCE_CODE).translated +
+ "\n" +
+ "\n" +
+ _("This is experimental software.") + "\n" +
+ strprintf(_("Distributed under the MIT software license, see the accompanying file %s or %s"), "COPYING", "<https://opensource.org/license/MIT>").translated +
+ "\n";
+}
diff --git a/src/common/license_info.h b/src/common/license_info.h
new file mode 100644
index 0000000..65e9e8c
--- /dev/null
+++ b/src/common/license_info.h
@@ -0,0 +1,15 @@
+// Copyright (c) The Bitcoin Core developers
+// Distributed under the MIT software license, see the accompanying
+// file COPYING or https://opensource.org/license/mit/.
+
+#ifndef BITCOIN_COMMON_LICENSE_INFO_H
+#define BITCOIN_COMMON_LICENSE_INFO_H
+
+#include <string>
+
+std::string CopyrightHolders(const std::string& strPrefix);
+
+/** Returns licensing information (for -version) */
+std::string LicenseInfo();
+
+#endif // BITCOIN_COMMON_LICENSE_INFO_H
diff --git a/src/qt/splashscreen.cpp b/src/qt/splashscreen.cpp
index 553f678..5a89ce0 100644
--- a/src/qt/splashscreen.cpp
+++ b/src/qt/splashscreen.cpp
@@ -9,2 +9,3 @@
#include <clientversion.h>
+#include <common/license_info.h>
#include <common/system.h>
diff --git a/src/qt/utilitydialog.cpp b/src/qt/utilitydialog.cpp
index 99a3a83..5784b31 100644
--- a/src/qt/utilitydialog.cpp
+++ b/src/qt/utilitydialog.cpp
@@ -14,2 +14,3 @@
#include <common/args.h>
+#include <common/license_info.h>
#include <init.h>
diff --git a/src/test/fuzz/string.cpp b/src/test/fuzz/string.cpp
index d315633..4402caa 100644
--- a/src/test/fuzz/string.cpp
+++ b/src/test/fuzz/string.cpp
@@ -7,2 +7,3 @@
#include <common/args.h>
+#include <common/license_info.h>
#include <common/messages.h>
</details>
not sure this is the right fix. It seems odd that the header can not freely be used where devs want to use it, and instead requires manual workarounds and comments explaining them.
Also, it seems odd that the license info is placed along the version info. Just because the license is printed with the version does not mean it is the version.
So it could make sense to move-only the license info to a new module:
Thanks! Your patch has been incorporated.
7 | + 8 | +#include <util/check.h> 9 | + 10 | #include <array> 11 | -#include <vector> 12 | +#include <cstddef>
I see compare and span are in the header of this module, but isn't iwyu supposed to include them here as well?
Apparently, it is not. See https://github.com/include-what-you-use/include-what-you-use/issues/919.
Here are more details:
// We have a rule that if foo.h #includes bar.h, foo.cc doesn't need
// to #include bar.h as well, but instead gets it 'automatically'
// via foo.h. We say that 'foo.h' is an "associated header" for
// foo.cc. Make sure we ignore self-includes, though!
// iwyu_output.cc gets upset if a file is its own associated header.
if (includer == main_file_ && includee != includer &&
BelongsToMainCompilationUnit(includer, includee)) {
GetFromFileInfoMap(includer)
->AddAssociatedHeader(GetFromFileInfoMap(includee));
VERRS(4) << "Marked " << GetFilePath(includee)
<< " as associated header of " << GetFilePath(includer) << ".\n";
Ah, I see. Good to know, so this is no bug, but intended behavior. Also, it doesn't really matter, as long as the include is there one way or another. Let's recall the goal here is to avoid compile failures due to missing includes. And the goal is achieved with the changes in this pull request. (Feel free to close the two threads for now)
2 | @@ -3,23 +3,21 @@ 3 | // file COPYING or http://www.opensource.org/licenses/mit-license.php. 4 | 5 | #include <util/fs.h> 6 | + 7 | +#include <util/check.h> 8 | #include <util/syserror.h> 9 | 10 | +#include <cerrno> 11 | +#include <string>
same here (cstdio)
just two nits/questions but nothing blocking
review ACK 8b49e2dd4eed93d08a3d9681d444aaf441ab0037 👘
<details><summary>Show signature</summary>
Signature:
untrusted comment: signature from minisign secret key on empty file; verify via: minisign -Vm "${path_to_any_empty_file}" -P RWTRmVTMeKV5noAMqVlsMugDDCyyTSbA3Re5AkUrhvLVln0tSaFWglOw -x "${path_to_this_whole_four_line_signature_blob}"
RUTRmVTMeKV5npGrKx1nqXCw5zeVHdtdYURB/KlyA/LMFgpNCs+SkW9a8N95d+U4AP1RJMi+krxU1A3Yux4bpwZNLvVBKy0wLgM=
trusted comment: review ACK 8b49e2dd4eed93d08a3d9681d444aaf441ab0037 👘
KDKbNGvUrG8+dZ703Dnk1AO/tm/f0rvdF3zHf/KWuNMbUSbXHI1p9DkgMC0C2r+D7KKA2JhscuYGS5MGEJN3BA==
</details>
Code Review ACK 8b49e2dd4eed93d08a3d9681d444aaf441ab0037
I manually enabled IWYU enforcement on src/util/ (and the existing enforced modules) on master and compared the results with this PR.
<details> <summary>Command used to enable IWYU enforcement on master</summary>
FILES_WITH_ENFORCED_IWYU='/src/(((crypto|index|kernel|primitives|univalue/(lib|test)|util|zmq)/.*|common/license_info|node/blockstorage|node/utxo_snapshot|clientversion|core_io|signet)\.cpp)'
+ jq --arg patterns '/src/(((crypto|index|kernel|primitives|univalue/(lib|test)|util|zmq)/.*|common/license_info|node/blockstorage|node/utxo_snapshot|clientversion|core_io|signet)\.cpp)' 'map(select(.file | test($patterns)))' /home/runner/work/_temp/build/compile_commands.json
+ jq --arg patterns '/src/(((crypto|index|kernel|primitives|univalue/(lib|test)|util|zmq)/.*|common/license_info|node/blockstorage|node/utxo_snapshot|clientversion|core_io|signet)\.cpp)' 'map(select(.file | test($patterns) | not))' /home/runner/work/_temp/build/compile_commands.json
+ cd /home/runner/work/_temp
+ run_iwyu compile_commands_iwyu_errors.json
+ mv /home/runner/work/_temp/build/compile_commands_iwyu_errors.json /home/runner/work/_temp/build/compile_commands.json
+ python3 /include-what-you-use/iwyu_tool.py -p /home/runner/work/_temp/build -j4 -- -Xiwyu --cxx17ns -Xiwyu --mapping_file=/home/runner/work/_temp/contrib/devtools/iwyu/bitcoin.core.imp -Xiwyu --max_line_length=160 -Xiwyu '--check_also=*/primitives/*.h'
+ tee /tmp/iwyu_ci.out
(/home/runner/work/_temp/src/clientversion.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/clientversion.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/core_io.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/core_io.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/chainparams.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/chainparams.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/index/blockfilterindex.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/index/blockfilterindex.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/index/base.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/index/base.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/index/coinstatsindex.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/index/coinstatsindex.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/chain.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/chain.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/index/txospenderindex.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/index/txospenderindex.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/index/txindex.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/index/txindex.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/checks.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/checks.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/cs_main.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/cs_main.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/mempool_removal_reason.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/mempool_removal_reason.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/context.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/context.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/disconnected_transactions.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/disconnected_transactions.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/coinstats.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/coinstats.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/univalue/include/univalue.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/univalue/lib/univalue.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/univalue/lib/univalue_get.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/signet.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/signet.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/univalue/lib/univalue_read.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/univalue/lib/univalue_write.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/univalue/test/unitester.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/univalue/test/object.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/chacha20.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/chacha20.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/aes.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/aes.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/chacha20poly1305.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/chacha20poly1305.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/node/utxo_snapshot.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/node/utxo_snapshot.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/hex_base.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/hex_base.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/hmac_sha512.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/hmac_sha512.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/hkdf_sha256_32.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/hkdf_sha256_32.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/hmac_sha256.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/hmac_sha256.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/ripemd160.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/ripemd160.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/poly1305.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/poly1305.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/sha1.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/sha1.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/sha256_sse4.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/node/blockstorage.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/node/blockstorage.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/sha512.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/sha512.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/sha3.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/sha3.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/sha256.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/sha256.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/muhash.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/muhash.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/siphash.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/siphash.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/sha256_sse41.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/sha256_avx2.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/crypto/sha256_x86_shani.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/util/batchpriority.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/util/batchpriority.cpp has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/chaintype.h should add these lines:
#include <string_view> // for string_view
/home/runner/work/_temp/src/util/chaintype.h should remove these lines:
The full include-list for /home/runner/work/_temp/src/util/chaintype.h:
#include <optional> // for optional
#include <string> // for string
#include <string_view> // for string_view
---
(/home/runner/work/_temp/src/util/chaintype.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/util/bip32.h has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/bip32.cpp should add these lines:
#include <optional> // for optional
/home/runner/work/_temp/src/util/bip32.cpp should remove these lines:
The full include-list for /home/runner/work/_temp/src/util/bip32.cpp:
#include <util/bip32.h>
#include <tinyformat.h> // for format, formatTruncated, formatValue, makeFormatList, strprintf
#include <util/strencodings.h> // for ToIntegral
#include <cstdint> // for uint32_t
#include <cstdio> // for size_t
#include <optional> // for optional
#include <sstream> // for basic_istream, basic_stringstream, stringstream
---
(/home/runner/work/_temp/src/util/asmap.h has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/asmap.cpp should add these lines:
#include <string> // for basic_string
/home/runner/work/_temp/src/util/asmap.cpp should remove these lines:
- #include <clientversion.h> // lines 7-7
- #include <serialize.h> // lines 9-9
- #include <algorithm> // lines 15-15
The full include-list for /home/runner/work/_temp/src/util/asmap.cpp:
#include <util/asmap.h>
#include <hash.h> // for HashWriter
#include <streams.h> // for AutoFile
#include <uint256.h> // for uint256
#include <util/fs.h> // for PathToString, quoted, fopen, path
#include <util/log.h> // for LogPrintFormatInternal, LogWarning, LogInfo
#include <bit> // for bit_width
#include <cassert> // for assert
#include <cstddef> // for byte, size_t, to_integer
#include <cstdio> // for FILE
#include <span> // for span
#include <string> // for basic_string
#include <utility> // for pair
#include <vector> // for vector
---
/home/runner/work/_temp/src/util/check.h should add these lines:
#include <type_traits> // for is_constant_evaluated
/home/runner/work/_temp/src/util/check.h should remove these lines:
The full include-list for /home/runner/work/_temp/src/util/check.h:
#include <attributes.h> // for LIFETIMEBOUND
#include <atomic> // for atomic
#include <cassert>
#include <source_location> // for source_location
#include <stdexcept> // for runtime_error
#include <string> // for string
#include <string_view> // for string_view
#include <type_traits> // for is_constant_evaluated
#include <utility> // for forward
---
(/home/runner/work/_temp/src/util/check.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/util/bytevectorhash.h has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/bytevectorhash.cpp should add these lines:
#include <span> // for span
/home/runner/work/_temp/src/util/bytevectorhash.cpp should remove these lines:
The full include-list for /home/runner/work/_temp/src/util/bytevectorhash.cpp:
#include <util/bytevectorhash.h>
#include <crypto/siphash.h> // for CSipHasher
#include <random.h> // for FastRandomContext
#include <span> // for span
#include <vector> // for vector
---
(/home/runner/work/_temp/src/util/exception.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/util/exception.cpp has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/feefrac.h should add these lines:
#include <span> // for span
#include <utility> // for pair, swap
/home/runner/work/_temp/src/util/feefrac.h should remove these lines:
- #include <span.h> // lines 8-8
- #include <vector> // lines 14-14
The full include-list for /home/runner/work/_temp/src/util/feefrac.h:
#include <util/check.h> // for Assume, inline_assertion_check
#include <util/overflow.h> // for CeilDiv
#include <compare> // for strong_ordering, partial_ordering, weak_ordering
#include <cstdint> // for int64_t, int32_t, uint32_t, uint64_t
#include <span> // for span
#include <utility> // for pair, swap
---
/home/runner/work/_temp/src/util/feefrac.cpp should add these lines:
#include <cstddef> // for size_t
/home/runner/work/_temp/src/util/feefrac.cpp should remove these lines:
- #include <algorithm> // lines 6-6
- #include <vector> // lines 8-8
The full include-list for /home/runner/work/_temp/src/util/feefrac.cpp:
#include <util/feefrac.h>
#include <array> // for array
#include <cstddef> // for size_t
---
(/home/runner/work/_temp/src/util/exec.h has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/exec.cpp should add these lines:
#include <cstdlib> // for getenv
#include <system_error> // for error_code
/home/runner/work/_temp/src/util/exec.cpp should remove these lines:
- #include <util/subprocess.h> // lines 8-8
- #include <vector> // lines 11-11
The full include-list for /home/runner/work/_temp/src/util/exec.cpp:
#include <util/exec.h>
#include <unistd.h> // for size_t, execvp
#include <util/fs.h> // for path, PathFromString, is_regular_file, operator/
#include <cstdlib> // for getenv
#include <string> // for basic_string, string
#include <system_error> // for error_code
---
/home/runner/work/_temp/src/util/fs.h should add these lines:
/home/runner/work/_temp/src/util/fs.h should remove these lines:
- #include <tinyformat.h> // lines 8-8
- #include <ostream> // lines 15-15
- #include <system_error> // lines 18-18
The full include-list for /home/runner/work/_temp/src/util/fs.h:
#include <cstdio> // for FILE
#include <filesystem>
#include <functional> // for function
#include <iomanip> // for quoted
#include <ios> // for ostream
#include <string> // for basic_string, string, u8string
#include <string_view> // for string_view
#include <type_traits> // for is_same_v
#include <utility> // for move
---
/home/runner/work/_temp/src/util/fs.cpp should add these lines:
/home/runner/work/_temp/src/util/fs.cpp should remove these lines:
- #include <sys/file.h> // lines 11-11
- #include <sys/utsname.h> // lines 12-12
- #include <cstring> // lines 9-9
The full include-list for /home/runner/work/_temp/src/util/fs.cpp:
#include <util/fs.h>
#include <fcntl.h> // for flock, F_SETLK, F_WRLCK, O_RDWR, fcntl, open
#include <unistd.h> // for close
#include <util/syserror.h> // for SysErrorString
#include <cassert> // for assert
#include <cerrno> // for errno
#include <string> // for basic_string, string
---
(/home/runner/work/_temp/src/util/moneystr.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/util/moneystr.cpp has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/fs_helpers.h should add these lines:
#include <string> // for string
/home/runner/work/_temp/src/util/fs_helpers.h should remove these lines:
The full include-list for /home/runner/work/_temp/src/util/fs_helpers.h:
#include <util/fs.h> // for path, perms
#include <cstdint> // for uint64_t
#include <cstdio> // for FILE
#include <iosfwd> // for streamsize, streampos
#include <limits> // for numeric_limits
#include <optional> // for optional
#include <string> // for string
---
/home/runner/work/_temp/src/util/fs_helpers.cpp should add these lines:
#include <sys/types.h> // for off_t
/home/runner/work/_temp/src/util/fs_helpers.cpp should remove these lines:
The full include-list for /home/runner/work/_temp/src/util/fs_helpers.cpp:
#include <util/fs_helpers.h>
#include <bitcoin-build-config.h> // for HAVE_FDATASYNC, HAVE_POSIX_FALLOCATE
#include <fcntl.h> // for posix_fallocate
#include <sync.h> // for LOCK, MaybeCheckNotHeld, UniqueLock, GlobalMutex, GUARDED_BY
#include <sys/resource.h> // for rlimit, RLIMIT_NOFILE, getrlimit, rlim_t, setrlimit
#include <sys/types.h> // for off_t
#include <unistd.h> // for fdatasync, fsync, ftruncate
#include <util/fs.h> // for perms, FileLock, path, operator|, PathToString, fopen, filesystem_error, operator/, create_directories, exists
#include <util/log.h> // for LogError, LogPrintFormatInternal
#include <util/syserror.h> // for SysErrorString
#include <cerrno> // for errno, EINVAL
#include <fstream> // for basic_ifstream, basic_ios
#include <map> // for map
#include <memory> // for unique_ptr, make_unique
#include <optional> // for optional, nullopt, nullopt_t
#include <string> // for basic_string, string, operator<=>, operator==
#include <system_error> // for error_code
#include <utility> // for move
---
(/home/runner/work/_temp/src/util/serfloat.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/util/serfloat.cpp has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/signalinterrupt.h should add these lines:
/home/runner/work/_temp/src/util/signalinterrupt.h should remove these lines:
- #include <cstdlib> // lines 16-16
The full include-list for /home/runner/work/_temp/src/util/signalinterrupt.h:
#include <util/tokenpipe.h> // for TokenPipeEnd
#include <atomic> // for atomic
---
(/home/runner/work/_temp/src/util/signalinterrupt.cpp has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/readwritefile.h should add these lines:
#include <cstddef> // for size_t
/home/runner/work/_temp/src/util/readwritefile.h should remove these lines:
The full include-list for /home/runner/work/_temp/src/util/readwritefile.h:
#include <util/fs.h> // for path
#include <cstddef> // for size_t
#include <limits> // for numeric_limits
#include <string> // for string
#include <utility> // for pair
---
/home/runner/work/_temp/src/util/readwritefile.cpp should add these lines:
/home/runner/work/_temp/src/util/readwritefile.cpp should remove these lines:
- #include <limits> // lines 12-12
The full include-list for /home/runner/work/_temp/src/util/readwritefile.cpp:
#include <util/readwritefile.h>
#include <util/fs.h> // for fopen, path (ptr only)
#include <algorithm> // for min
#include <cstdio> // for fclose, FILE, feof, ferror, fread, fwrite
#include <string> // for basic_string, string
#include <utility> // for pair, make_pair
---
/home/runner/work/_temp/src/util/hasher.h should add these lines:
#include <span> // for span
/home/runner/work/_temp/src/util/hasher.h should remove these lines:
- #include <span.h> // lines 11-11
- #include <concepts> // lines 14-14
The full include-list for /home/runner/work/_temp/src/util/hasher.h:
#include <crypto/common.h> // for ReadLE64
#include <crypto/siphash.h> // for PresaltedSipHasher
#include <primitives/transaction.h> // for COutPoint, Txid, Wtxid
#include <uint256.h> // for uint256
#include <cstdint> // for uint32_t, uint64_t, uint8_t
#include <cstring> // for size_t, memcpy
#include <span> // for span
---
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/hasher.cpp should add these lines:
/home/runner/work/_temp/src/util/hasher.cpp should remove these lines:
- #include <span.h> // lines 7-7
The full include-list for /home/runner/work/_temp/src/util/hasher.cpp:
#include <util/hasher.h>
#include <crypto/siphash.h> // for CSipHasher
#include <random.h> // for FastRandomContext
---
(/home/runner/work/_temp/src/util/rbf.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/rbf.cpp should add these lines:
#include <vector> // for vector
/home/runner/work/_temp/src/util/rbf.cpp should remove these lines:
The full include-list for /home/runner/work/_temp/src/util/rbf.cpp:
#include <util/rbf.h>
#include <primitives/transaction.h> // for CTransaction, CTxIn
#include <vector> // for vector
---
/home/runner/work/_temp/src/util/strencodings.h should add these lines:
#include <span> // for span
/home/runner/work/_temp/src/util/strencodings.h should remove these lines:
- #include <crypto/hex_base.h> // lines 12-12
- #include <algorithm> // lines 16-16
The full include-list for /home/runner/work/_temp/src/util/strencodings.h:
#include <span.h> // for MakeUCharSpan, UCharCast
#include <util/string.h> // for TrimStringView
#include <array> // for array
#include <bit> // for bit_cast
#include <charconv> // for from_chars
#include <cstddef> // for size_t, byte
#include <cstdint> // for uint8_t, uint64_t, int64_t, uint16_t
#include <limits> // for numeric_limits
#include <optional> // for optional, nullopt
#include <span> // for span
#include <string> // for string, basic_string, hash, operator==
#include <string_view> // for string_view
#include <system_error> // for errc
#include <type_traits> // for is_integral_v
#include <vector> // for vector
---
/home/runner/work/_temp/src/util/strencodings.cpp should add these lines:
#include <compare> // for operator>
#include <sstream> // for basic_stringstream, basic_ostream, operator<<, stringstream
/home/runner/work/_temp/src/util/strencodings.cpp should remove these lines:
- #include <array> // lines 12-12
- #include <cstring> // lines 14-14
- #include <ostream> // lines 17-17
The full include-list for /home/runner/work/_temp/src/util/strencodings.cpp:
#include <util/strencodings.h>
#include <crypto/hex_base.h> // for HexDigit
#include <span.h> // for MakeUCharSpan
#include <util/overflow.h> // for CeilDiv
#include <cassert> // for assert
#include <compare> // for operator>
#include <limits> // for numeric_limits
#include <optional> // for optional, nullopt, nullopt_t, operator<=>
#include <sstream> // for basic_stringstream, basic_ostream, operator<<, stringstream
#include <string> // for basic_string, string, char_traits, operator+, operator<<
#include <vector> // for vector
---
(/home/runner/work/_temp/src/util/syserror.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/util/syserror.cpp has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/sock.h should add these lines:
#include <cstdint> // for uint8_t
#include <limits> // for numeric_limits
class CThreadInterrupt;
/home/runner/work/_temp/src/util/sock.h should remove these lines:
- #include <util/threadinterrupt.h> // lines 9-9
- #include <util/time.h> // lines 10-10
The full include-list for /home/runner/work/_temp/src/util/sock.h:
#include <compat/compat.h> // for socklen_t, SOCKET, size_t, ssize_t
#include <chrono> // for milliseconds
#include <cstdint> // for uint8_t
#include <limits> // for numeric_limits
#include <memory> // for shared_ptr, unique_ptr
#include <span> // for span
#include <string> // for string
#include <unordered_map> // for unordered_map
class CThreadInterrupt;
---
/home/runner/work/_temp/src/util/sock.cpp should add these lines:
#include <algorithm> // for min, find
#include <cassert> // for assert
#include <compare> // for operator>=, strong_ordering
#include <exception> // for exception
#include <utility> // for get, make_pair, pair
#include <vector> // for vector
/home/runner/work/_temp/src/util/sock.cpp should remove these lines:
- #include <common/system.h> // lines 7-7
The full include-list for /home/runner/work/_temp/src/util/sock.cpp:
#include <util/sock.h>
#include <compat/compat.h> // for size_t, socklen_t, INVALID_SOCKET, ssize_t, SOCKET_ERROR, WSAGetLastError, SOCKET, USE_POLL, fcntl, MSG_PEEK, close
#include <poll.h> // for pollfd, POLLIN, POLLOUT, POLLERR, POLLHUP, poll
#include <span.h> // for MakeUCharSpan
#include <tinyformat.h> // for format, formatTruncated, formatValue, makeFormatList, strprintf
#include <util/log.h> // for LogPrintFormatInternal, LogWarning
#include <util/syserror.h> // for SysErrorString
#include <util/threadinterrupt.h> // for CThreadInterrupt
#include <util/time.h> // for GetTime, count_milliseconds
#include <algorithm> // for min, find
#include <cassert> // for assert
#include <compare> // for operator>=, strong_ordering
#include <exception> // for exception
#include <memory> // for shared_ptr, unique_ptr, make_unique
#include <stdexcept> // for runtime_error
#include <string> // for basic_string, string
#include <utility> // for get, make_pair, pair
#include <vector> // for vector
---
/home/runner/work/_temp/src/util/string.h should add these lines:
#include <algorithm> // for equal, max
#include <cstddef> // for size_t, byte
#include <initializer_list> // for begin, end
#include <span> // for span
/home/runner/work/_temp/src/util/string.h should remove these lines:
- #include <span.h> // lines 8-8
- #include <cstring> // lines 12-12
The full include-list for /home/runner/work/_temp/src/util/string.h:
#include <algorithm> // for equal, max
#include <array> // for array
#include <cstddef> // for size_t, byte
#include <cstdint> // for uint8_t
#include <initializer_list> // for begin, end
#include <locale> // for locale
#include <optional> // for optional
#include <span> // for span
#include <sstream> // for basic_ostringstream, basic_ios::imbue, ostringstream
#include <string> // for basic_string, string, operator+
#include <string_view> // for string_view
#include <vector> // for vector
---
/home/runner/work/_temp/src/util/string.cpp should add these lines:
#include <iterator> // for distance
#include <memory> // for to_address
#include <stdexcept> // for runtime_error
/home/runner/work/_temp/src/util/string.cpp should remove these lines:
The full include-list for /home/runner/work/_temp/src/util/string.cpp:
#include <util/string.h>
#include <iterator> // for distance
#include <memory> // for to_address
#include <regex> // for regex, regex_replace
#include <stdexcept> // for runtime_error
#include <string> // for basic_string, string
---
/home/runner/work/_temp/src/util/thread.h should add these lines:
#include <string_view> // for string_view
/home/runner/work/_temp/src/util/thread.h should remove these lines:
- #include <string> // lines 9-9
The full include-list for /home/runner/work/_temp/src/util/thread.h:
#include <functional> // for function
#include <string_view> // for string_view
---
/home/runner/work/_temp/src/util/thread.cpp should add these lines:
/home/runner/work/_temp/src/util/thread.cpp should remove these lines:
- #include <utility> // lines 14-14
The full include-list for /home/runner/work/_temp/src/util/thread.cpp:
#include <util/thread.h>
#include <util/exception.h> // for PrintExceptionContinue
#include <util/log.h> // for LogInfo, LogPrintFormatInternal
#include <util/threadnames.h> // for ThreadRename
#include <exception> // for exception
#include <functional> // for function
#include <string> // for basic_string, string
---
(/home/runner/work/_temp/src/util/tokenpipe.h has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/tokenpipe.cpp should add these lines:
#include <sys/types.h> // for ssize_t
/home/runner/work/_temp/src/util/tokenpipe.cpp should remove these lines:
The full include-list for /home/runner/work/_temp/src/util/tokenpipe.cpp:
#include <util/tokenpipe.h>
#include <bitcoin-build-config.h> // for HAVE_DECL_PIPE2, HAVE_O_CLOEXEC
#include <fcntl.h> // for O_CLOEXEC
#include <sys/types.h> // for ssize_t
#include <unistd.h> // for close, pipe2, read, write
#include <cerrno> // for EINTR, errno
#include <optional> // for optional, nullopt, nullopt_t
---
(/home/runner/work/_temp/src/util/threadnames.h has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/threadnames.cpp should add these lines:
#include <algorithm> // for min
/home/runner/work/_temp/src/util/threadnames.cpp should remove these lines:
- #include <thread> // lines 7-7
- #include <utility> // lines 8-8
The full include-list for /home/runner/work/_temp/src/util/threadnames.cpp:
#include <util/threadnames.h>
#include <sys/prctl.h> // for PR_SET_NAME, prctl
#include <algorithm> // for min
#include <cstring> // for memcpy, size_t
#include <string> // for allocator, basic_string, string, char_traits, operator+
---
(/home/runner/work/_temp/src/util/threadinterrupt.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/util/threadinterrupt.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/zmq/zmqabstractnotifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/zmq/zmqabstractnotifier.cpp has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/time.h should add these lines:
#include <sys/time.h> // for timeval
#include <ctime> // for time_t
/home/runner/work/_temp/src/util/time.h should remove these lines:
The full include-list for /home/runner/work/_temp/src/util/time.h:
#include <sys/time.h> // for timeval
#include <chrono>
#include <cstdint> // for int64_t
#include <ctime> // for time_t
#include <optional> // for optional
#include <string> // for string
#include <string_view> // for string_view
---
/home/runner/work/_temp/src/util/time.cpp should add these lines:
#include <compare> // for strong_ordering, operator>=, operator>
/home/runner/work/_temp/src/util/time.cpp should remove these lines:
- #include <compat/compat.h> // lines 8-8
The full include-list for /home/runner/work/_temp/src/util/time.cpp:
#include <util/time.h>
#include <tinyformat.h> // for formatTruncated, formatValue, format, makeFormatList, strprintf
#include <util/check.h> // for Assert, inline_assertion_check, assert
#include <util/strencodings.h> // for ToIntegral
#include <array> // for array
#include <atomic> // for atomic, memory_order_relaxed
#include <chrono> // for year_month_day, duration, seconds, time_point, hh_mm_ss, day, month, year, days, floor, operator+, operator<=>, sys_s...
#include <compare> // for strong_ordering, operator>=, operator>
#include <optional> // for optional
#include <string> // for basic_string, string
#include <string_view> // for basic_string_view, string_view
#include <thread> // for sleep_for
---
(/home/runner/work/_temp/src/zmq/zmqnotificationinterface.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/zmq/zmqnotificationinterface.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/zmq/zmqutil.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/zmq/zmqutil.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/zmq/zmqrpc.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/zmq/zmqrpc.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/zmq/zmqpublishnotifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/zmq/zmqpublishnotifier.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/chain.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/chain.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/checks.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/checks.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/context.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/context.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/chainparams.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/chainparams.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/cs_main.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/cs_main.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/mempool_removal_reason.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/mempool_removal_reason.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/bitcoinkernel.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/bitcoinkernel.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/disconnected_transactions.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/disconnected_transactions.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/coinstats.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/kernel/coinstats.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.cpp has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/chaintype.h should add these lines:
#include <string_view> // for string_view
/home/runner/work/_temp/src/util/chaintype.h should remove these lines:
The full include-list for /home/runner/work/_temp/src/util/chaintype.h:
#include <optional> // for optional
#include <string> // for string
#include <string_view> // for string_view
---
(/home/runner/work/_temp/src/util/chaintype.cpp has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/check.h should add these lines:
#include <type_traits> // for is_constant_evaluated
/home/runner/work/_temp/src/util/check.h should remove these lines:
The full include-list for /home/runner/work/_temp/src/util/check.h:
#include <attributes.h> // for LIFETIMEBOUND
#include <atomic> // for atomic
#include <cassert>
#include <source_location> // for source_location
#include <stdexcept> // for runtime_error
#include <string> // for string
#include <string_view> // for string_view
#include <type_traits> // for is_constant_evaluated
#include <utility> // for forward
---
(/home/runner/work/_temp/src/util/check.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/node/utxo_snapshot.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/node/utxo_snapshot.cpp has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/expected.h should add these lines:
/home/runner/work/_temp/src/util/expected.h should remove these lines:
- #include <cassert> // lines 11-11
The full include-list for /home/runner/work/_temp/src/util/expected.h:
#include <attributes.h> // for LIFETIMEBOUND
#include <util/check.h> // for Assert
#include <exception> // for exception
#include <utility> // for get, move, in_place_index, forward
#include <variant> // for get, get_if, monostate, variant
---
(/home/runner/work/_temp/src/util/expected.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/signet.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/signet.cpp has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/feefrac.h should add these lines:
#include <span> // for span
#include <utility> // for pair, swap
/home/runner/work/_temp/src/util/feefrac.h should remove these lines:
- #include <span.h> // lines 8-8
- #include <vector> // lines 14-14
The full include-list for /home/runner/work/_temp/src/util/feefrac.h:
#include <util/check.h> // for Assume, inline_assertion_check
#include <util/overflow.h> // for CeilDiv
#include <compare> // for strong_ordering, partial_ordering, weak_ordering
#include <cstdint> // for int64_t, int32_t, uint32_t, uint64_t
#include <span> // for span
#include <utility> // for pair, swap
---
/home/runner/work/_temp/src/util/feefrac.cpp should add these lines:
#include <cstddef> // for size_t
/home/runner/work/_temp/src/util/feefrac.cpp should remove these lines:
- #include <algorithm> // lines 6-6
- #include <vector> // lines 8-8
The full include-list for /home/runner/work/_temp/src/util/feefrac.cpp:
#include <util/feefrac.h>
#include <array> // for array
#include <cstddef> // for size_t
---
/home/runner/work/_temp/src/util/fs.h should add these lines:
/home/runner/work/_temp/src/util/fs.h should remove these lines:
- #include <tinyformat.h> // lines 8-8
- #include <ostream> // lines 15-15
- #include <system_error> // lines 18-18
The full include-list for /home/runner/work/_temp/src/util/fs.h:
#include <cstdio> // for FILE
#include <filesystem>
#include <functional> // for function
#include <iomanip> // for quoted
#include <ios> // for ostream
#include <string> // for basic_string, string, u8string
#include <string_view> // for string_view
#include <type_traits> // for is_same_v
#include <utility> // for move
---
/home/runner/work/_temp/src/util/fs.cpp should add these lines:
/home/runner/work/_temp/src/util/fs.cpp should remove these lines:
- #include <sys/file.h> // lines 11-11
- #include <sys/utsname.h> // lines 12-12
- #include <cstring> // lines 9-9
The full include-list for /home/runner/work/_temp/src/util/fs.cpp:
#include <util/fs.h>
#include <fcntl.h> // for flock, F_SETLK, F_WRLCK, O_RDWR, fcntl, open
#include <unistd.h> // for close
#include <util/syserror.h> // for SysErrorString
#include <cassert> // for assert
#include <cerrno> // for errno
#include <string> // for basic_string, string
---
(/home/runner/work/_temp/src/node/blockstorage.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/node/blockstorage.cpp has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/fs_helpers.h should add these lines:
#include <string> // for string
/home/runner/work/_temp/src/util/fs_helpers.h should remove these lines:
The full include-list for /home/runner/work/_temp/src/util/fs_helpers.h:
#include <util/fs.h> // for path, perms
#include <cstdint> // for uint64_t
#include <cstdio> // for FILE
#include <iosfwd> // for streamsize, streampos
#include <limits> // for numeric_limits
#include <optional> // for optional
#include <string> // for string
---
/home/runner/work/_temp/src/util/fs_helpers.cpp should add these lines:
#include <sys/types.h> // for off_t
/home/runner/work/_temp/src/util/fs_helpers.cpp should remove these lines:
The full include-list for /home/runner/work/_temp/src/util/fs_helpers.cpp:
#include <util/fs_helpers.h>
#include <bitcoin-build-config.h> // for HAVE_FDATASYNC, HAVE_POSIX_FALLOCATE
#include <fcntl.h> // for posix_fallocate
#include <sync.h> // for LOCK, MaybeCheckNotHeld, UniqueLock, GlobalMutex, GUARDED_BY
#include <sys/resource.h> // for rlimit, RLIMIT_NOFILE, getrlimit, rlim_t, setrlimit
#include <sys/types.h> // for off_t
#include <unistd.h> // for fdatasync, fsync, ftruncate
#include <util/fs.h> // for perms, FileLock, path, operator|, PathToString, fopen, filesystem_error, operator/, create_directories, exists
#include <util/log.h> // for LogError, LogPrintFormatInternal
#include <util/syserror.h> // for SysErrorString
#include <cerrno> // for errno, EINVAL
#include <fstream> // for basic_ifstream, basic_ios
#include <map> // for map
#include <memory> // for unique_ptr, make_unique
#include <optional> // for optional, nullopt, nullopt_t
#include <string> // for basic_string, string, operator<=>, operator==
#include <system_error> // for error_code
#include <utility> // for move
---
(/home/runner/work/_temp/src/util/moneystr.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/util/moneystr.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/util/serfloat.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/util/serfloat.cpp has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/hasher.h should add these lines:
#include <span> // for span
/home/runner/work/_temp/src/util/hasher.h should remove these lines:
- #include <span.h> // lines 11-11
- #include <concepts> // lines 14-14
The full include-list for /home/runner/work/_temp/src/util/hasher.h:
#include <crypto/common.h> // for ReadLE64
#include <crypto/siphash.h> // for PresaltedSipHasher
#include <primitives/transaction.h> // for COutPoint, Txid, Wtxid
#include <uint256.h> // for uint256
#include <cstdint> // for uint32_t, uint64_t, uint8_t
#include <cstring> // for size_t, memcpy
#include <span> // for span
---
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/hasher.cpp should add these lines:
/home/runner/work/_temp/src/util/hasher.cpp should remove these lines:
- #include <span.h> // lines 7-7
The full include-list for /home/runner/work/_temp/src/util/hasher.cpp:
#include <util/hasher.h>
#include <crypto/siphash.h> // for CSipHasher
#include <random.h> // for FastRandomContext
---
(/home/runner/work/_temp/src/util/rbf.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/rbf.cpp should add these lines:
#include <vector> // for vector
/home/runner/work/_temp/src/util/rbf.cpp should remove these lines:
The full include-list for /home/runner/work/_temp/src/util/rbf.cpp:
#include <util/rbf.h>
#include <primitives/transaction.h> // for CTransaction, CTxIn
#include <vector> // for vector
---
/home/runner/work/_temp/src/util/signalinterrupt.h should add these lines:
/home/runner/work/_temp/src/util/signalinterrupt.h should remove these lines:
- #include <cstdlib> // lines 16-16
The full include-list for /home/runner/work/_temp/src/util/signalinterrupt.h:
#include <util/tokenpipe.h> // for TokenPipeEnd
#include <atomic> // for atomic
---
(/home/runner/work/_temp/src/util/signalinterrupt.cpp has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/util/tokenpipe.h has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/tokenpipe.cpp should add these lines:
#include <sys/types.h> // for ssize_t
/home/runner/work/_temp/src/util/tokenpipe.cpp should remove these lines:
The full include-list for /home/runner/work/_temp/src/util/tokenpipe.cpp:
#include <util/tokenpipe.h>
#include <bitcoin-build-config.h> // for HAVE_DECL_PIPE2, HAVE_O_CLOEXEC
#include <fcntl.h> // for O_CLOEXEC
#include <sys/types.h> // for ssize_t
#include <unistd.h> // for close, pipe2, read, write
#include <cerrno> // for EINTR, errno
#include <optional> // for optional, nullopt, nullopt_t
---
(/home/runner/work/_temp/src/util/threadnames.h has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/threadnames.cpp should add these lines:
#include <algorithm> // for min
/home/runner/work/_temp/src/util/threadnames.cpp should remove these lines:
- #include <thread> // lines 7-7
- #include <utility> // lines 8-8
The full include-list for /home/runner/work/_temp/src/util/threadnames.cpp:
#include <util/threadnames.h>
#include <sys/prctl.h> // for PR_SET_NAME, prctl
#include <algorithm> // for min
#include <cstring> // for memcpy, size_t
#include <string> // for allocator, basic_string, string, char_traits, operator+
---
(/home/runner/work/_temp/src/util/syserror.h has correct #includes/fwd-decls)
(/home/runner/work/_temp/src/util/syserror.cpp has correct #includes/fwd-decls)
/home/runner/work/_temp/src/util/time.h should add these lines:
#include <sys/time.h> // for timeval
#include <ctime> // for time_t
/home/runner/work/_temp/src/util/time.h should remove these lines:
The full include-list for /home/runner/work/_temp/src/util/time.h:
#include <sys/time.h> // for timeval
#include <chrono>
#include <cstdint> // for int64_t
#include <ctime> // for time_t
#include <optional> // for optional
#include <string> // for string
#include <string_view> // for string_view
---
/home/runner/work/_temp/src/util/time.cpp should add these lines:
#include <compare> // for strong_ordering, operator>=, operator>
/home/runner/work/_temp/src/util/time.cpp should remove these lines:
- #include <compat/compat.h> // lines 8-8
The full include-list for /home/runner/work/_temp/src/util/time.cpp:
#include <util/time.h>
#include <tinyformat.h> // for formatTruncated, formatValue, format, makeFormatList, strprintf
#include <util/check.h> // for Assert, inline_assertion_check, assert
#include <util/strencodings.h> // for ToIntegral
#include <array> // for array
#include <atomic> // for atomic, memory_order_relaxed
#include <chrono> // for year_month_day, duration, seconds, time_point, hh_mm_ss, day, month, year, days, floor, operator+, operator<=>, sys_s...
#include <compare> // for strong_ordering, operator>=, operator>
#include <optional> // for optional
#include <string> // for basic_string, string
#include <string_view> // for basic_string_view, string_view
#include <thread> // for sleep_for
---
+ python3 /include-what-you-use/fix_includes.py --nosafe_headers
(skipping /home/runner/work/_temp/src/clientversion.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/clientversion.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/primitives/transaction.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/primitives/transaction_identifier.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/primitives/transaction.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/primitives/block.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/primitives/block.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/core_io.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/core_io.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/kernel/chainparams.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/kernel/chainparams.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/index/blockfilterindex.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/index/blockfilterindex.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/index/base.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/index/base.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/index/coinstatsindex.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/index/coinstatsindex.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/kernel/chain.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/kernel/chain.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/index/txospenderindex.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/index/txospenderindex.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/index/txindex.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/index/txindex.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/kernel/checks.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/kernel/checks.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/kernel/cs_main.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/kernel/cs_main.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/kernel/mempool_removal_reason.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/kernel/mempool_removal_reason.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/kernel/context.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/kernel/context.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/kernel/disconnected_transactions.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/kernel/disconnected_transactions.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/kernel/coinstats.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/kernel/coinstats.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/univalue/include/univalue.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/univalue/lib/univalue.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/univalue/lib/univalue_get.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/signet.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/signet.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/univalue/lib/univalue_read.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/univalue/lib/univalue_write.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/univalue/test/unitester.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/univalue/test/object.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/chacha20.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/chacha20.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/aes.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/aes.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/chacha20poly1305.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/chacha20poly1305.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/node/utxo_snapshot.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/node/utxo_snapshot.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/hex_base.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/hex_base.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/hmac_sha512.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/hmac_sha512.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/hkdf_sha256_32.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/hkdf_sha256_32.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/hmac_sha256.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/hmac_sha256.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/ripemd160.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/ripemd160.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/poly1305.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/poly1305.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/sha1.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/sha1.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/sha256_sse4.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/node/blockstorage.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/node/blockstorage.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/sha512.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/sha512.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/sha3.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/sha3.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/sha256.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/sha256.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/muhash.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/muhash.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/siphash.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/siphash.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/sha256_sse41.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/sha256_avx2.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/crypto/sha256_x86_shani.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/util/batchpriority.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/util/batchpriority.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/util/chaintype.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/util/bip32.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/util/asmap.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/util/check.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/util/bytevectorhash.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/util/exception.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/util/exception.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/util/exec.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/util/moneystr.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/util/moneystr.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/util/serfloat.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/util/serfloat.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/util/signalinterrupt.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/util/rbf.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/util/syserror.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/util/syserror.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/util/tokenpipe.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/util/threadnames.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/util/threadinterrupt.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/util/threadinterrupt.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/zmq/zmqabstractnotifier.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/zmq/zmqabstractnotifier.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/zmq/zmqnotificationinterface.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/zmq/zmqnotificationinterface.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/zmq/zmqutil.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/zmq/zmqutil.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/zmq/zmqrpc.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/zmq/zmqrpc.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/zmq/zmqpublishnotifier.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/zmq/zmqpublishnotifier.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/kernel/bitcoinkernel.h: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/kernel/bitcoinkernel.cpp: iwyu reports no contentful changes)
(skipping /home/runner/work/_temp/src/util/expected.cpp: iwyu reports no contentful changes)
>>> Fixing #includes in '/home/runner/work/_temp/src/util/chaintype.h'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/bip32.cpp'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/asmap.cpp'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/check.h'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/bytevectorhash.cpp'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/feefrac.h'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/feefrac.cpp'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/exec.cpp'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/fs.h'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/fs.cpp'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/fs_helpers.h'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/fs_helpers.cpp'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/signalinterrupt.h'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/readwritefile.h'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/readwritefile.cpp'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/hasher.h'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/hasher.cpp'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/rbf.cpp'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/strencodings.h'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/strencodings.cpp'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/sock.h'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/sock.cpp'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/string.h'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/string.cpp'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/thread.h'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/thread.cpp'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/tokenpipe.cpp'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/threadnames.cpp'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/time.h'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/time.cpp'
>>> Fixing #includes in '/home/runner/work/_temp/src/util/expected.h'
IWYU edited 31 files on your behalf.
+ git diff -U1
+ ./contrib/devtools/clang-format-diff.py -binary=clang-format-22 -p1 -i -v
Formatting src/util/asmap.cpp
Formatting src/util/bip32.cpp
Formatting src/util/bytevectorhash.cpp
Formatting src/util/chaintype.h
Formatting src/util/check.h
Formatting src/util/exec.cpp
Formatting src/util/expected.h
Formatting src/util/feefrac.cpp
Formatting src/util/feefrac.h
Formatting src/util/fs.cpp
Formatting src/util/fs.h
Formatting src/util/fs_helpers.cpp
Formatting src/util/fs_helpers.h
Formatting src/util/hasher.cpp
Formatting src/util/hasher.h
Formatting src/util/rbf.cpp
Formatting src/util/readwritefile.cpp
Formatting src/util/readwritefile.h
Formatting src/util/signalinterrupt.h
Formatting src/util/sock.cpp
Formatting src/util/sock.h
Formatting src/util/strencodings.cpp
Formatting src/util/strencodings.h
Formatting src/util/string.cpp
Formatting src/util/string.h
Formatting src/util/thread.cpp
Formatting src/util/thread.h
Formatting src/util/threadnames.cpp
Formatting src/util/time.cpp
Formatting src/util/time.h
Formatting src/util/tokenpipe.cpp
+ git --no-pager diff --exit-code
diff --git a/src/util/asmap.cpp b/src/util/asmap.cpp
index f8b5a52..c388596 100644
--- a/src/util/asmap.cpp
+++ b/src/util/asmap.cpp
@@ -4,20 +4,18 @@
#include <util/asmap.h>
-#include <clientversion.h>
#include <hash.h>
-#include <serialize.h>
#include <streams.h>
#include <uint256.h>
#include <util/fs.h>
#include <util/log.h>
-#include <algorithm>
#include <bit>
#include <cassert>
#include <cstddef>
#include <cstdio>
#include <span>
+#include <string>
#include <utility>
#include <vector>
diff --git a/src/util/bip32.cpp b/src/util/bip32.cpp
index db40bfb..2488eac 100644
--- a/src/util/bip32.cpp
+++ b/src/util/bip32.cpp
@@ -2,12 +2,14 @@
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
-#include <tinyformat.h>
#include <util/bip32.h>
+
+#include <tinyformat.h>
#include <util/strencodings.h>
#include <cstdint>
#include <cstdio>
+#include <optional>
#include <sstream>
bool ParseHDKeypath(const std::string& keypath_str, std::vector<uint32_t>& keypath)
diff --git a/src/util/bytevectorhash.cpp b/src/util/bytevectorhash.cpp
index 943517a..4093030 100644
--- a/src/util/bytevectorhash.cpp
+++ b/src/util/bytevectorhash.cpp
@@ -2,10 +2,12 @@
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+#include <util/bytevectorhash.h>
+
#include <crypto/siphash.h>
#include <random.h>
-#include <util/bytevectorhash.h>
+#include <span>
#include <vector>
ByteVectorHash::ByteVectorHash() :
diff --git a/src/util/chaintype.h b/src/util/chaintype.h
index 3b246ea..caae77c 100644
--- a/src/util/chaintype.h
+++ b/src/util/chaintype.h
@@ -7,6 +7,7 @@
#include <optional>
#include <string>
+#include <string_view>
enum class ChainType {
MAIN,
diff --git a/src/util/check.h b/src/util/check.h
index 34801ca..ef4040f 100644
--- a/src/util/check.h
+++ b/src/util/check.h
@@ -13,6 +13,7 @@
#include <stdexcept>
#include <string>
#include <string_view>
+#include <type_traits>
#include <utility>
constexpr bool G_FUZZING_BUILD{
diff --git a/src/util/exec.cpp b/src/util/exec.cpp
index 6b14061..89aa114 100644
--- a/src/util/exec.cpp
+++ b/src/util/exec.cpp
@@ -5,10 +5,10 @@
#include <util/exec.h>
#include <util/fs.h>
-#include <util/subprocess.h>
+#include <cstdlib>
#include <string>
-#include <vector>
+#include <system_error>
#ifdef WIN32
#include <process.h>
diff --git a/src/util/expected.h b/src/util/expected.h
index 66fb98e..c88c6de 100644
--- a/src/util/expected.h
+++ b/src/util/expected.h
@@ -8,7 +8,6 @@
#include <attributes.h>
#include <util/check.h>
-#include <cassert>
#include <exception>
#include <utility>
#include <variant>
diff --git a/src/util/feefrac.cpp b/src/util/feefrac.cpp
index 68ba2b6..3c4664f 100644
--- a/src/util/feefrac.cpp
+++ b/src/util/feefrac.cpp
@@ -3,9 +3,9 @@
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#include <util/feefrac.h>
-#include <algorithm>
+
#include <array>
-#include <vector>
+#include <cstddef>
std::partial_ordering CompareChunks(std::span<const FeeFrac> chunks0, std::span<const FeeFrac> chunks1)
{
diff --git a/src/util/feefrac.h b/src/util/feefrac.h
index 25d87d3..30ec6b0 100644
--- a/src/util/feefrac.h
+++ b/src/util/feefrac.h
@@ -5,13 +5,13 @@
#ifndef BITCOIN_UTIL_FEEFRAC_H
#define BITCOIN_UTIL_FEEFRAC_H
-#include <span.h>
#include <util/check.h>
#include <util/overflow.h>
#include <compare>
#include <cstdint>
-#include <vector>
+#include <span>
+#include <utility>
/** Data structure storing a fee and size, ordered by increasing fee/size.
*
diff --git a/src/util/fs.cpp b/src/util/fs.cpp
index 692f671..eb50260 100644
--- a/src/util/fs.cpp
+++ b/src/util/fs.cpp
@@ -6,14 +6,12 @@
#include <util/syserror.h>
#ifndef WIN32
-#include <cstring>
#include <fcntl.h>
-#include <sys/file.h>
-#include <sys/utsname.h>
#include <unistd.h>
#else
-#include <limits>
#include <windows.h>
+
+#include <limits>
#endif
#include <cassert>
diff --git a/src/util/fs.h b/src/util/fs.h
index dce371c..8353a67 100644
--- a/src/util/fs.h
+++ b/src/util/fs.h
@@ -5,17 +5,13 @@
#ifndef BITCOIN_UTIL_FS_H
#define BITCOIN_UTIL_FS_H
-#include <tinyformat.h>
-
#include <cstdio>
#include <filesystem> // IWYU pragma: export
#include <functional>
#include <iomanip>
#include <ios>
-#include <ostream>
#include <string>
#include <string_view>
-#include <system_error>
#include <type_traits>
#include <utility>
diff --git a/src/util/fs_helpers.cpp b/src/util/fs_helpers.cpp
index e7780d7..db7512b 100644
--- a/src/util/fs_helpers.cpp
+++ b/src/util/fs_helpers.cpp
@@ -8,6 +8,7 @@
#include <util/fs_helpers.h>
#include <sync.h>
+#include <sys/types.h>
#include <util/fs.h>
#include <util/log.h>
#include <util/syserror.h>
diff --git a/src/util/fs_helpers.h b/src/util/fs_helpers.h
index d39ae11..face17f 100644
--- a/src/util/fs_helpers.h
+++ b/src/util/fs_helpers.h
@@ -13,6 +13,7 @@
#include <iosfwd>
#include <limits>
#include <optional>
+#include <string>
#ifdef __APPLE__
enum class FSType {
diff --git a/src/util/hasher.cpp b/src/util/hasher.cpp
index 3d5ffcf..b12f745 100644
--- a/src/util/hasher.cpp
+++ b/src/util/hasher.cpp
@@ -2,10 +2,10 @@
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+#include <util/hasher.h>
+
#include <crypto/siphash.h>
#include <random.h>
-#include <span.h>
-#include <util/hasher.h>
SaltedUint256Hasher::SaltedUint256Hasher() : m_hasher{
FastRandomContext().rand64(),
diff --git a/src/util/hasher.h b/src/util/hasher.h
index 02c7703..7e74c67 100644
--- a/src/util/hasher.h
+++ b/src/util/hasher.h
@@ -8,12 +8,11 @@
#include <crypto/common.h>
#include <crypto/siphash.h>
#include <primitives/transaction.h>
-#include <span.h>
#include <uint256.h>
-#include <concepts>
#include <cstdint>
#include <cstring>
+#include <span>
class SaltedUint256Hasher
{
diff --git a/src/util/rbf.cpp b/src/util/rbf.cpp
index bc28c6b..82ef020 100644
--- a/src/util/rbf.cpp
+++ b/src/util/rbf.cpp
@@ -6,6 +6,8 @@
#include <primitives/transaction.h>
+#include <vector>
+
bool SignalsOptInRBF(const CTransaction &tx)
{
for (const CTxIn &txin : tx.vin) {
diff --git a/src/util/readwritefile.cpp b/src/util/readwritefile.cpp
index 82b596f..6a9eeb2 100644
--- a/src/util/readwritefile.cpp
+++ b/src/util/readwritefile.cpp
@@ -9,7 +9,6 @@
#include <algorithm>
#include <cstdio>
-#include <limits>
#include <string>
#include <utility>
diff --git a/src/util/readwritefile.h b/src/util/readwritefile.h
index 2a9ccf5..54a5a30 100644
--- a/src/util/readwritefile.h
+++ b/src/util/readwritefile.h
@@ -7,6 +7,7 @@
#include <util/fs.h>
+#include <cstddef>
#include <limits>
#include <string>
#include <utility>
diff --git a/src/util/signalinterrupt.h b/src/util/signalinterrupt.h
index 027dd15..5a23cd1 100644
--- a/src/util/signalinterrupt.h
+++ b/src/util/signalinterrupt.h
@@ -13,7 +13,6 @@
#endif
#include <atomic>
-#include <cstdlib>
namespace util {
/**
diff --git a/src/util/sock.cpp b/src/util/sock.cpp
index a06ab7a..7043a4c 100644
--- a/src/util/sock.cpp
+++ b/src/util/sock.cpp
@@ -4,7 +4,6 @@
#include <util/sock.h>
-#include <common/system.h>
#include <compat/compat.h>
#include <span.h>
#include <tinyformat.h>
@@ -13,9 +12,15 @@
#include <util/threadinterrupt.h>
#include <util/time.h>
+#include <algorithm>
+#include <cassert>
+#include <compare>
+#include <exception>
#include <memory>
#include <stdexcept>
#include <string>
+#include <utility>
+#include <vector>
#ifdef USE_POLL
#include <poll.h>
diff --git a/src/util/sock.h b/src/util/sock.h
index 8c51b8e..781638a 100644
--- a/src/util/sock.h
+++ b/src/util/sock.h
@@ -6,15 +6,17 @@
#define BITCOIN_UTIL_SOCK_H
#include <compat/compat.h>
-#include <util/threadinterrupt.h>
-#include <util/time.h>
#include <chrono>
+#include <cstdint>
+#include <limits>
#include <memory>
#include <span>
#include <string>
#include <unordered_map>
+class CThreadInterrupt;
+
/**
* Maximum time to wait for I/O readiness.
* It will take up until this time to break off in case of an interruption.
diff --git a/src/util/strencodings.cpp b/src/util/strencodings.cpp
index ff59388..8a7a40d 100644
--- a/src/util/strencodings.cpp
+++ b/src/util/strencodings.cpp
@@ -9,12 +9,11 @@
#include <span.h>
#include <util/overflow.h>
-#include <array>
#include <cassert>
-#include <cstring>
+#include <compare>
#include <limits>
#include <optional>
-#include <ostream>
+#include <sstream>
#include <string>
#include <vector>
diff --git a/src/util/strencodings.h b/src/util/strencodings.h
index faff83b..e527972 100644
--- a/src/util/strencodings.h
+++ b/src/util/strencodings.h
@@ -9,11 +9,9 @@
#ifndef BITCOIN_UTIL_STRENCODINGS_H
#define BITCOIN_UTIL_STRENCODINGS_H
-#include <crypto/hex_base.h>
#include <span.h>
#include <util/string.h>
-#include <algorithm>
#include <array>
#include <bit>
#include <charconv>
@@ -21,6 +19,7 @@
#include <cstdint>
#include <limits>
#include <optional>
+#include <span>
#include <string>
#include <string_view>
#include <system_error>
diff --git a/src/util/string.cpp b/src/util/string.cpp
index c3b4b47..6e86095 100644
--- a/src/util/string.cpp
+++ b/src/util/string.cpp
@@ -4,7 +4,10 @@
#include <util/string.h>
+#include <iterator>
+#include <memory>
#include <regex>
+#include <stdexcept>
#include <string>
namespace util {
diff --git a/src/util/string.h b/src/util/string.h
index 89e1309..20c7858 100644
--- a/src/util/string.h
+++ b/src/util/string.h
@@ -5,13 +5,14 @@
#ifndef BITCOIN_UTIL_STRING_H
#define BITCOIN_UTIL_STRING_H
-#include <span.h>
-
+#include <algorithm>
+ echo '^^^ ⚠️ Failure generated from IWYU'
+ false
Command '['docker', 'exec', '--env', 'DANGER_RUN_CI_ON_HOST=1', 'ef0ae04418640ea860579a6a909948f6e9b8bf73fe95e1366c015818ef5ec691', '/home/runner/work/_temp/ci/test/03_test_script.sh']' returned non-zero exit status 1.
#include <array>
+#include <cstddef>
#include <cstdint>
-#include <cstring>
+#include <initializer_list>
#include <locale>
#include <optional>
+#include <span>
#include <sstream>
#include <string>
#include <string_view>
diff --git a/src/util/thread.cpp b/src/util/thread.cpp
index 0fde73c..5b20e80 100644
--- a/src/util/thread.cpp
+++ b/src/util/thread.cpp
@@ -11,7 +11,6 @@
#include <exception>
#include <functional>
#include <string>
-#include <utility>
void util::TraceThread(std::string_view thread_name, std::function<void()> thread_func)
{
diff --git a/src/util/thread.h b/src/util/thread.h
index cb1dd86..d398b18 100644
--- a/src/util/thread.h
+++ b/src/util/thread.h
@@ -6,7 +6,7 @@
#define BITCOIN_UTIL_THREAD_H
#include <functional>
-#include <string>
+#include <string_view>
namespace util {
/**
diff --git a/src/util/threadnames.cpp b/src/util/threadnames.cpp
index 310f60f..c70650f 100644
--- a/src/util/threadnames.cpp
+++ b/src/util/threadnames.cpp
@@ -2,10 +2,9 @@
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+#include <algorithm>
#include <cstring>
#include <string>
-#include <thread>
-#include <utility>
#if (defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__))
#include <pthread.h>
diff --git a/src/util/time.cpp b/src/util/time.cpp
index 9e0715e..170c0f3 100644
--- a/src/util/time.cpp
+++ b/src/util/time.cpp
@@ -5,7 +5,6 @@
#include <util/time.h>
-#include <compat/compat.h>
#include <tinyformat.h>
#include <util/check.h>
#include <util/strencodings.h>
@@ -13,6 +12,7 @@
#include <array>
#include <atomic>
#include <chrono>
+#include <compare>
#include <optional>
#include <string>
#include <string_view>
diff --git a/src/util/time.h b/src/util/time.h
index 30d363b..f46e5f0 100644
--- a/src/util/time.h
+++ b/src/util/time.h
@@ -6,9 +6,11 @@
#ifndef BITCOIN_UTIL_TIME_H
#define BITCOIN_UTIL_TIME_H
+#include <sys/time.h>
// The `util/time.h` header is designed to be a drop-in replacement for `chrono`.
#include <chrono> // IWYU pragma: export
#include <cstdint>
+#include <ctime>
#include <optional>
#include <string>
#include <string_view>
diff --git a/src/util/tokenpipe.cpp b/src/util/tokenpipe.cpp
index c982fa6..92bcfb0 100644
--- a/src/util/tokenpipe.cpp
+++ b/src/util/tokenpipe.cpp
@@ -1,17 +1,20 @@
// Copyright (c) 2021-present The Bitcoin Core developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+#include <bitcoin-build-config.h> // IWYU pragma: keep
+
#include <util/tokenpipe.h>
-#include <bitcoin-build-config.h> // IWYU pragma: keep
+#include <sys/types.h>
#ifndef WIN32
-#include <cerrno>
#include <fcntl.h>
-#include <optional>
#include <unistd.h>
+#include <cerrno>
+#include <optional>
+
TokenPipeEnd TokenPipe::TakeReadEnd()
{
TokenPipeEnd res(m_fds[0]);
^^^ ⚠️ Failure generated from IWYU
</details>
ACK 8b49e2dd4eed93d08a3d9681d444aaf441ab0037