Skip to content

Conversation

@hebasto
Copy link
Member

@hebasto hebasto commented Dec 16, 2024

Building on Windows using Clang instead of the MS compiler may be beneficial, considering the issues with the latter, as outlined in #31456:

Additionally, MSVC does not support inline assembly on the ARM and x64 processors.

So this PR:

  1. Closes Use clang in VS build? #31456 (and addresses Switch to CMake (was: Native build on Windows using Clang) #14118).
  2. Could be an alternative to Enable HW-accelerated implementations of SHA256 for MSVC builds #24773.

Additionally, clang-cl:

  1. Produces binaries with better performance. For example:
MSVC, block/s clang-cl, block/s benchmark
7.40 11.52 ConnectBlockAllEcdsa
7.32 11.81 ConnectBlockAllSchnorr
7.38 11.45 ConnectBlockMixedEcdsaSchnorr
91.86 143.12 DeserializeAndCheckBlockTest
121.46 189.04 DeserializeBlockTest
  1. Builds faster on the CI:

@DrahtBot
Copy link
Contributor

DrahtBot commented Dec 16, 2024

The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

Code Coverage & Benchmarks

For details see: https://corecheck.dev/bitcoin/bitcoin/pulls/31507.

Reviews

See the guideline for information on the review process.
A summary of reviews will appear here.

Conflicts

Reviewers, this pull request conflicts with the following ones:

  • #34090 (net: Fix -Wmissing-braces by hebasto)
  • #33974 (cmake: Check dependencies after build option interaction by hebasto)
  • #33861 (build: Bump VS minimum supported version to 18.0 by hebasto)

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.

@DrahtBot
Copy link
Contributor

🚧 At least one of the CI tasks failed.
Debug: https://github.com/bitcoin/bitcoin/runs/34465651629

Hints

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.

@maflcko
Copy link
Member

maflcko commented Dec 16, 2024

Seems fine to add this, because it is easy to remove and can increase the build compatibly in the meantime.

Also, it allows to evaluate the codegen, which could be substantially better than msvc, or detect more msvc bugs.

If there are enough benefits to clang-cl, the docs could be updated to use it and msvc could be dropped from the docs and possibly CI.

@fanquake
Copy link
Member

fanquake commented Dec 16, 2024

Also, it allows to evaluate the codegen, which could be substantially better than msvc, or detect more msvc bugs.

Does it? My read of the docs was that clang just tries to internally work around all the MSVC bugs, so it seems like it will just continue to "hide" issues?

@hebasto
Copy link
Member Author

hebasto commented Dec 16, 2024

From #31456 (comment):

MSVC has many issues, for example:

Added two commits that enable compiling fuzz/utxo_snapshot.cpp with clang-cl and switch "Win64 native, fuzz" job to clang-cl.

endif()
endfunction()

if(MSVC)
Copy link
Member

Choose a reason for hiding this comment

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

Can't the if(MSVC) go away and we just rely on the CMAKE_CXX_COMPILER_ID test?

Copy link
Member Author

Choose a reason for hiding this comment

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

In this case, I think we do want to check MSVC, as it separates MSVC specific syntax /WX from GCC syntax -Werror.

@theuni
Copy link
Member

theuni commented Dec 16, 2024

At a high level.. seems to me we want to avoid doing if(MSVC) as much as possible and instead check against the compiler id, no? Except for the cases where we REALLY mean MSVC.

@theuni
Copy link
Member

theuni commented Dec 16, 2024

Hmm, actually, it seems like maybe CMAKE_CXX_COMPILER_FRONTEND_VARIANT is what we should be testing against?

@fanquake
Copy link
Member

< to be added >

It'd be good if this could actually be filled in, so it's clear what the goals are / what's trying to be acheived here.

@hebasto
Copy link
Member Author

hebasto commented Dec 17, 2024

Hmm, actually, it seems like maybe CMAKE_CXX_COMPILER_FRONTEND_VARIANT is what we should be testing against?

It doesn't seem reliable, as it might not be set at all for CMake versions < 3.26.

@hebasto
Copy link
Member Author

hebasto commented Mar 10, 2025

Rebased on #32028.

@hebasto
Copy link
Member Author

hebasto commented Oct 16, 2025

Yes. I forgot to put this link into my previous comment: bitcoin-core/secp256k1#1681.

Have you seen the same from actually running Core, or it's benchmarks, or an IBD?

I'll refresh my benchmarks and post them shortly.

@fanquake
Copy link
Member

D:\a\bitcoin\bitcoin\src\script\interpreter.cpp(1531,33): warning : variable 'ext_flag' may be uninitialized when used here [-Wconditional-uninitialized] [D:\a\bitcoin\bitcoin\build\src\bitcoin_consensus.vcxproj]
  D:\a\bitcoin\bitcoin\src\script\interpreter.cpp(1733,10): note: in instantiation of function template specialization 'SignatureHashSchnorr<CTransaction>' requested here
  D:\a\bitcoin\bitcoin\src\script\interpreter.cpp(1481,21): note: initialize the variable 'ext_flag' to silence this warning
D:\a\bitcoin\bitcoin\src\script\interpreter.cpp(1531,33): warning : variable 'ext_flag' may be uninitialized when used here [-Wconditional-uninitialized] [D:\a\bitcoin\bitcoin\build\src\bitcoin_consensus.vcxproj]
  D:\a\bitcoin\bitcoin\src\script\interpreter.cpp(1733,10): note: in instantiation of function template specialization 'SignatureHashSchnorr<CMutableTransaction>' requested here
  D:\a\bitcoin\bitcoin\src\script\interpreter.cpp(1481,21): note: initialize the variable 'ext_flag' to silence this warning
  bitcoin_clientversion.vcxproj -> D:\a\bitcoin\bitcoin\build\lib\Release\bitcoin_clientversion.lib
 D:\a\bitcoin\bitcoin\src\util/subprocess.h(759,10): error : private field 'parent_' is not used [-Werror,-Wunused-private-field] [D:\a\bitcoin\bitcoin\build\src\bitcoin_common.vcxproj]
D:\a\bitcoin\bitcoin\src\util/subprocess.h(760,7): error : private field 'err_wr_pipe_' is not used [-Werror,-Wunused-private-field] [D:\a\bitcoin\bitcoin\build\src\bitcoin_common.vcxproj]
D:\a\bitcoin\bitcoin\src\util/subprocess.h(1038,7): error : private field 'child_pid_' is not used [-Werror,-Wunused-private-field] [D:\a\bitcoin\bitcoin\build\src\bitcoin_common.vcxproj]

@hebasto
Copy link
Member Author

hebasto commented Oct 25, 2025

Yes. I forgot to put this link into my previous comment: bitcoin-core/secp256k1#1681.

Have you seen the same from actually running Core, or it's benchmarks, or an IBD?

I'll refresh my benchmarks and post them shortly.

Below are benchmarks on my Windows machine:

Compiled with MSVC
|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|        1,179,325.00 |              847.94 |    6.9% |      0.15 | :wavy_dash: `AddAndRemoveDisconnectedBlockTransactions10` (Unstable with ~10.9 iters. Increase `minEpochIterations` to e.g. 109)
|        1,260,020.00 |              793.64 |    5.0% |      0.16 | `AddAndRemoveDisconnectedBlockTransactions90`
|        1,455,309.09 |              687.14 |    2.4% |      0.18 | `AddAndRemoveDisconnectedBlockTransactionsAll`
|       71,612,900.00 |               13.96 |    1.1% |      0.79 | `AddrManAdd`
|      187,231,800.00 |                5.34 |    0.5% |      2.07 | `AddrManAddThenGood`
|          267,166.67 |            3,742.98 |    2.5% |      0.01 | `AddrManGetAddr`
|              370.42 |        2,699,601.97 |    9.5% |      0.01 | :wavy_dash: `AddrManSelect` (Unstable with ~2,676.5 iters. Increase `minEpochIterations` to e.g. 26765)
|        1,524,112.50 |              656.12 |   57.9% |      0.03 | :wavy_dash: `AddrManSelectByNetwork` (Unstable with ~1.6 iters. Increase `minEpochIterations` to e.g. 16)
|          179,040.00 |            5,585.34 |   32.2% |      0.01 | :wavy_dash: `AddrManSelectFromAlmostEmpty` (Unstable with ~5.2 iters. Increase `minEpochIterations` to e.g. 52)
|          698,000.00 |            1,432.66 |    1.2% |      0.01 | `AssembleBlock`

|             ns/ecdh |              ecdh/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|           72,300.00 |           13,831.26 |    0.3% |      0.01 | `BIP324_ECDH`

|             ns/byte |              byte/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|              118.70 |        8,424,277.24 |    0.2% |      0.01 | `Base58CheckEncode`
|               28.09 |       35,600,546.52 |    0.5% |      0.01 | `Base58Decode`
|               75.57 |       13,232,799.25 |    1.8% |      0.01 | `Base58Encode`
|               12.29 |       81,346,439.17 |    1.5% |      0.01 | `Bech32Decode`
|               18.92 |       52,852,519.65 |    0.5% |      0.01 | `Bech32Encode`

|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|              204.06 |        4,900,466.95 |    6.4% |      0.01 | :wavy_dash: `BenchLockedPool` (Unstable with ~4,444.4 iters. Increase `minEpochIterations` to e.g. 44444)

|             ns/byte |              byte/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|                2.60 |      384,098,329.17 |    2.6% |      0.03 | `BenchRIPEMD160`

|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|               28.54 |       35,043,209.88 |    1.0% |      0.01 | `BenchTimeDeprecated`
|               27.26 |       36,688,102.89 |    0.7% |      0.01 | `BenchTimeMillis`
|               20.72 |       48,253,935.59 |    0.4% |      0.01 | `BenchTimeMillisSys`
|                2.17 |      460,814,656.01 |    0.4% |      0.01 | `BenchTimeMock`
|    1,162,030,600.00 |                0.86 |    0.1% |     12.83 | `BlockAssemblerAddPackageTxns`
|        2,600,400.00 |              384.56 |    0.2% |      0.03 | `BlockEncodingLargeExtra`
|        2,357,300.00 |              424.21 |    0.3% |      0.03 | `BlockEncodingNoExtra`
|        2,368,000.00 |              422.30 |    0.5% |      0.03 | `BlockEncodingStdExtra`
|    5,480,110,960.00 |                0.18 |    0.5% |    326.48 | `BlockFilterIndexSync`
|       45,776,800.00 |               21.85 |    0.6% |      0.50 | `BlockToJsonVerboseWrite`
|          484,450.00 |            2,064.20 |    1.1% |      0.01 | `BlockToJsonVerbosity1`
|       93,670,700.00 |               10.68 |    0.6% |      1.05 | `BlockToJsonVerbosity2`
|       97,989,500.00 |               10.21 |    1.3% |      1.09 | `BlockToJsonVerbosity3`
|          724,300.00 |            1,380.64 |    5.6% |      0.01 | :wavy_dash: `BnBExhaustion` (Unstable with ~1.0 iters. Increase `minEpochIterations` to e.g. 10)

|              ns/job |               job/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|              247.58 |        4,039,030.63 |   13.1% |      0.09 | :wavy_dash: `CCheckQueueSpeedPrevectorJob` (Unstable with ~10.9 iters. Increase `minEpochIterations` to e.g. 109)

|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|              851.71 |        1,174,107.66 |    3.4% |      0.01 | `CCoinsCaching`

|             ns/byte |              byte/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|                1.88 |      531,597,465.15 |    0.7% |      0.02 | `CHACHA20_1MB`
|                1.93 |      518,358,837.88 |    0.9% |      0.01 | `CHACHA20_256BYTES`
|                2.14 |      468,040,540.54 |    2.8% |      0.01 | `CHACHA20_64BYTES`

|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|          101,433.33 |            9,858.69 |    0.9% |      0.01 | `CheckBlockIndex`
|       18,427,900.00 |               54.27 |    0.9% |      0.21 | `CoinSelection`
|      293,690,800.00 |                3.40 |    0.4% |      3.24 | `ComplexMemPool`

|            ns/block |             block/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|      135,146,600.00 |                7.40 |    1.2% |      1.50 | `ConnectBlockAllEcdsa`
|      136,611,800.00 |                7.32 |    3.1% |      1.51 | `ConnectBlockAllSchnorr`
|      135,439,600.00 |                7.38 |    0.8% |      1.51 | `ConnectBlockMixedEcdsaSchnorr`
|       10,885,800.00 |               91.86 |    2.2% |      0.12 | `DeserializeAndCheckBlockTest`
|        8,232,900.00 |              121.46 |    4.8% |      0.09 | `DeserializeBlockTest`

|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|        8,377,400.00 |              119.37 |    1.1% |      0.09 | `DuplicateInputs`

|           ns/pubkey |            pubkey/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|           61,135.29 |           16,357.16 |    8.2% |      0.01 | :wavy_dash: `EllSwiftCreate` (Unstable with ~15.0 iters. Increase `minEpochIterations` to e.g. 150)

|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|           17,842.00 |           56,047.53 |    1.7% |      0.01 | `EvictionProtection0Networks250Candidates`
|           17,623.91 |           56,741.09 |    5.8% |      0.01 | :wavy_dash: `EvictionProtection1Networks250Candidates` (Unstable with ~52.2 iters. Increase `minEpochIterations` to e.g. 522)
|           28,021.21 |           35,687.25 |   10.0% |      0.01 | :wavy_dash: `EvictionProtection2Networks250Candidates` (Unstable with ~34.6 iters. Increase `minEpochIterations` to e.g. 346)
|            4,916.51 |          203,396.34 |    2.9% |      0.01 | `EvictionProtection3Networks050Candidates`
|           14,537.70 |           68,786.65 |    0.6% |      0.01 | `EvictionProtection3Networks100Candidates`
|           32,770.00 |           30,515.72 |    0.4% |      0.01 | `EvictionProtection3Networks250Candidates`
|       27,257,200.00 |               36.69 |    1.4% |      0.31 | `ExpandDescriptor`

|             ns/byte |              byte/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|                2.98 |      336,049,738.81 |    2.3% |      0.04 | `FSCHACHA20POLY1305_1MB`
|                3.69 |      270,753,844.23 |    1.5% |      0.01 | `FSCHACHA20POLY1305_256BYTES`
|                6.29 |      159,062,436.86 |    4.2% |      0.01 | `FSCHACHA20POLY1305_64BYTES`

|           ns/number |            number/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|               13.51 |       74,002,603.32 |    0.8% |      0.01 | `FastRandom_rand32`
|               21.52 |       46,475,091.77 |    2.0% |      0.01 | `FastRandom_rand64`
|               17.89 |       55,886,030.54 |    0.5% |      0.01 | `FastRandom_randbits`
|                2.03 |      492,182,923.46 |    1.0% |      0.01 | `FastRandom_randbool`
|               12.01 |       83,255,086.07 |    0.7% |      0.01 | `FastRandom_randrange100`
|               14.46 |       69,142,631.37 |    5.9% |      0.01 | :wavy_dash: `FastRandom_randrange1000` (Unstable with ~70.9 iters. Increase `minEpochIterations` to e.g. 709)
|               19.40 |       51,540,546.95 |    0.2% |      0.22 | `FastRandom_randrange1000000`
|               50.69 |       19,727,047.15 |   14.7% |      0.01 | :wavy_dash: `FastRandom_stdshuffle100` (Unstable with ~166.2 iters. Increase `minEpochIterations` to e.g. 1662)

|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|               20.38 |       49,069,790.93 |    4.7% |      0.01 | `FindByte`
|          843,000.00 |            1,186.24 |    1.0% |      0.01 | `GCSBlockFilterGetHash`
|       15,844,200.00 |               63.11 |    0.7% |      0.17 | `GCSFilterConstruct`
|        2,035,000.00 |              491.40 |    0.2% |      0.02 | `GCSFilterDecode`
|            6,160.00 |          162,337.66 |    0.4% |      0.01 | `GCSFilterDecodeSkipCheck`
|          252,466.67 |            3,960.92 |    1.3% |      0.01 | `GCSFilterMatch`

|           ns/base16 |            base16/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|                2.42 |      413,044,817.50 |    4.9% |      0.01 | `HexParse`

|             ns/byte |              byte/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|                1.37 |      729,258,989.13 |   24.9% |      0.02 | :wavy_dash: `HexStrBench` (Unstable with ~1.0 iters. Increase `minEpochIterations` to e.g. 10)

|           ns/number |            number/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|                2.79 |      358,376,996.23 |    8.7% |      0.01 | :wavy_dash: `InsecureRandom_rand32` (Unstable with ~395,493.5 iters. Increase `minEpochIterations` to e.g. 3954935)
|                2.10 |      475,354,929.88 |    2.2% |      0.01 | `InsecureRandom_rand64`
|                3.26 |      306,422,541.39 |   17.8% |      0.01 | :wavy_dash: `InsecureRandom_randbits` (Unstable with ~4,377.0 iters. Increase `minEpochIterations` to e.g. 43770)
|                1.66 |      602,926,829.27 |    2.9% |      0.01 | `InsecureRandom_randbool`
|               11.62 |       86,084,142.39 |    9.8% |      0.01 | :wavy_dash: `InsecureRandom_randrange100` (Unstable with ~994.9 iters. Increase `minEpochIterations` to e.g. 9949)
|                8.65 |      115,668,844.38 |    1.4% |      0.01 | `InsecureRandom_randrange1000`
|                8.88 |      112,640,519.05 |    4.9% |      0.10 | `InsecureRandom_randrange1000000`
|               23.36 |       42,813,765.18 |   10.7% |      0.01 | :wavy_dash: `InsecureRandom_stdshuffle100` (Unstable with ~352.1 iters. Increase `minEpochIterations` to e.g. 3521)

|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|           19,800.00 |           50,505.05 |    8.0% |      0.00 | :wavy_dash: `Linearize16TxWorstCase120Iters` (Unstable with ~14.1 iters. Increase `minEpochIterations` to e.g. 141)
|            4,152.94 |          240,793.20 |    7.3% |      0.01 | :wavy_dash: `Linearize16TxWorstCase20Iters` (Unstable with ~173.1 iters. Increase `minEpochIterations` to e.g. 1731)
|        1,340,300.00 |              746.10 |    5.2% |      0.02 | :wavy_dash: `Linearize32TxWorstCase15000Iters` (Unstable with ~1.0 iters. Increase `minEpochIterations` to e.g. 10)
|          458,800.00 |            2,179.60 |    1.8% |      0.01 | `Linearize32TxWorstCase5000Iters`
|        1,283,800.00 |              778.94 |    3.1% |      0.01 | `Linearize48TxWorstCase15000Iters`
|          507,900.00 |            1,968.89 |    7.7% |      0.01 | :wavy_dash: `Linearize48TxWorstCase5000Iters` (Unstable with ~2.0 iters. Increase `minEpochIterations` to e.g. 20)
|        1,279,700.00 |              781.43 |    1.8% |      0.02 | `Linearize64TxWorstCase15000Iters`
|          746,200.00 |            1,340.12 |   11.1% |      0.01 | :wavy_dash: `Linearize64TxWorstCase5000Iters` (Unstable with ~1.4 iters. Increase `minEpochIterations` to e.g. 14)
|        3,503,200.00 |              285.45 |   14.3% |      0.04 | :wavy_dash: `Linearize75TxWorstCase15000Iters` (Unstable with ~1.0 iters. Increase `minEpochIterations` to e.g. 10)
|        1,164,900.00 |              858.44 |   22.0% |      0.01 | :wavy_dash: `Linearize75TxWorstCase5000Iters` (Unstable with ~1.0 iters. Increase `minEpochIterations` to e.g. 10)
|        2,219,000.00 |              450.65 |    4.9% |      0.03 | `Linearize99TxWorstCase15000Iters`
|          812,600.00 |            1,230.62 |    2.1% |      0.01 | `Linearize99TxWorstCase5000Iters`
|            2,276.16 |          439,337.25 |    2.2% |      0.01 | `LinearizeNoIters16TxWorstCaseAnc`
|            3,408.36 |          293,395.92 |    1.2% |      0.01 | `LinearizeNoIters16TxWorstCaseLIMO`
|            7,155.92 |          139,744.41 |    0.4% |      0.01 | `LinearizeNoIters32TxWorstCaseAnc`
|           12,471.21 |           80,184.67 |    3.0% |      0.01 | `LinearizeNoIters32TxWorstCaseLIMO`
|           16,783.33 |           59,582.92 |    9.0% |      0.01 | :wavy_dash: `LinearizeNoIters48TxWorstCaseAnc` (Unstable with ~51.6 iters. Increase `minEpochIterations` to e.g. 516)
|           31,245.83 |           32,004.27 |   11.6% |      0.01 | :wavy_dash: `LinearizeNoIters48TxWorstCaseLIMO` (Unstable with ~30.4 iters. Increase `minEpochIterations` to e.g. 304)
|           27,361.11 |           36,548.22 |    2.2% |      0.01 | `LinearizeNoIters64TxWorstCaseAnc`
|           48,836.84 |           20,476.34 |    2.1% |      0.01 | `LinearizeNoIters64TxWorstCaseLIMO`
|           53,081.25 |           18,839.04 |    1.7% |      0.01 | `LinearizeNoIters75TxWorstCaseAnc`
|           77,928.57 |           12,832.26 |    8.7% |      0.01 | :wavy_dash: `LinearizeNoIters75TxWorstCaseLIMO` (Unstable with ~11.8 iters. Increase `minEpochIterations` to e.g. 118)
|           65,180.00 |           15,342.13 |    4.9% |      0.01 | `LinearizeNoIters99TxWorstCaseAnc`
|          126,387.50 |            7,912.17 |    0.7% |      0.01 | `LinearizeNoIters99TxWorstCaseLIMO`
|          184,075.00 |            5,432.57 |    9.2% |      0.01 | :wavy_dash: `LinearizeOptimallyExample00` (Unstable with ~4.0 iters. Increase `minEpochIterations` to e.g. 40)
|          344,650.00 |            2,901.49 |   25.9% |      0.01 | :wavy_dash: `LinearizeOptimallyExample01` (Unstable with ~2.8 iters. Increase `minEpochIterations` to e.g. 28)
|          130,585.71 |            7,657.81 |    1.3% |      0.01 | `LinearizeOptimallyExample02`
|          165,950.00 |            6,025.91 |    1.4% |      0.01 | `LinearizeOptimallyExample03`
|            6,424.32 |          155,658.39 |    1.9% |      0.01 | `LinearizeOptimallyExample04`
|           42,055.00 |           23,778.39 |    6.2% |      0.01 | :wavy_dash: `LinearizeOptimallyExample05` (Unstable with ~22.9 iters. Increase `minEpochIterations` to e.g. 229)
|          110,590.00 |            9,042.41 |    1.7% |      0.01 | `LinearizeOptimallyExample06`
|           25,597.56 |           39,066.22 |    0.5% |      0.01 | `LinearizeOptimallyExample07`
|          187,075.00 |            5,345.45 |    1.3% |      0.01 | `LinearizeOptimallyExample08`
|           40,508.33 |           24,686.28 |    3.8% |      0.01 | `LinearizeOptimallyExample09`
|           28,385.29 |           35,229.51 |    2.1% |      0.01 | `LinearizeOptimallyExample10`
|      719,994,100.00 |                1.39 |    1.3% |      7.99 | `LinearizeOptimallyExample11`
|        1,006,700.00 |              993.34 |    0.9% |      0.01 | `LinearizeOptimallyExample12`
|          176,500.00 |            5,665.72 |    2.4% |      0.01 | `LinearizeOptimallyExample13`
|        1,143,000.00 |              874.89 |    2.1% |      0.01 | `LinearizeOptimallyExample14`
|       29,272,700.00 |               34.16 |    0.5% |      0.33 | `LinearizeOptimallyExample15`
|       20,853,100.00 |               47.95 |    0.3% |      0.23 | `LinearizeOptimallyExample16`
|       26,201,500.00 |               38.17 |    0.3% |      0.30 | `LinearizeOptimallyExample17`
|       26,541,500.00 |               37.68 |    0.7% |      0.30 | `LinearizeOptimallyExample18`
|       32,764,400.00 |               30.52 |    3.9% |      0.37 | `LinearizeOptimallyExample19`
|       39,456,100.00 |               25.34 |    4.0% |      0.50 | `LoadExternalBlockFile`
|           13,837.88 |           72,265.41 |    1.1% |      0.01 | `LogWithDebug`
|           22,309.09 |           44,824.78 |    1.1% |      0.01 | `LogWithThreadNames`
|                5.11 |      195,635,694.57 |    0.6% |      0.01 | `LogWithoutDebug`
|           21,524.39 |           46,458.92 |    1.0% |      0.01 | `LogWithoutThreadNames`
|               84.59 |       11,822,331.46 |    0.6% |      0.01 | `LogWithoutWriteToFile`
|      106,364,600.00 |                9.40 |    0.6% |      1.18 | `MempoolCheck`
|           93,475.00 |           10,698.05 |    6.3% |      0.01 | :wavy_dash: `MempoolCheckEphemeralSpends` (Unstable with ~11.1 iters. Increase `minEpochIterations` to e.g. 111)
|           78,840.00 |           12,683.92 |    3.3% |      0.01 | `MempoolEviction`
|            1,662.86 |          601,372.26 |    1.2% |      0.01 | `MergeLinearizations16TxWorstCase`
|            6,180.56 |          161,797.75 |    2.8% |      0.01 | `MergeLinearizations32TxWorstCase`
|           13,255.38 |           75,441.04 |    0.4% |      0.01 | `MergeLinearizations48TxWorstCase`
|           24,127.59 |           41,446.33 |    0.2% |      0.01 | `MergeLinearizations64TxWorstCase`
|           41,200.00 |           24,271.84 |    4.2% |      0.01 | `MergeLinearizations75TxWorstCase`
|           71,612.50 |           13,964.04 |    5.3% |      0.01 | :wavy_dash: `MergeLinearizations99TxWorstCase` (Unstable with ~13.7 iters. Increase `minEpochIterations` to e.g. 137)

|             ns/leaf |              leaf/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|              803.73 |        1,244,194.40 |    1.7% |      0.08 | `MerkleRoot`

|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|           23,234.38 |           43,039.68 |    0.9% |      0.01 | `MuHash`
|           22,334.04 |           44,774.70 |    1.5% |      0.01 | `MuHashDiv`
|          118,775.00 |            8,419.28 |    0.4% |      0.01 | `MuHashFinalize`
|           24,059.38 |           41,563.84 |    7.7% |      0.01 | :wavy_dash: `MuHashMul` (Unstable with ~39.3 iters. Increase `minEpochIterations` to e.g. 393)
|            1,170.44 |          854,377.57 |    5.3% |      0.01 | :wavy_dash: `MuHashPrecompute` (Unstable with ~775.1 iters. Increase `minEpochIterations` to e.g. 7751)

|             ns/byte |              byte/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|                0.08 |   13,208,359,679.74 |   15.8% |      0.01 | :wavy_dash: `ObfuscationBench` (Unstable with ~12,789.5 iters. Increase `minEpochIterations` to e.g. 127895)

|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|       25,839,500.00 |               38.70 |    0.0% |      0.03 | `OrphanageEraseForBlock`
|        8,382,700.00 |              119.29 |    0.0% |      0.01 | `OrphanageEraseForPeer`
|        8,739,700.00 |              114.42 |    0.0% |      0.01 | `OrphanageMultiPeerEviction`
|          914,900.00 |            1,093.02 |    0.0% |      0.00 | `OrphanageSinglePeerEviction`

|             ns/byte |              byte/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|                1.01 |      987,731,725.70 |    1.0% |      0.01 | `POLY1305_1MB`
|                1.05 |      950,234,981.39 |    1.1% |      0.01 | `POLY1305_256BYTES`
|                1.23 |      810,674,540.92 |    0.2% |      0.01 | `POLY1305_64BYTES`

|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|               73.26 |       13,650,324.20 |    2.8% |      0.06 | `PoolAllocator_StdUnorderedMap`
|               20.40 |       49,028,347.30 |    0.3% |      0.02 | `PoolAllocator_StdUnorderedMapWithPoolResource`
|            1,630.94 |          613,143.28 |    9.8% |      0.01 | :wavy_dash: `PostLinearize16TxWorstCase` (Unstable with ~583.2 iters. Increase `minEpochIterations` to e.g. 5832)
|            5,243.22 |          190,722.64 |    4.4% |      0.01 | `PostLinearize32TxWorstCase`
|           10,507.06 |           95,174.11 |    2.0% |      0.01 | `PostLinearize48TxWorstCase`
|           17,806.78 |           56,158.39 |    0.2% |      0.01 | `PostLinearize64TxWorstCase`
|           26,935.48 |           37,125.75 |    1.0% |      0.01 | `PostLinearize75TxWorstCase`
|           45,540.00 |           21,958.72 |    0.9% |      0.01 | `PostLinearize99TxWorstCase`
|              348.53 |        2,869,175.24 |    0.9% |      0.01 | `PrePadded`
|               13.09 |       76,408,566.72 |    1.5% |      0.01 | `PrevectorClearNontrivial`
|               13.10 |       76,340,252.71 |    1.9% |      0.01 | `PrevectorClearTrivial`
|              513.70 |        1,946,661.48 |    0.9% |      0.01 | `PrevectorDeserializeNontrivial`
|               25.56 |       39,116,185.64 |    1.7% |      0.01 | `PrevectorDeserializeTrivial`
|               34.86 |       28,686,825.52 |    0.3% |      0.01 | `PrevectorDestructorNontrivial`
|               34.30 |       29,158,158.35 |    0.4% |      0.01 | `PrevectorDestructorTrivial`
|            2,955.97 |          338,298.76 |    0.5% |      0.01 | `PrevectorFillVectorDirectNontrivial`
|            1,062.68 |          941,018.49 |   16.4% |      0.01 | :wavy_dash: `PrevectorFillVectorDirectTrivial` (Unstable with ~878.6 iters. Increase `minEpochIterations` to e.g. 8786)
|           18,486.27 |           54,094.19 |    5.6% |      0.01 | :wavy_dash: `PrevectorFillVectorIndirectNontrivial` (Unstable with ~51.8 iters. Increase `minEpochIterations` to e.g. 518)
|           14,531.25 |           68,817.20 |    1.2% |      0.01 | `PrevectorFillVectorIndirectTrivial`
|                6.59 |      151,681,063.12 |    1.2% |      0.01 | `PrevectorResizeNontrivial`
|                6.52 |      153,458,755.43 |    0.9% |      0.01 | `PrevectorResizeTrivial`
|        9,865,300.00 |              101.37 |    5.8% |      0.12 | :wavy_dash: `ReadBlockBench` (Unstable with ~1.0 iters. Increase `minEpochIterations` to e.g. 10)
|        1,411,200.00 |              708.62 |    3.2% |      0.02 | `ReadRawBlockBench`
|              680.73 |        1,469,008.73 |    0.7% |      0.01 | `RegularPadded`
|              497.44 |        2,010,294.54 |    1.0% |      0.01 | `RollingBloom`
|           27,363.16 |           36,545.49 |    0.2% |      0.01 | `RollingBloomReset`
|       16,691,500.00 |               59.91 |    1.0% |      0.19 | `RpcMempool`

|             ns/byte |              byte/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|                1.71 |      585,411,544.32 |    0.9% |      0.02 | `SHA1`
|               12.23 |       81,756,487.03 |    0.4% |      0.01 | `SHA256D64_1024_AVX2 using the 'standard' SHA256 implementation`
|               12.33 |       81,108,910.89 |    1.3% |      0.01 | `SHA256D64_1024_SHANI using the 'standard' SHA256 implementation`
|               12.65 |       79,025,684.31 |    3.4% |      0.01 | `SHA256D64_1024_SSE4 using the 'standard' SHA256 implementation`
|               12.27 |       81,512,437.81 |    0.6% |      0.01 | `SHA256D64_1024_STANDARD using the 'standard' SHA256 implementation`
|               10.94 |       91,389,499.39 |    1.2% |      0.01 | `SHA256_32b_AVX2 using the 'standard' SHA256 implementation`
|               11.19 |       89,345,293.33 |    3.5% |      0.01 | `SHA256_32b_SHANI using the 'standard' SHA256 implementation`
|               11.50 |       86,973,470.49 |    6.3% |      0.01 | :wavy_dash: `SHA256_32b_SSE4 using the 'standard' SHA256 implementation` (Unstable with ~2,799.7 iters. Increase `minEpochIterations` to e.g. 27997)
|               10.89 |       91,825,214.30 |    0.5% |      0.01 | `SHA256_32b_STANDARD using the 'standard' SHA256 implementation`
|                4.93 |      203,037,440.10 |    0.8% |      0.06 | `SHA256_AVX2 using the 'standard' SHA256 implementation`
|                5.06 |      197,526,962.43 |    3.1% |      0.06 | `SHA256_SHANI using the 'standard' SHA256 implementation`
|                5.04 |      198,558,465.54 |    2.8% |      0.06 | `SHA256_SSE4 using the 'standard' SHA256 implementation`
|                5.04 |      198,542,696.61 |    3.0% |      0.06 | `SHA256_STANDARD using the 'standard' SHA256 implementation`
|                4.22 |      236,910,684.67 |    3.4% |      0.05 | `SHA3_256_1M`
|                2.52 |      396,967,170.81 |    1.3% |      0.03 | `SHA512`

|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|          170,784.40 |            5,855.34 |    1.8% |      0.21 | `SignSchnorrWithMerkleRoot`
|          171,072.81 |            5,845.46 |    2.3% |      0.21 | `SignSchnorrWithNullMerkleRoot`
|          264,442.61 |            3,781.54 |    0.7% |      0.32 | `SignTransactionECDSA`
|          211,025.22 |            4,738.77 |    0.9% |      0.26 | `SignTransactionSchnorr`
|               30.11 |       33,210,919.73 |    1.6% |      0.01 | `SipHash_32b`
|                9.23 |      108,313,013.40 |    5.9% |      0.02 | :wavy_dash: `Trig` (Unstable with ~188,576.0 iters. Increase `minEpochIterations` to e.g. 1885760)
|       33,670,400.00 |               29.70 |    0.0% |      0.03 | `TxGraphTrim`
|          106,750.00 |            9,367.68 |    0.6% |      0.01 | `VerifyNestedIfScript`
|           67,992.31 |           14,707.55 |    1.3% |      0.01 | `VerifyScriptBench`
|      120,327,800.00 |                8.31 |    0.2% |      1.33 | `WalletAvailableCoins`
|            6,284.76 |          159,115.16 |    1.3% |      0.01 | `WalletBalanceClean`
|            6,926.72 |          144,368.53 |    0.9% |      0.01 | `WalletBalanceDirty`
|            6,308.93 |          158,505.52 |    1.1% |      0.01 | `WalletBalanceMine`
|               78.53 |       12,734,112.86 |    1.0% |      0.01 | `WalletBalanceWatch`
|    1,320,096,500.00 |                0.76 |    0.9% |     14.74 | `WalletCreateEncrypted`
|    1,000,096,500.00 |                1.00 |    1.8% |     11.01 | `WalletCreatePlain`
|        2,470,100.00 |              404.84 |    1.3% |      0.03 | `WalletCreateTxUseOnlyPresetInputs`
|      129,672,200.00 |                7.71 |    1.3% |      1.44 | `WalletCreateTxUsePresetInputsAndCoinSelection`
|              103.20 |        9,690,302.30 |    0.1% |      0.01 | `WalletIsMineDescriptors`
|              103.40 |        9,671,102.46 |    0.4% |      0.01 | `WalletIsMineMigratedDescriptors`
|      682,741,400.00 |                1.46 |    0.4% |      3.42 | `WalletLoadingDescriptors`
|    9,446,679,300.00 |                0.11 |    0.0% |      9.45 | `WalletMigration`
|       10,101,000.00 |               99.00 |    1.0% |      0.11 | `WriteBlockBench`

Compiled with clang-cl
|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|        1,451,472.73 |              688.96 |    4.7% |      0.16 | `AddAndRemoveDisconnectedBlockTransactions10`
|        1,147,027.27 |              871.82 |    0.5% |      0.14 | `AddAndRemoveDisconnectedBlockTransactions90`
|        1,431,420.00 |              698.61 |    2.7% |      0.18 | `AddAndRemoveDisconnectedBlockTransactionsAll`
|       53,722,500.00 |               18.61 |    0.5% |      0.60 | `AddrManAdd`
|      136,084,600.00 |                7.35 |    1.3% |      1.51 | `AddrManAddThenGood`
|          255,600.00 |            3,912.36 |    0.9% |      0.01 | `AddrManGetAddr`
|              289.15 |        3,458,382.18 |    2.2% |      0.01 | `AddrManSelect`
|        1,059,900.00 |              943.49 |   47.5% |      0.01 | :wavy_dash: `AddrManSelectByNetwork` (Unstable with ~1.1 iters. Increase `minEpochIterations` to e.g. 11)
|           79,000.00 |           12,658.23 |   29.1% |      0.01 | :wavy_dash: `AddrManSelectFromAlmostEmpty` (Unstable with ~12.2 iters. Increase `minEpochIterations` to e.g. 122)
|          581,250.00 |            1,720.43 |    4.1% |      0.01 | `AssembleBlock`

|             ns/ecdh |              ecdh/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|           46,791.30 |           21,371.49 |    0.5% |      0.01 | `BIP324_ECDH`

|             ns/byte |              byte/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|              113.44 |        8,815,521.49 |    0.5% |      0.01 | `Base58CheckEncode`
|               26.41 |       37,868,835.99 |    0.6% |      0.01 | `Base58Decode`
|               76.55 |       13,063,597.82 |    1.8% |      0.01 | `Base58Encode`
|                9.45 |      105,876,049.29 |    3.7% |      0.01 | `Bech32Decode`
|               17.65 |       56,659,019.81 |    0.6% |      0.01 | `Bech32Encode`

|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|              188.81 |        5,296,396.75 |    1.0% |      0.01 | `BenchLockedPool`

|             ns/byte |              byte/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|                2.36 |      423,872,499.15 |    4.1% |      0.03 | `BenchRIPEMD160`

|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|               28.55 |       35,026,548.67 |    1.2% |      0.01 | `BenchTimeDeprecated`
|               27.32 |       36,609,274.56 |    0.9% |      0.01 | `BenchTimeMillis`
|               20.66 |       48,396,462.22 |    0.4% |      0.01 | `BenchTimeMillisSys`
|                2.17 |      460,582,963.96 |    1.0% |      0.01 | `BenchTimeMock`
|    1,448,861,600.00 |                0.69 |    0.4% |     15.91 | `BlockAssemblerAddPackageTxns`
|        2,555,100.00 |              391.37 |    1.1% |      0.03 | `BlockEncodingLargeExtra`
|        2,314,600.00 |              432.04 |    0.7% |      0.03 | `BlockEncodingNoExtra`
|        2,345,900.00 |              426.28 |    1.1% |      0.03 | `BlockEncodingStdExtra`
|    5,455,197,200.00 |                0.18 |    0.2% |    322.09 | `BlockFilterIndexSync`
|       45,462,500.00 |               22.00 |    1.0% |      0.51 | `BlockToJsonVerboseWrite`
|          442,400.00 |            2,260.40 |    0.4% |      0.01 | `BlockToJsonVerbosity1`
|       83,156,800.00 |               12.03 |    1.3% |      0.93 | `BlockToJsonVerbosity2`
|       82,647,900.00 |               12.10 |    0.4% |      0.92 | `BlockToJsonVerbosity3`
|          617,350.00 |            1,619.83 |    0.4% |      0.01 | `BnBExhaustion`

|              ns/job |               job/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|              230.93 |        4,330,272.61 |    7.0% |      0.09 | :wavy_dash: `CCheckQueueSpeedPrevectorJob` (Unstable with ~10.9 iters. Increase `minEpochIterations` to e.g. 109)

|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|              683.83 |        1,462,358.04 |    3.1% |      0.01 | `CCoinsCaching`

|             ns/byte |              byte/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|                1.67 |      599,666,018.53 |    0.5% |      0.02 | `CHACHA20_1MB`
|                1.73 |      577,714,344.81 |    0.8% |      0.01 | `CHACHA20_256BYTES`
|                2.00 |      500,654,679.58 |    2.6% |      0.01 | `CHACHA20_64BYTES`

|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|           91,781.82 |           10,895.40 |    1.7% |      0.01 | `CheckBlockIndex`
|       16,983,800.00 |               58.88 |    0.8% |      0.19 | `CoinSelection`
|      296,209,200.00 |                3.38 |    0.2% |      3.25 | `ComplexMemPool`

|            ns/block |             block/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|       86,831,100.00 |               11.52 |    1.3% |      0.98 | `ConnectBlockAllEcdsa`
|       84,704,400.00 |               11.81 |    1.0% |      0.94 | `ConnectBlockAllSchnorr`
|       87,313,300.00 |               11.45 |    0.6% |      0.97 | `ConnectBlockMixedEcdsaSchnorr`
|        6,986,900.00 |              143.12 |    2.2% |      0.08 | `DeserializeAndCheckBlockTest`
|        5,289,800.00 |              189.04 |    6.4% |      0.06 | :wavy_dash: `DeserializeBlockTest` (Unstable with ~1.0 iters. Increase `minEpochIterations` to e.g. 10)

|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|        7,979,700.00 |              125.32 |    0.5% |      0.09 | `DuplicateInputs`

|           ns/pubkey |            pubkey/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|           42,715.79 |           23,410.55 |    2.3% |      0.01 | `EllSwiftCreate`

|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|           17,945.28 |           55,724.95 |   13.8% |      0.01 | :wavy_dash: `EvictionProtection0Networks250Candidates` (Unstable with ~41.4 iters. Increase `minEpochIterations` to e.g. 414)
|           15,346.00 |           65,163.56 |   12.5% |      0.01 | :wavy_dash: `EvictionProtection1Networks250Candidates` (Unstable with ~60.7 iters. Increase `minEpochIterations` to e.g. 607)
|           21,886.36 |           45,690.55 |    9.2% |      0.01 | :wavy_dash: `EvictionProtection2Networks250Candidates` (Unstable with ~45.9 iters. Increase `minEpochIterations` to e.g. 459)
|            4,370.44 |          228,809.74 |    9.7% |      0.01 | :wavy_dash: `EvictionProtection3Networks050Candidates` (Unstable with ~222.7 iters. Increase `minEpochIterations` to e.g. 2227)
|           11,346.24 |           88,134.95 |    0.6% |      0.01 | `EvictionProtection3Networks100Candidates`
|           27,344.12 |           36,570.94 |    5.2% |      0.01 | :wavy_dash: `EvictionProtection3Networks250Candidates` (Unstable with ~36.3 iters. Increase `minEpochIterations` to e.g. 363)
|       21,228,500.00 |               47.11 |    1.2% |      0.23 | `ExpandDescriptor`

|             ns/byte |              byte/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|                2.37 |      421,182,519.28 |    1.9% |      0.03 | `FSCHACHA20POLY1305_1MB`
|                3.20 |      312,461,857.68 |    2.6% |      0.01 | `FSCHACHA20POLY1305_256BYTES`
|                5.63 |      177,559,854.43 |    1.6% |      0.01 | `FSCHACHA20POLY1305_64BYTES`

|           ns/number |            number/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|               10.98 |       91,078,985.96 |    0.4% |      0.01 | `FastRandom_rand32`
|               19.82 |       50,464,399.95 |    0.9% |      0.01 | `FastRandom_rand64`
|               12.52 |       79,874,882.70 |    2.2% |      0.01 | `FastRandom_randbits`
|                1.84 |      543,283,597.77 |    1.1% |      0.01 | `FastRandom_randbool`
|               11.42 |       87,556,632.60 |    0.8% |      0.01 | `FastRandom_randrange100`
|               12.19 |       82,008,200.82 |    1.4% |      0.01 | `FastRandom_randrange1000`
|               16.76 |       59,662,311.32 |    1.1% |      0.19 | `FastRandom_randrange1000000`
|               34.60 |       28,900,930.94 |    0.5% |      0.01 | `FastRandom_stdshuffle100`

|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|               15.03 |       66,527,760.60 |    2.1% |      0.01 | `FindByte`
|          499,850.00 |            2,000.60 |    0.7% |      0.01 | `GCSBlockFilterGetHash`
|       14,975,200.00 |               66.78 |    0.7% |      0.17 | `GCSFilterConstruct`
|        1,859,900.00 |              537.66 |    2.4% |      0.02 | `GCSFilterDecode`
|            5,623.89 |          177,812.90 |    0.9% |      0.01 | `GCSFilterDecodeSkipCheck`
|          212,120.00 |            4,714.31 |    0.5% |      0.01 | `GCSFilterMatch`

|           ns/base16 |            base16/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|                3.24 |      308,399,366.09 |    0.3% |      0.01 | `HexParse`

|             ns/byte |              byte/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|                0.94 |    1,064,388,971.68 |   12.4% |      0.01 | :wavy_dash: `HexStrBench` (Unstable with ~1.0 iters. Increase `minEpochIterations` to e.g. 10)

|           ns/number |            number/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|                1.76 |      567,551,949.57 |    1.1% |      0.01 | `InsecureRandom_rand32`
|                2.10 |      477,100,915.78 |    3.0% |      0.01 | `InsecureRandom_rand64`
|                2.17 |      460,846,145.69 |    0.9% |      0.01 | `InsecureRandom_randbits`
|                1.47 |      680,678,296.67 |    0.8% |      0.01 | `InsecureRandom_randbool`
|                7.20 |      138,831,042.62 |    2.6% |      0.01 | `InsecureRandom_randrange100`
|                6.88 |      145,243,282.50 |    1.5% |      0.01 | `InsecureRandom_randrange1000`
|                7.39 |      135,382,116.02 |    0.9% |      0.08 | `InsecureRandom_randrange1000000`
|               16.31 |       61,325,847.55 |    0.5% |      0.01 | `InsecureRandom_stdshuffle100`

|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|            9,683.87 |          103,264.49 |    0.6% |      0.01 | `Linearize16TxWorstCase120Iters`
|            3,162.66 |          316,189.30 |    7.0% |      0.01 | :wavy_dash: `Linearize16TxWorstCase20Iters` (Unstable with ~278.6 iters. Increase `minEpochIterations` to e.g. 2786)
|        1,031,700.00 |              969.27 |   12.3% |      0.01 | :wavy_dash: `Linearize32TxWorstCase15000Iters` (Unstable with ~1.0 iters. Increase `minEpochIterations` to e.g. 10)
|          351,066.67 |            2,848.46 |    0.6% |      0.01 | `Linearize32TxWorstCase5000Iters`
|          874,500.00 |            1,143.51 |    0.3% |      0.01 | `Linearize48TxWorstCase15000Iters`
|          321,950.00 |            3,106.07 |    1.6% |      0.01 | `Linearize48TxWorstCase5000Iters`
|          939,900.00 |            1,063.94 |    5.9% |      0.01 | :wavy_dash: `Linearize64TxWorstCase15000Iters` (Unstable with ~1.0 iters. Increase `minEpochIterations` to e.g. 10)
|          370,600.00 |            2,698.33 |    1.3% |      0.01 | `Linearize64TxWorstCase5000Iters`
|        1,365,800.00 |              732.17 |    2.5% |      0.02 | `Linearize75TxWorstCase15000Iters`
|          538,750.00 |            1,856.15 |    1.2% |      0.01 | `Linearize75TxWorstCase5000Iters`
|        1,392,900.00 |              717.93 |    5.3% |      0.02 | :wavy_dash: `Linearize99TxWorstCase15000Iters` (Unstable with ~1.0 iters. Increase `minEpochIterations` to e.g. 10)
|          541,400.00 |            1,847.06 |    3.0% |      0.01 | `Linearize99TxWorstCase5000Iters`
|            1,451.48 |          688,953.18 |    0.6% |      0.01 | `LinearizeNoIters16TxWorstCaseAnc`
|            2,159.19 |          463,135.79 |    0.2% |      0.01 | `LinearizeNoIters16TxWorstCaseLIMO`
|            4,901.71 |          204,010.26 |    3.4% |      0.01 | `LinearizeNoIters32TxWorstCaseAnc`
|            8,484.00 |          117,868.93 |    8.8% |      0.01 | :wavy_dash: `LinearizeNoIters32TxWorstCaseLIMO` (Unstable with ~118.3 iters. Increase `minEpochIterations` to e.g. 1183)
|            8,153.04 |          122,653.58 |    1.5% |      0.01 | `LinearizeNoIters48TxWorstCaseAnc`
|           17,206.90 |           58,116.23 |    3.9% |      0.01 | `LinearizeNoIters48TxWorstCaseLIMO`
|           14,300.00 |           69,930.07 |    3.0% |      0.01 | `LinearizeNoIters64TxWorstCaseAnc`
|           30,121.87 |           33,198.46 |    1.8% |      0.01 | `LinearizeNoIters64TxWorstCaseLIMO`
|           21,540.00 |           46,425.26 |    0.5% |      0.01 | `LinearizeNoIters75TxWorstCaseAnc`
|           46,038.10 |           21,721.14 |    0.7% |      0.01 | `LinearizeNoIters75TxWorstCaseLIMO`
|           37,370.59 |           26,759.01 |    4.7% |      0.01 | `LinearizeNoIters99TxWorstCaseAnc`
|           80,030.00 |           12,495.31 |    1.9% |      0.01 | `LinearizeNoIters99TxWorstCaseLIMO`
|          117,644.44 |            8,500.19 |    1.1% |      0.01 | `LinearizeOptimallyExample00`
|          182,060.00 |            5,492.69 |    0.3% |      0.01 | `LinearizeOptimallyExample01`
|           88,050.00 |           11,357.18 |    1.8% |      0.01 | `LinearizeOptimallyExample02`
|          106,620.00 |            9,379.10 |    2.9% |      0.01 | `LinearizeOptimallyExample03`
|            4,921.03 |          203,209.67 |    0.6% |      0.01 | `LinearizeOptimallyExample04`
|           25,166.67 |           39,735.10 |    0.2% |      0.01 | `LinearizeOptimallyExample05`
|           70,709.09 |           14,142.45 |    1.2% |      0.01 | `LinearizeOptimallyExample06`
|           16,685.71 |           59,931.51 |    1.7% |      0.01 | `LinearizeOptimallyExample07`
|          138,250.00 |            7,233.27 |    1.5% |      0.01 | `LinearizeOptimallyExample08`
|           25,919.44 |           38,581.07 |    0.6% |      0.01 | `LinearizeOptimallyExample09`
|           18,258.18 |           54,769.97 |    0.5% |      0.01 | `LinearizeOptimallyExample10`
|      496,799,900.00 |                2.01 |    0.6% |      5.46 | `LinearizeOptimallyExample11`
|          787,500.00 |            1,269.84 |    1.5% |      0.01 | `LinearizeOptimallyExample12`
|          116,711.11 |            8,568.16 |    1.1% |      0.01 | `LinearizeOptimallyExample13`
|          718,800.00 |            1,391.21 |    3.8% |      0.01 | `LinearizeOptimallyExample14`
|       21,523,300.00 |               46.46 |    0.6% |      0.24 | `LinearizeOptimallyExample15`
|       14,895,300.00 |               67.14 |    1.1% |      0.17 | `LinearizeOptimallyExample16`
|       18,399,200.00 |               54.35 |    0.3% |      0.20 | `LinearizeOptimallyExample17`
|       18,561,100.00 |               53.88 |    0.3% |      0.21 | `LinearizeOptimallyExample18`
|       22,151,600.00 |               45.14 |    3.1% |      0.25 | `LinearizeOptimallyExample19`
|       38,314,200.00 |               26.10 |    3.5% |      0.43 | `LoadExternalBlockFile`
|           13,187.50 |           75,829.38 |    1.0% |      0.01 | `LogWithDebug`
|           21,370.21 |           46,794.11 |    6.2% |      0.01 | :wavy_dash: `LogWithThreadNames` (Unstable with ~45.1 iters. Increase `minEpochIterations` to e.g. 451)
|                5.64 |      177,250,274.97 |    1.9% |      0.01 | `LogWithoutDebug`
|           21,744.00 |           45,989.70 |    3.9% |      0.01 | `LogWithoutThreadNames`
|               82.91 |       12,061,834.77 |    0.3% |      0.01 | `LogWithoutWriteToFile`
|      127,724,700.00 |                7.83 |    0.3% |      1.41 | `MempoolCheck`
|           91,550.00 |           10,922.99 |    8.6% |      0.01 | :wavy_dash: `MempoolCheckEphemeralSpends` (Unstable with ~11.0 iters. Increase `minEpochIterations` to e.g. 110)
|          117,588.89 |            8,504.20 |    3.1% |      0.01 | `MempoolEviction`
|            1,328.90 |          752,501.92 |    1.3% |      0.01 | `MergeLinearizations16TxWorstCase`
|            4,865.80 |          205,515.92 |    1.8% |      0.01 | `MergeLinearizations32TxWorstCase`
|            9,940.95 |          100,593.98 |    0.4% |      0.01 | `MergeLinearizations48TxWorstCase`
|           18,200.00 |           54,945.05 |    0.9% |      0.01 | `MergeLinearizations64TxWorstCase`
|           29,572.73 |           33,814.94 |    4.4% |      0.01 | `MergeLinearizations75TxWorstCase`
|           50,065.00 |           19,974.03 |    1.4% |      0.01 | `MergeLinearizations99TxWorstCase`

|             ns/leaf |              leaf/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|              613.15 |        1,630,911.40 |    2.6% |      0.06 | `MerkleRoot`

|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|           19,535.42 |           51,189.08 |    0.5% |      0.01 | `MuHash`
|           18,587.50 |           53,799.60 |    0.6% |      0.01 | `MuHashDiv`
|          104,680.00 |            9,552.92 |    0.2% |      0.01 | `MuHashFinalize`
|           19,165.12 |           52,178.13 |    4.1% |      0.01 | `MuHashMul`
|              932.36 |        1,072,542.51 |    4.9% |      0.01 | `MuHashPrecompute`

|             ns/byte |              byte/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|                0.02 |   44,499,578,618.09 |    0.4% |      0.01 | `ObfuscationBench`

|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|       24,853,800.00 |               40.24 |    0.0% |      0.02 | `OrphanageEraseForBlock`
|        8,055,900.00 |              124.13 |    0.0% |      0.01 | `OrphanageEraseForPeer`
|        8,103,300.00 |              123.41 |    0.0% |      0.01 | `OrphanageMultiPeerEviction`
|          741,700.00 |            1,348.25 |    0.0% |      0.00 | `OrphanageSinglePeerEviction`

|             ns/byte |              byte/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|                0.70 |    1,436,012,051.49 |    3.9% |      0.01 | `POLY1305_1MB`
|                0.75 |    1,337,172,194.27 |    1.5% |      0.01 | `POLY1305_256BYTES`
|                0.99 |    1,012,746,607.99 |    0.8% |      0.01 | `POLY1305_64BYTES`

|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|               74.43 |       13,435,935.02 |    2.8% |      0.05 | `PoolAllocator_StdUnorderedMap`
|               23.94 |       41,774,002.65 |    2.7% |      0.02 | `PoolAllocator_StdUnorderedMapWithPoolResource`
|              837.66 |        1,193,799.94 |    1.0% |      0.01 | `PostLinearize16TxWorstCase`
|            2,793.77 |          357,939.06 |    4.1% |      0.01 | `PostLinearize32TxWorstCase`
|            6,151.00 |          162,575.19 |    4.4% |      0.01 | `PostLinearize48TxWorstCase`
|           10,197.59 |           98,062.38 |    3.3% |      0.01 | `PostLinearize64TxWorstCase`
|           13,336.62 |           74,981.52 |    1.4% |      0.01 | `PostLinearize75TxWorstCase`
|           21,982.50 |           45,490.73 |    0.6% |      0.01 | `PostLinearize99TxWorstCase`
|              233.80 |        4,277,164.38 |    8.7% |      0.01 | :wavy_dash: `PrePadded` (Unstable with ~4,344.4 iters. Increase `minEpochIterations` to e.g. 43444)
|                8.78 |      113,914,290.53 |   12.8% |      0.01 | :wavy_dash: `PrevectorClearNontrivial` (Unstable with ~59,749.5 iters. Increase `minEpochIterations` to e.g. 597495)
|                6.34 |      157,752,831.72 |    3.6% |      0.01 | `PrevectorClearTrivial`
|              151.85 |        6,585,446.16 |    1.1% |      0.01 | `PrevectorDeserializeNontrivial`
|               12.26 |       81,573,896.35 |    1.7% |      0.01 | `PrevectorDeserializeTrivial`
|                   - |                   - |       - |         - | :boom: `PrevectorDestructorNontrivial` (iterations overflow. Maybe your code got optimized away?)
|                   - |                   - |       - |         - | :boom: `PrevectorDestructorTrivial` (iterations overflow. Maybe your code got optimized away?)
|            3,030.00 |          330,033.00 |    0.6% |      0.01 | `PrevectorFillVectorDirectNontrivial`
|              892.58 |        1,120,346.95 |    0.3% |      0.01 | `PrevectorFillVectorDirectTrivial`
|           15,746.00 |           63,508.19 |    1.3% |      0.01 | `PrevectorFillVectorIndirectNontrivial`
|           14,486.15 |           69,031.44 |    2.9% |      0.01 | `PrevectorFillVectorIndirectTrivial`
|                3.80 |      263,020,209.20 |    1.4% |      0.01 | `PrevectorResizeNontrivial`
|                3.09 |      323,837,259.10 |    0.7% |      0.01 | `PrevectorResizeTrivial`
|        6,568,900.00 |              152.23 |    1.1% |      0.08 | `ReadBlockBench`
|        1,615,300.00 |              619.08 |    9.6% |      0.02 | :wavy_dash: `ReadRawBlockBench` (Unstable with ~1.0 iters. Increase `minEpochIterations` to e.g. 10)
|              420.26 |        2,379,495.03 |    4.2% |      0.01 | `RegularPadded`
|              449.27 |        2,225,845.02 |    0.6% |      0.01 | `RollingBloom`
|           28,907.89 |           34,592.63 |    0.2% |      0.01 | `RollingBloomReset`
|       15,066,000.00 |               66.37 |    0.7% |      0.17 | `RpcMempool`

|             ns/byte |              byte/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|                1.74 |      574,415,532.20 |    1.2% |      0.02 | `SHA1`
|                9.15 |      109,308,648.15 |    1.7% |      0.01 | `SHA256D64_1024_AVX2 using the 'sse4(1way)' SHA256 implementation`
|                9.16 |      109,117,549.12 |    2.1% |      0.01 | `SHA256D64_1024_SHANI using the 'sse4(1way)' SHA256 implementation`
|                9.04 |      110,618,617.60 |    0.8% |      0.01 | `SHA256D64_1024_SSE4 using the 'sse4(1way)' SHA256 implementation`
|               11.32 |       88,359,174.87 |    0.6% |      0.01 | `SHA256D64_1024_STANDARD using the 'standard' SHA256 implementation`
|                6.86 |      145,720,281.45 |    6.1% |      0.01 | :wavy_dash: `SHA256_32b_AVX2 using the 'sse4(1way)' SHA256 implementation` (Unstable with ~4,179.5 iters. Increase `minEpochIterations` to e.g. 41795)
|                6.75 |      148,211,720.90 |    3.9% |      0.01 | `SHA256_32b_SHANI using the 'sse4(1way)' SHA256 implementation`
|                6.50 |      153,826,170.01 |    0.3% |      0.01 | `SHA256_32b_SSE4 using the 'sse4(1way)' SHA256 implementation`
|                9.35 |      106,922,385.38 |    0.2% |      0.01 | `SHA256_32b_STANDARD using the 'standard' SHA256 implementation`
|                2.92 |      342,348,510.78 |    1.4% |      0.03 | `SHA256_AVX2 using the 'sse4(1way)' SHA256 implementation`
|                2.96 |      337,541,348.82 |    2.8% |      0.03 | `SHA256_SHANI using the 'sse4(1way)' SHA256 implementation`
|                2.95 |      339,523,987.37 |    1.7% |      0.03 | `SHA256_SSE4 using the 'sse4(1way)' SHA256 implementation`
|                4.36 |      229,247,380.85 |    1.1% |      0.05 | `SHA256_STANDARD using the 'standard' SHA256 implementation`
|                3.92 |      255,063,000.56 |    2.4% |      0.05 | `SHA3_256_1M`
|                2.60 |      385,015,208.10 |    2.6% |      0.03 | `SHA512`

|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|          108,296.49 |            9,233.91 |    0.4% |      0.13 | `SignSchnorrWithMerkleRoot`
|          108,620.59 |            9,206.36 |    0.8% |      0.13 | `SignSchnorrWithNullMerkleRoot`
|          190,794.39 |            5,241.24 |    3.0% |      0.23 | `SignTransactionECDSA`
|          137,775.24 |            7,258.20 |    0.5% |      0.17 | `SignTransactionSchnorr`
|               31.14 |       32,113,941.55 |    6.5% |      0.01 | :wavy_dash: `SipHash_32b` (Unstable with ~30,618.5 iters. Increase `minEpochIterations` to e.g. 306185)
|                9.23 |      108,384,801.58 |    6.0% |      0.02 | :wavy_dash: `Trig` (Unstable with ~187,765.5 iters. Increase `minEpochIterations` to e.g. 1877655)
|       28,278,000.00 |               35.36 |    0.0% |      0.03 | `TxGraphTrim`
|          102,250.00 |            9,779.95 |    0.5% |      0.01 | `VerifyNestedIfScript`
|           41,344.44 |           24,187.05 |    1.7% |      0.01 | `VerifyScriptBench`
|       72,342,700.00 |               13.82 |    0.3% |      0.80 | `WalletAvailableCoins`
|            6,493.75 |          153,994.23 |    4.4% |      0.01 | `WalletBalanceClean`
|            6,882.52 |          145,295.67 |    1.4% |      0.01 | `WalletBalanceDirty`
|            7,061.03 |          141,622.41 |   10.3% |      0.01 | :wavy_dash: `WalletBalanceMine` (Unstable with ~108.5 iters. Increase `minEpochIterations` to e.g. 1085)
|               78.27 |       12,776,287.80 |    0.7% |      0.01 | `WalletBalanceWatch`
|    1,101,592,500.00 |                0.91 |    0.3% |     12.15 | `WalletCreateEncrypted`
|      780,882,100.00 |                1.28 |    1.9% |      8.53 | `WalletCreatePlain`
|        1,724,300.00 |              579.95 |    1.5% |      0.02 | `WalletCreateTxUseOnlyPresetInputs`
|      125,178,300.00 |                7.99 |    2.7% |      1.40 | `WalletCreateTxUsePresetInputsAndCoinSelection`
|              104.93 |        9,529,737.21 |    0.3% |      0.01 | `WalletIsMineDescriptors`
|              104.95 |        9,527,988.87 |    0.3% |      0.01 | `WalletIsMineMigratedDescriptors`
|      445,204,800.00 |                2.25 |    0.5% |      2.22 | `WalletLoadingDescriptors`
|    7,056,696,700.00 |                0.14 |    0.0% |      7.06 | `WalletMigration`
|       10,330,300.00 |               96.80 |    2.1% |      0.11 | `WriteBlockBench`

@hebasto
Copy link
Member Author

hebasto commented Nov 4, 2025

Rebased to resolve the conflict with the merged #30595.

MSVC does not support `__int128` by design, while clang-cl offers only
limited support out of the box: `__int128` division requires the
builtins library.

For now, disable the use of `__int128` when building on Windows.
Being compatible with cl.exe, clang-cl supports most of the same
command-line options. These options are typically guarded by the `MSVC`
CMake variable.

Options not supported by clang-cl, such as `/wdNNN`, are now guarded by
`CMAKE_CXX_COMPILER_ID STREQUAL "MSVC"`.

Additionally, `-Wno-unused-member-function` is now used when compiling
leveldb with clang-cl.
@hebasto
Copy link
Member Author

hebasto commented Dec 1, 2025

Rebased to resolve conflicts.

$<TARGET_NAME_IF_EXISTS:QRencode::QRencode>
$<$<PLATFORM_ID:Darwin>:-framework\ AppKit>
$<$<CXX_COMPILER_ID:MSVC>:shlwapi>
$<$<PLATFORM_ID:Windows>:shlwapi>
Copy link
Member

Choose a reason for hiding this comment

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

Is this going to be overlinking now?

/Zc:preprocessor
/Zc:__cplusplus
/sdl
# TODO: __int128 division when using clang-cl requires the builtins library.
Copy link
Member

Choose a reason for hiding this comment

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

Why not use the builtins? Not sure I understand the TODO.

job-name: 'Windows native, VS 2022'
job-name: 'Windows native, MSVC'
- job-type: clang-cl
env_vars: { CXXFLAGS: '-Wno-return-type -Wno-unused-private-field -Wno-error=conditional-uninitialized -Wno-error=missing-braces' }
Copy link
Member

Choose a reason for hiding this comment

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

-Wno-error=missing-braces
-Wno-unused-private-field

Why are these needed/are they being fixed?

Copy link
Member Author

Choose a reason for hiding this comment

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

-Wno-error=missing-braces

From https://github.com/bitcoin/bitcoin/actions/runs/19820405203/job/56781245720:

D:\a\bitcoin\bitcoin\src\test\i2p_tests.cpp(116,34): warning : suggest braces around initialization of subobject [-Wmissing-braces] [D:\a\bitcoin\bitcoin\build\src\test\test_bitcoin.vcxproj]
  C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\shared\ws2ipdef.h(251,33): note: expanded from macro 'IN6ADDR_LOOPBACK_INIT'
D:\a\bitcoin\bitcoin\src\test\i2p_tests.cpp(159,38): warning : suggest braces around initialization of subobject [-Wmissing-braces] [D:\a\bitcoin\bitcoin\build\src\test\test_bitcoin.vcxproj]
  C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\shared\ws2ipdef.h(251,33): note: expanded from macro 'IN6ADDR_LOOPBACK_INIT'
D:\a\bitcoin\bitcoin\src\test\netbase_tests.cpp(502,36): warning : suggest braces around initialization of subobject [-Wmissing-braces] [D:\a\bitcoin\bitcoin\build\src\test\test_bitcoin.vcxproj]
  C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\shared\ws2ipdef.h(251,33): note: expanded from macro 'IN6ADDR_LOOPBACK_INIT'
D:\a\bitcoin\bitcoin\src\test\netbase_tests.cpp(507,36): warning : suggest braces around initialization of subobject [-Wmissing-braces] [D:\a\bitcoin\bitcoin\build\src\test\test_bitcoin.vcxproj]
  C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\shared\ws2ipdef.h(251,33): note: expanded from macro 'IN6ADDR_LOOPBACK_INIT'
D:\a\bitcoin\bitcoin\src\test\netbase_tests.cpp(512,36): warning : suggest braces around initialization of subobject [-Wmissing-braces] [D:\a\bitcoin\bitcoin\build\src\test\test_bitcoin.vcxproj]
  C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\shared\ws2ipdef.h(251,33): note: expanded from macro 'IN6ADDR_LOOPBACK_INIT'

-Wno-unused-private-field

D:\a\bitcoin\bitcoin\src\util/subprocess.h(759,10): warning : private field 'parent_' is not used [-Wunused-private-field] [D:\a\bitcoin\bitcoin\build\src\util\bitcoin_util.vcxproj]
D:\a\bitcoin\bitcoin\src\util/subprocess.h(760,7): warning : private field 'err_wr_pipe_' is not used [-Wunused-private-field] [D:\a\bitcoin\bitcoin\build\src\util\bitcoin_util.vcxproj]
D:\a\bitcoin\bitcoin\src\util/subprocess.h(1038,7): warning : private field 'child_pid_' is not used [-Wunused-private-field] [D:\a\bitcoin\bitcoin\build\src\util\bitcoin_util.vcxproj]

Why are these needed/are they being fixed?

I'm going to work on the fixes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Use clang in VS build?

5 participants