From 575b35af90ef010ee1531f55165de9b5b34d4c7c Mon Sep 17 00:00:00 2001 From: "Z. Liu" Date: Tue, 16 Sep 2025 04:09:35 +0000 Subject: dev-db/mongodb: fix build issue w/ clang 20 upstream patch is applied, otherwise the build w/ clang 20 fails with: > src/mongo/bson/util/bsoncolumnbuilder.h:285:49: error: call to deleted constructor of 'const mongo::TrackingAllocator &' However, the build still fails with: > /usr/bin/x86_64-pc-linux-gnu-ld.bfd: build/gentoo/mongo/db/storage/wiredtiger/wiredtiger_record_store.o: in function `mongo::WiredTigerRecordStore::getEarliestOplogTimestamp(mongo::OperationContext*)': > /usr/lib/gcc/x86_64-pc-linux-gnu/14/include/g++-v14/bits/atomic_base.h:1002:(.text+0x7da9): undefined reference to `__atomic_compare_exchange' > clang++: error: linker command failed with exit code 1 (use -v to see invocation) The reason is that Timestamp is a composite type, which requires -latomic when building with clang++ and libstdc++. Mongodb's SConstruct only checks for some basic types ('int64_t', 'uint64_t', 'int32_t', 'uint32_t'), so this case is not detected. Test case below: $ cat a.cc #include struct Timestamp { unsigned int t, i; }; template struct AtomicWord { std::atomic v; T compareAndSwap(T e, T n) { v.compare_exchange_strong(e,n); return e; } }; int main() { AtomicWord x; Timestamp a{0,0}, b{1,1}; x.compareAndSwap(a,b); return 0; } $ clang++ -stdlib=libstdc++ a.cc /usr/bin/x86_64-pc-linux-gnu-ld.bfd: /tmp/a-1e3f91.o: in function `std::atomic::compare_exchange_strong(Timestamp&, Timestamp, std::memory_order, std::memory_order)': a.cc:(.text._ZNSt6atomicI9TimestampE23compare_exchange_strongERS0_S0_St12memory_orderS3_[_ZNSt6atomicI9TimestampE23compare_exchange_strongERS0_S0_St12memory_orderS3_]+0x222): undefined reference to `__atomic_compare_exchange' /usr/bin/x86_64-pc-linux-gnu-ld.bfd: a.cc:(.text._ZNSt6atomicI9TimestampE23compare_exchange_strongERS0_S0_St12memory_orderS3_[_ZNSt6atomicI9TimestampE23compare_exchange_strongERS0_S0_St12memory_orderS3_]+0x28d): undefined reference to `__atomic_compare_exchange' /usr/bin/x86_64-pc-linux-gnu-ld.bfd: a.cc:(.text._ZNSt6atomicI9TimestampE23compare_exchange_strongERS0_S0_St12memory_orderS3_[_ZNSt6atomicI9TimestampE23compare_exchange_strongERS0_S0_St12memory_orderS3_]+0x2f8): undefined reference to `__atomic_compare_exchange' /usr/bin/x86_64-pc-linux-gnu-ld.bfd: a.cc:(.text._ZNSt6atomicI9TimestampE23compare_exchange_strongERS0_S0_St12memory_orderS3_[_ZNSt6atomicI9TimestampE23compare_exchange_strongERS0_S0_St12memory_orderS3_]+0x3c1): undefined reference to `__atomic_compare_exchange' /usr/bin/x86_64-pc-linux-gnu-ld.bfd: a.cc:(.text._ZNSt6atomicI9TimestampE23compare_exchange_strongERS0_S0_St12memory_orderS3_[_ZNSt6atomicI9TimestampE23compare_exchange_strongERS0_S0_St12memory_orderS3_]+0x42c): undefined reference to `__atomic_compare_exchange' /usr/bin/x86_64-pc-linux-gnu-ld.bfd: /tmp/a-1e3f91.o:a.cc:(.text._ZNSt6atomicI9TimestampE23compare_exchange_strongERS0_S0_St12memory_orderS3_[_ZNSt6atomicI9TimestampE23compare_exchange_strongERS0_S0_St12memory_orderS3_]+0x497): more undefined references to `__atomic_compare_exchange' follow clang++: error: linker command failed with exit code 1 (use -v to see invocation) Signed-off-by: Z. Liu Part-of: https://github.com/gentoo/gentoo/pull/43808 Closes: https://github.com/gentoo/gentoo/pull/43808 Signed-off-by: Sam James --- ...-compile-error-due-to-deleted-constructor.patch | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 dev-db/mongodb/files/mongodb-8.0.8-fix-compile-error-due-to-deleted-constructor.patch (limited to 'dev-db/mongodb/files/mongodb-8.0.8-fix-compile-error-due-to-deleted-constructor.patch') diff --git a/dev-db/mongodb/files/mongodb-8.0.8-fix-compile-error-due-to-deleted-constructor.patch b/dev-db/mongodb/files/mongodb-8.0.8-fix-compile-error-due-to-deleted-constructor.patch new file mode 100644 index 000000000000..017aeee15ee1 --- /dev/null +++ b/dev-db/mongodb/files/mongodb-8.0.8-fix-compile-error-due-to-deleted-constructor.patch @@ -0,0 +1,28 @@ +https://jira.mongodb.org/browse/SERVER-97048 + +From ce43ef7147fabfa5b7f14a3040a0fc19b9228d9f Mon Sep 17 00:00:00 2001 +From: James Bronsted <32047428+jpbronsted@users.noreply.github.com> +Date: Wed, 27 Nov 2024 17:59:39 -0500 +Subject: [PATCH] SERVER-97048 fix compile error on Clang 19 due to + BSONColumnBuilder default constructor (#29231) + +GitOrigin-RevId: 82d5ad449944292fe4cfdb7a27886439725d58de + +diff --git a/src/mongo/bson/util/bsoncolumnbuilder.h b/src/mongo/bson/util/bsoncolumnbuilder.h +index d9cd20e07b7..b7d36fa1b28 100644 +--- a/src/mongo/bson/util/bsoncolumnbuilder.h ++++ b/src/mongo/bson/util/bsoncolumnbuilder.h +@@ -282,7 +282,9 @@ struct EncodingState { + template > + class BSONColumnBuilder { + public: +- explicit BSONColumnBuilder(const Allocator& = {}); ++ template ++ BSONColumnBuilder() : BSONColumnBuilder{A{}} {} ++ explicit BSONColumnBuilder(const Allocator&); + explicit BSONColumnBuilder(allocator_aware::BufBuilder, const Allocator& = {}); + + /** +-- +2.49.1 + -- cgit v1.2.3