Control: tag -1 - moreinfo On Wed, Jul 09, 2025 at 06:15:10PM +0200, Ben Hutchings wrote: > What does the actual declaration of this function look like, and what > toolchain are you using to compile it? I get this out of src:botan3 3.7.1+dfsg-2 src/lib/modes/cbc/cbc.cpp when building with clang trunk (21.0.0 (++20250519112653+d0ee35851bb9-1~exp1~20250519112844.1459)) (from http://apt.llvm.org/bookworm/) when configuring as ./configure.py --minimized-build --enable-modules cbc,twofish then building with make build/obj/lib/modes_cbc.o The construction looks like class secure_allocator { /* ... */ }; using secure_vector = std::vector<T, secure_allocator<T>>; class BOTAN_PUBLIC_API(2, 0) Cipher_Mode : public SymmetricAlgorithm { template <concepts::resizable_byte_buffer T> void update(T& buffer, size_t offset = 0) { // ... } } class CBC_Mode : public Cipher_Mode {} class CBC_Encryption : public CBC_Mode { private: void finish_msg(secure_vector<uint8_t>& final_block, size_t offset = 0) override; } void CBC_Encryption::finish_msg(secure_vector<uint8_t>& buffer, size_t offset) { // ... update(buffer, offset); } (there's some other callers but they all use the same update overload). > On Thu, 19 Jun 2025 16:09:24 +0200 =?utf-8?B?0L3QsNCx?= <nabijaczleweli@nabijaczleweli.xyz> wrote: > > + 89.76% 0.00% bench bench [.] _ZN5Botan11Cipher_Mode6updateITkNS_8concepts21resizable_byte_bufferESt6vectorIhNS_16secure_allocatorIhEEEEEvRT_m > The llvm-cxxfilt command demangles it to "void > Botan::Cipher_Mode::update<std::vector<unsigned char, > Botan::secure_allocator<unsigned char>>>(std::vector<unsigned char, > Botan::secure_allocator<unsigned char>>&, unsigned long)" but it seems > to be ignoring part of the symbol, specifically > "Botan::concepts::resizable_byte_buffer". So the full declaration will be something like template<concepts::resizable_byte_buffer = std::vector<unsigned char, Botan::secure_allocator<unsigned char>>> // except as an instantiation, not a default void Botan::Cipher_Mode::update(std::vector<unsigned char, Botan::secure_allocator<unsigned char>>, unsigned long); so llvm-cxxfilt gets it mostly right. I don't really see why the concept bit is in there either, it feels like it ought to be immaterial? > If I delete the "Tk" from the mangled symbol then they all agree it > should be demangled to "void > Botan::Cipher_Mode::update<std::vector<unsigned char, > Botan::secure_allocator<unsigned char>>>(std::vector<unsigned char, > Botan::secure_allocator<unsigned char>>&, unsigned long)". This must mean that's "The koncept" as an extension, then, clearly? Maybe this wants to get forwarded to LLVM more-so than anything else. Building with bookworm GCC doesn't give give me any symbols matching /update/ except for an update_granularity.
Attachment:
signature.asc
Description: PGP signature