-
Notifications
You must be signed in to change notification settings - Fork 2.9k
Description
Describe the issue
While diagnosing my slow builds in a project that depends on Abseil, I concluded that Cord is the outstanding culprit. I don't use Cord, but I do use flags, and flags depend on flat_hash_map, and flat_hash_map comes with a header that can hash a Cord, and thereby depends on Cord. It would be neat if there was a way to untie this knot so that only Cord users depended on Cord and its hasher.
According to -ftime-trace
analysis these are the top three most expensive template instantiations for a small portion of my build that really should have been trivial but actually takes 55s to compile:
**** Templates that took longest to instantiate:
3932 ms: std::deque<absl::crc_internal::CrcCordState::PrefixCrc>::operator= (31 times, avg 126 ms)
3861 ms: std::deque<absl::crc_internal::CrcCordState::PrefixCrc>::assign<std:... (31 times, avg 124 ms)
3829 ms: std::deque<absl::crc_internal::CrcCordState::PrefixCrc>::__assign_wi... (31 times, avg 123 ms)
Steps to reproduce the problem
Use clang's -ftime-trace
flag in your project that needs Abseil-cpp flags, then analyze the output with ClangBuildAnalyzer.
What version of Abseil are you using?
HEAD
What operating system and version are you using?
Ubuntu Linux 24.04
What compiler and version are you using?
/opt/llvm-19/bin/clang -v
clang version 19.1.7
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /opt/llvm-19/bin
Found candidate GCC installation: /usr/lib/gcc/aarch64-linux-gnu/11
Selected GCC installation: /usr/lib/gcc/aarch64-linux-gnu/11
Candidate multilib: .;@m64
Selected multilib: .;@m64
What build system are you using?
Bazel 7.6.1
Additional context
These results are seen with libc++, if that makes a difference.