Skip to content

[Bug]: Cord causes slow builds all over project #1868

@jwbee

Description

@jwbee

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions