Skip to content

Crash in homebrew fmt 11.1.0 from homebrew ccache 4.10.2 #4278

@ADKaster

Description

@ADKaster

This appears to be an ABI break(?) or at least difference between fmt 11.0.2 and 11.1.0.

Feel free to close this if it's entirely homebrew's fault though :)

With older homebrew's build of 11.0.2, this issue does not reproduce.

However, on current latest versions, I see the following behavior:

ccache --version: 👍
ccahe --help : 💥

Here's the brew issue I opened: https://github.com/orgs/Homebrew/discussions/5830

And the backtrace:

$ lldb ccache
(lldb) target create "ccache"
Current executable set to '/opt/homebrew/bin/ccache' (arm64).
(lldb) run --help
Process 85982 launched: '/opt/homebrew/bin/ccache' (arm64)
Process 85982 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x8)
    frame #0: 0x000000010000e350 ccache`fmt::v11::basic_appender<char> fmt::v11::detail::write_padded<char, (fmt::v11::align::type)1, fmt::v11::basic_appender<char>, fmt::v11::basic_appender<char> fmt::v11::detail::write<char, fmt::v11::basic_appender<char>>(fmt::v11::basic_appender<char>, fmt::v11::basic_string_view<char>, fmt::v11::format_specs const&)::'lambda'(fmt::v11::basic_appender<char>)>(fmt::v11::basic_appender<char>, fmt::v11::format_specs const&, unsigned long, unsigned long, fmt::v11::basic_appender<char> fmt::v11::detail::write<char, fmt::v11::basic_appender<char>>(fmt::v11::basic_appender<char>, fmt::v11::basic_string_view<char>, fmt::v11::format_specs const&)::'lambda'(fmt::v11::basic_appender<char>)&&) + 64
ccache`fmt::v11::detail::write_padded<char, (fmt::v11::align::type)1, fmt::v11::basic_appender<char>, fmt::v11::basic_appender<char> fmt::v11::detail::write<char, fmt::v11::basic_appender<char>>(fmt::v11::basic_appender<char>, fmt::v11::basic_string_view<char>, fmt::v11::format_specs const&)::'lambda'(fmt::v11::basic_appender<char>)>:
->  0x10000e350 <+64>: ldp    x8, x9, [x0, #0x8]
    0x10000e354 <+68>: add    x8, x8, x2
    0x10000e358 <+72>: add    x21, x1, #0xb
    0x10000e35c <+76>: ldrb   w10, [x1, #0xf]
Target 0: (ccache) stopped.
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x8)
  * frame #0: 0x000000010000e350 ccache`fmt::v11::basic_appender<char> fmt::v11::detail::write_padded<char, (fmt::v11::align::type)1, fmt::v11::basic_appender<char>, fmt::v11::basic_appender<char> fmt::v11::detail::write<char, fmt::v11::basic_appender<char>>(fmt::v11::basic_appender<char>, fmt::v11::basic_string_view<char>, fmt::v11::format_specs const&)::'lambda'(fmt::v11::basic_appender<char>)>(fmt::v11::basic_appender<char>, fmt::v11::format_specs const&, unsigned long, unsigned long, fmt::v11::basic_appender<char> fmt::v11::detail::write<char, fmt::v11::basic_appender<char>>(fmt::v11::basic_appender<char>, fmt::v11::basic_string_view<char>, fmt::v11::format_specs const&)::'lambda'(fmt::v11::basic_appender<char>)&&) + 64
    frame #1: 0x000000010000e274 ccache`fmt::v11::basic_appender<char> fmt::v11::detail::write<char, fmt::v11::basic_appender<char>>(fmt::v11::basic_appender<char>, fmt::v11::basic_string_view<char>, fmt::v11::format_specs const&) + 232
    frame #2: 0x000000010000d7a8 ccache`auto fmt::v11::formatter<std::__1::__fs::filesystem::path, char, void>::format<fmt::v11::context>(std::__1::__fs::filesystem::path const&, fmt::v11::context&) const + 108
    frame #3: 0x000000010000d6fc ccache`void fmt::v11::detail::value<fmt::v11::context>::format_custom_arg<std::__1::__fs::filesystem::path, fmt::v11::formatter<std::__1::__fs::filesystem::path, char, void>>(void*, fmt::v11::basic_format_parse_context<char>&, fmt::v11::context&) + 112
    frame #4: 0x000000010018b39c libfmt.11.dylib`void fmt::v11::detail::parse_format_string<char, fmt::v11::detail::format_handler<char>>(fmt::v11::basic_string_view<char>, fmt::v11::detail::format_handler<char>&&) + 1264
    frame #5: 0x000000010018ac64 libfmt.11.dylib`fmt::v11::detail::vformat_to(fmt::v11::detail::buffer<char>&, fmt::v11::basic_string_view<char>, fmt::v11::basic_format_args<fmt::v11::context>, fmt::v11::detail::locale_ref) + 76
    frame #6: 0x000000010018b62c libfmt.11.dylib`fmt::v11::vprint(__sFILE*, fmt::v11::basic_string_view<char>, fmt::v11::basic_format_args<fmt::v11::context>) + 84
    frame #7: 0x000000010004be88 ccache`core::process_main_options(int, char const* const*) + 4116
    frame #8: 0x0000000100021a9c ccache`ccache_main(int, char const* const*) + 144
    frame #9: 0x0000000195210274 dyld`start + 2840

This appears to be an issue upgrading from 11.0.2 to 11.1.0, which feels unexpected from fmtlib's perspective.

fmt info

$ brew info fmt
==> fmt: stable 11.1.0 (bottled), HEAD
Open-source formatting library for C++
https://fmt.dev/
Installed
/opt/homebrew/Cellar/fmt/11.1.0 (29 files, 1MB) *
  Poured from bottle using the formulae.brew.sh API on 2024-12-26 at 09:32:49
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/f/fmt.rb
License: MIT
==> Dependencies
Build: cmake ✔
==> Options
--HEAD
	Install HEAD version
==> Analytics
install: 18,699 (30 days), 61,427 (90 days), 237,794 (365 days)
install-on-request: 634 (30 days), 3,807 (90 days), 14,685 (365 days)
build-error: 0 (30 days)

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