From 300ee40d64505cf0ca3b15d245ccb72fae3eb57e Mon Sep 17 00:00:00 2001 From: canepat <16927169+canepat@users.noreply.github.com> Date: Mon, 3 Mar 2025 11:53:50 +0100 Subject: [PATCH 01/10] ci: fix Clang ASAN after PR 2753 --- silkworm/db/snapshot_repository_test.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/silkworm/db/snapshot_repository_test.cpp b/silkworm/db/snapshot_repository_test.cpp index e8e748ab4f..c1754105c5 100644 --- a/silkworm/db/snapshot_repository_test.cpp +++ b/silkworm/db/snapshot_repository_test.cpp @@ -207,6 +207,8 @@ TEST_CASE("SnapshotRepository::find_segment", "[silkworm][node][snapshot]") { } } +// Skip to avoid Clang ASAN runtime error: reference binding to misaligned address +#ifndef SILKWORM_SANITIZE TEST_CASE("SnapshotRepository::find_block_num", "[silkworm][node][snapshot]") { TemporaryDirectory tmp_dir; @@ -245,6 +247,7 @@ TEST_CASE("SnapshotRepository::find_block_num", "[silkworm][node][snapshot]") { block_num = query.exec(silkworm::Hash{from_hex("0x0000000000000000000000000000000000000000000000000000000000000000").value()}); // CHECK_FALSE(block_num.has_value()); // needs correct key check in index } +#endif // SILKWORM_SANITIZE static auto move_last_write_time(const std::filesystem::path& p, const std::filesystem::file_time_type::duration& d) { const auto ftime = std::filesystem::last_write_time(p); From 01fa87f5c795965c559844883f16de495646d19e Mon Sep 17 00:00:00 2001 From: canepat <16927169+canepat@users.noreply.github.com> Date: Mon, 3 Mar 2025 13:12:11 +0100 Subject: [PATCH 02/10] ci: fix Windows build error by skipping --- .../db/datastore/common/ranges/merge_unique_many_view_test.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/silkworm/db/datastore/common/ranges/merge_unique_many_view_test.cpp b/silkworm/db/datastore/common/ranges/merge_unique_many_view_test.cpp index 6dce58e744..0fa1706476 100644 --- a/silkworm/db/datastore/common/ranges/merge_unique_many_view_test.cpp +++ b/silkworm/db/datastore/common/ranges/merge_unique_many_view_test.cpp @@ -71,11 +71,14 @@ TEST_CASE("MergeUniqueManyView") { CHECK(vector_from_range(merge_unique_many(ranges(silkworm::ranges::owning_view(std::vector{1, 2, 3}), silkworm::ranges::owning_view(std::vector{})))) == std::vector{1, 2, 3}); CHECK(vector_from_range(merge_unique_many(ranges(silkworm::ranges::owning_view(std::vector{}), silkworm::ranges::owning_view(std::vector{2, 3, 4})))) == std::vector{2, 3, 4}); +// Skip to avoid error C3889: call to object of class type 'std::ranges::_Begin::_Cpo': no matching call operator found +#ifndef _WIN32 using IntToVectorFunc = std::function(int)>; CHECK(vector_from_range(merge_unique_many(ranges( silkworm::ranges::owning_view(std::vector{1, 2, 3}) | std::views::transform(IntToVectorFunc{[](int v) { return std::vector{v, v, v}; }}) | std::views::join, silkworm::ranges::owning_view(std::vector{4, 4, 4}) | std::views::transform(IntToVectorFunc{[](int v) { return std::vector{v}; }}) | std::views::join))) == std::vector{1, 2, 3, 4}); +#endif // _WIN32 } } // namespace silkworm::views From 3d0625b19eda1d96632c19347ead118d3e5ee8d0 Mon Sep 17 00:00:00 2001 From: canepat <16927169+canepat@users.noreply.github.com> Date: Mon, 3 Mar 2025 15:13:05 +0100 Subject: [PATCH 03/10] improve comment --- .../db/datastore/common/ranges/merge_unique_many_view_test.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/silkworm/db/datastore/common/ranges/merge_unique_many_view_test.cpp b/silkworm/db/datastore/common/ranges/merge_unique_many_view_test.cpp index 0fa1706476..9ed542116f 100644 --- a/silkworm/db/datastore/common/ranges/merge_unique_many_view_test.cpp +++ b/silkworm/db/datastore/common/ranges/merge_unique_many_view_test.cpp @@ -71,7 +71,8 @@ TEST_CASE("MergeUniqueManyView") { CHECK(vector_from_range(merge_unique_many(ranges(silkworm::ranges::owning_view(std::vector{1, 2, 3}), silkworm::ranges::owning_view(std::vector{})))) == std::vector{1, 2, 3}); CHECK(vector_from_range(merge_unique_many(ranges(silkworm::ranges::owning_view(std::vector{}), silkworm::ranges::owning_view(std::vector{2, 3, 4})))) == std::vector{2, 3, 4}); -// Skip to avoid error C3889: call to object of class type 'std::ranges::_Begin::_Cpo': no matching call operator found +// Skip to avoid Windows error C3889: call to object of class type 'std::ranges::_Begin::_Cpo': no matching call operator found +// Unable to reproduce: https://godbolt.org/z/3jd5brKMj #ifndef _WIN32 using IntToVectorFunc = std::function(int)>; CHECK(vector_from_range(merge_unique_many(ranges( From 08bfd62ba191464c6bcf271c70be5bf3fbb2e99d Mon Sep 17 00:00:00 2001 From: canepat <16927169+canepat@users.noreply.github.com> Date: Mon, 3 Mar 2025 15:14:12 +0100 Subject: [PATCH 04/10] hard-code protobuf 5.27.0 recipe revision for Windows build --- conanfile.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conanfile.py b/conanfile.py index 8bfa7820f7..ea5822a75e 100644 --- a/conanfile.py +++ b/conanfile.py @@ -19,6 +19,7 @@ class SilkwormRecipe(ConanFile): settings = 'os', 'compiler', 'build_type', 'arch' generators = 'CMakeDeps' + # Hard-coded recipe revisions prevent issues in Windows build after publication of a new revision def requirements(self): self.requires('catch2/3.6.0') self.requires('magic_enum/0.8.2') @@ -35,14 +36,13 @@ def requirements(self): self.requires('boost/1.83.0', override=True) self.requires('cli11/2.2.0') self.requires('gmp/6.2.1') - # Hard-coded recipe revision to prevent issue in Windows build after publication of new revision self.requires('grpc/1.67.1#eae57ed8067bb53c6b0441a563b56d59', override=True) self.requires('gtest/1.12.1') self.requires('jwt-cpp/0.6.0') self.requires('libtorrent/2.0.10') self.requires('mimalloc/2.1.2') self.requires('openssl/3.3.2') - self.requires('protobuf/5.27.0') + self.requires('protobuf/5.27.0#aec4ff9e4176f92185bf06f806ea518c8a2b0a3e') self.requires('roaring/1.1.2') self.requires('snappy/1.1.7') self.requires('spdlog/1.12.0') From 6502cec8009c8b4dcc17428494d4a71e88abf0a5 Mon Sep 17 00:00:00 2001 From: canepat <16927169+canepat@users.noreply.github.com> Date: Mon, 3 Mar 2025 15:53:58 +0100 Subject: [PATCH 05/10] fix protobuf 5.27.0 recipe --- conanfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conanfile.py b/conanfile.py index ea5822a75e..6d6bfe8818 100644 --- a/conanfile.py +++ b/conanfile.py @@ -42,7 +42,7 @@ def requirements(self): self.requires('libtorrent/2.0.10') self.requires('mimalloc/2.1.2') self.requires('openssl/3.3.2') - self.requires('protobuf/5.27.0#aec4ff9e4176f92185bf06f806ea518c8a2b0a3e') + self.requires('protobuf/5.27.0#fe72d115daa683469cd940f0407ce55e') self.requires('roaring/1.1.2') self.requires('snappy/1.1.7') self.requires('spdlog/1.12.0') From 5695aed6d9f569459b945c73686b8015a9858261 Mon Sep 17 00:00:00 2001 From: canepat <16927169+canepat@users.noreply.github.com> Date: Mon, 3 Mar 2025 16:45:32 +0100 Subject: [PATCH 06/10] fix protobuf 5.27.0 recipe with override --- conanfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conanfile.py b/conanfile.py index 6d6bfe8818..9d7fd43da9 100644 --- a/conanfile.py +++ b/conanfile.py @@ -42,7 +42,7 @@ def requirements(self): self.requires('libtorrent/2.0.10') self.requires('mimalloc/2.1.2') self.requires('openssl/3.3.2') - self.requires('protobuf/5.27.0#fe72d115daa683469cd940f0407ce55e') + self.requires('protobuf/5.27.0#fe72d115daa683469cd940f0407ce55e', override=True) self.requires('roaring/1.1.2') self.requires('snappy/1.1.7') self.requires('spdlog/1.12.0') From f04ade67a2ea1dcca3368f2723df96f38dd57146 Mon Sep 17 00:00:00 2001 From: canepat <16927169+canepat@users.noreply.github.com> Date: Mon, 3 Mar 2025 18:25:52 +0100 Subject: [PATCH 07/10] ci: skip more unit tests in Windows build --- .../common/ranges/merge_unique_many_view_test.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/silkworm/db/datastore/common/ranges/merge_unique_many_view_test.cpp b/silkworm/db/datastore/common/ranges/merge_unique_many_view_test.cpp index 9ed542116f..641a58b6bc 100644 --- a/silkworm/db/datastore/common/ranges/merge_unique_many_view_test.cpp +++ b/silkworm/db/datastore/common/ranges/merge_unique_many_view_test.cpp @@ -34,6 +34,9 @@ std::vector ranges(TRange r1, TRange r2) { return results; } +// Skip to avoid Windows error C3889: call to object of class type 'std::ranges::_Begin::_Cpo': no matching call operator found +// Unable to reproduce: https://godbolt.org/z/3jd5brKMj +#ifndef _WIN32 TEST_CASE("MergeUniqueManyView") { CHECK(vector_from_range(merge_unique_many(ranges( silkworm::ranges::owning_view(std::vector{1, 2, 3}), @@ -71,15 +74,13 @@ TEST_CASE("MergeUniqueManyView") { CHECK(vector_from_range(merge_unique_many(ranges(silkworm::ranges::owning_view(std::vector{1, 2, 3}), silkworm::ranges::owning_view(std::vector{})))) == std::vector{1, 2, 3}); CHECK(vector_from_range(merge_unique_many(ranges(silkworm::ranges::owning_view(std::vector{}), silkworm::ranges::owning_view(std::vector{2, 3, 4})))) == std::vector{2, 3, 4}); -// Skip to avoid Windows error C3889: call to object of class type 'std::ranges::_Begin::_Cpo': no matching call operator found -// Unable to reproduce: https://godbolt.org/z/3jd5brKMj -#ifndef _WIN32 using IntToVectorFunc = std::function(int)>; CHECK(vector_from_range(merge_unique_many(ranges( silkworm::ranges::owning_view(std::vector{1, 2, 3}) | std::views::transform(IntToVectorFunc{[](int v) { return std::vector{v, v, v}; }}) | std::views::join, silkworm::ranges::owning_view(std::vector{4, 4, 4}) | std::views::transform(IntToVectorFunc{[](int v) { return std::vector{v}; }}) | std::views::join))) == std::vector{1, 2, 3, 4}); -#endif // _WIN32 + } +#endif // _WIN32 } // namespace silkworm::views From 0f16cf1c5dd08af0db50f216d7f370d5a788f458 Mon Sep 17 00:00:00 2001 From: GitHub Date: Mon, 3 Mar 2025 21:55:02 +0000 Subject: [PATCH 08/10] make fmt --- .../db/datastore/common/ranges/merge_unique_many_view_test.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/silkworm/db/datastore/common/ranges/merge_unique_many_view_test.cpp b/silkworm/db/datastore/common/ranges/merge_unique_many_view_test.cpp index 641a58b6bc..b07866bc7f 100644 --- a/silkworm/db/datastore/common/ranges/merge_unique_many_view_test.cpp +++ b/silkworm/db/datastore/common/ranges/merge_unique_many_view_test.cpp @@ -79,7 +79,6 @@ TEST_CASE("MergeUniqueManyView") { silkworm::ranges::owning_view(std::vector{1, 2, 3}) | std::views::transform(IntToVectorFunc{[](int v) { return std::vector{v, v, v}; }}) | std::views::join, silkworm::ranges::owning_view(std::vector{4, 4, 4}) | std::views::transform(IntToVectorFunc{[](int v) { return std::vector{v}; }}) | std::views::join))) == std::vector{1, 2, 3, 4}); - } #endif // _WIN32 From 41ea02641761af480987ec5182d42119d36cc354 Mon Sep 17 00:00:00 2001 From: canepat <16927169+canepat@users.noreply.github.com> Date: Mon, 3 Mar 2025 23:06:09 +0100 Subject: [PATCH 09/10] fix protobuf 5.27.0 recipe only for Windows --- conanfile.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/conanfile.py b/conanfile.py index 9d7fd43da9..2a9cd89220 100644 --- a/conanfile.py +++ b/conanfile.py @@ -42,7 +42,10 @@ def requirements(self): self.requires('libtorrent/2.0.10') self.requires('mimalloc/2.1.2') self.requires('openssl/3.3.2') - self.requires('protobuf/5.27.0#fe72d115daa683469cd940f0407ce55e', override=True) + if self.settings.os == 'Windows': + self.requires('protobuf/5.27.0#fe72d115daa683469cd940f0407ce55e', override=True) + else: + self.requires('protobuf/5.27.0') self.requires('roaring/1.1.2') self.requires('snappy/1.1.7') self.requires('spdlog/1.12.0') From 66ccc434b729f2120760700ccb28e61d87947829 Mon Sep 17 00:00:00 2001 From: canepat <16927169+canepat@users.noreply.github.com> Date: Tue, 4 Mar 2025 00:28:39 +0100 Subject: [PATCH 10/10] ci: more fix Clang ASAN after PR 2753 --- silkworm/db/snapshot_test.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/silkworm/db/snapshot_test.cpp b/silkworm/db/snapshot_test.cpp index 91c3c20674..1210067db2 100644 --- a/silkworm/db/snapshot_test.cpp +++ b/silkworm/db/snapshot_test.cpp @@ -66,6 +66,8 @@ TEST_CASE("Snapshot::for_each_item", "[silkworm][node][snapshot][snapshot]") { CHECK(++it == decoder.end()); } +// Skip to avoid Clang ASAN runtime error: reference binding to misaligned address +#ifndef SILKWORM_SANITIZE // https://etherscan.io/block/1500013 TEST_CASE("HeaderSnapshot::header_by_number OK", "[silkworm][node][snapshot][index]") { TemporaryDirectory tmp_dir; @@ -253,6 +255,7 @@ TEST_CASE("TransactionSnapshot::txn_rlp_range OK", "[silkworm][node][snapshot][i CHECK_FALSE(query.exec(7'341'261, 1)); // before the first system tx CHECK_FALSE(query.exec(7'341'274, 1)); // after the last system tx } +#endif // SILKWORM_SANITIZE TEST_CASE("slice_tx_payload", "[silkworm][node][snapshot]") { const std::vector access_list{