Bug 293165 - devel/libddwaf: fix build with clang 21
Summary: devel/libddwaf: fix build with clang 21
Status: Closed FIXED
Alias: None
Product: Ports & Packages
Classification: Unclassified
Component: Individual Port(s) (show other bugs)
Version: Latest
Hardware: Any Any
: --- Affects Some People
Assignee: Dimitry Andric
URL:
Keywords:
Depends on:
Blocks: 292067
  Show dependency treegraph
 
Reported: 2026-02-13 19:22 UTC by Dimitry Andric
Modified: 2026-02-15 13:09 UTC (History)
0 users

See Also:
sunpoet: maintainer-feedback+


Attachments
devel/libddwaf: fix build with clang 21 (498.51 KB, patch)
2026-02-13 19:23 UTC, Dimitry Andric
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Dimitry Andric freebsd_committer freebsd_triage 2026-02-13 19:22:14 UTC
With clang 21 devel/libddwaf fails to build, with errors similar to:

    In file included from /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/format.cc:8:
    /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/format-inl.h:61:19: error: call to consteval function 'ddwaf::fmt::basic_format_string<char, ddwaf::fmt::basic_string_view<char> &, const char (&)[3]>::basic_format_string<FMT_COMPILE_STRING, 0>' is not a constant expression
       61 |     format_to(it, FMT_STRING("{}{}"), message, SEP);
          |                   ^
    /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/format.h:1905:23: note: expanded from macro 'FMT_STRING'
     1905 | #define FMT_STRING(s) FMT_STRING_IMPL(s, fmt::detail::compile_string, )
          |                       ^
    /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/format.h:1882:3: note: expanded from macro 'FMT_STRING_IMPL'
     1882 |   [] {                                                                        \
          |   ^
    /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/core.h:688:54: note: subexpression not valid in a constant expression
      688 |     format_str_.remove_prefix(detail::to_unsigned(it - begin()));
          |                                                   ~~~^~~~~~~~~
    /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/core.h:2639:5: note: in call to 'this->context_.advance_to(&"{}{}"[1])'
     2639 |     context_.advance_to(begin);
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~
    /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/core.h:2634:5: note: in call to 'this->on_format_specs(0, &"{}{}"[1], &"{}{}"[1])'
     2634 |     on_format_specs(id, begin, begin);  // Call parse() on empty specs.
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/core.h:2459:5: note: in call to 'handler.on_replacement_field(0, &"{}{}"[1])'
     2459 |     handler.on_replacement_field(handler.on_arg_id(), begin);
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/core.h:2491:21: note: in call to 'parse_replacement_field<char, ddwaf::fmt::detail::format_string_checker<char, ddwaf::fmt::basic_string_view<char>, char[3]> &>(&"{}{}"[1], &"{}{}"[4], checker(s))'
     2491 |         begin = p = parse_replacement_field(p - 1, end, handler);
          |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/core.h:2742:7: note: in call to 'parse_format_string<true, char, ddwaf::fmt::detail::format_string_checker<char, ddwaf::fmt::basic_string_view<char>, char[3]>>({&"{}{}"[0], 4}, checker(s))'
     2742 |       detail::parse_format_string<true>(str_, checker(s));
          |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/format-inl.h:61:19: note: in call to 'basic_format_string<FMT_COMPILE_STRING, 0>([] {
        struct __attribute__((visibility("hidden")))  FMT_COMPILE_STRING : fmt::detail::compile_string {
            using char_type [[maybe_unused]] = fmt::remove_cvref_t<decltype("{}{}"[0])>;
            [[maybe_unused]] constexpr operator fmt::basic_string_view<char_type>() const {
                return fmt::detail_exported::compile_string_to_view<char_type>("{}{}");
            }
        };
        return FMT_COMPILE_STRING();
    }())'
       61 |     format_to(it, FMT_STRING("{}{}"), message, SEP);
          |                   ^~~~~~~~~~~~~~~~~~
    /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/format.h:1905:23: note: expanded from macro 'FMT_STRING'
     1905 | #define FMT_STRING(s) FMT_STRING_IMPL(s, fmt::detail::compile_string, )
          |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/format.h:1882:3: note: expanded from macro 'FMT_STRING_IMPL'
     1882 |   [] {                                                                        \
          |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     1883 |     /* Use the hidden visibility as a workaround for a GCC bug (#1973). */    \
          |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     1884 |     /* Use a macro-like name to avoid shadowing warnings. */                  \
          |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     1885 |     struct FMT_VISIBILITY("hidden") FMT_COMPILE_STRING : base {               \
          |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     1886 |       using char_type FMT_MAYBE_UNUSED = fmt::remove_cvref_t<decltype(s[0])>; \
          |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     1887 |       FMT_MAYBE_UNUSED FMT_CONSTEXPR explicit                                 \
          |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     1888 |       operator fmt::basic_string_view<char_type>() const {                    \
          |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     1889 |         return fmt::detail_exported::compile_string_to_view<char_type>(s);    \
          |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     1890 |       }                                                                       \
          |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     1891 |     };                                                                        \
          |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     1892 |     return FMT_COMPILE_STRING();                                              \
          |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     1893 |   }()
          |   ~~~

This is caused by an outdated vendored version of the fmt library, from
<https://github.com/fmtlib/fmt>. Upstream libddwaf updated their
vendored copy in <https://github.com/DataDog/libddwaf/commit/d9dd3eb>,
which is a bit large due to the vendor update, but the patch applies
with a minimum of fuzz, and makes libddwaf build with clang 21.
Comment 1 Dimitry Andric freebsd_committer freebsd_triage 2026-02-13 19:23:03 UTC
Created attachment 268034 [details]
devel/libddwaf: fix build with clang 21
Comment 2 Po-Chuan Hsieh freebsd_committer freebsd_triage 2026-02-15 07:44:02 UTC
LGTM. Thanks.
Comment 3 commit-hook freebsd_committer freebsd_triage 2026-02-15 13:05:43 UTC
A commit in branch main references this bug:

URL: https://cgit.FreeBSD.org/ports/commit/?id=76122faa9d1b5e85f9a5f32a5671103d7eef1695

commit 76122faa9d1b5e85f9a5f32a5671103d7eef1695
Author:     Dimitry Andric <dim@FreeBSD.org>
AuthorDate: 2026-02-13 19:22:32 +0000
Commit:     Dimitry Andric <dim@FreeBSD.org>
CommitDate: 2026-02-15 13:04:19 +0000

    devel/libddwaf: fix build with clang 21

    With clang 21 devel/libddwaf fails to build, with errors similar to:

        In file included from /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/format.cc:8:
        /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/format-inl.h:61:19: error: call to consteval function 'ddwaf::fmt::basic_format_string<char, ddwaf::fmt::basic_string_view<char> &, const char (&)[3]>::basic_format_string<FMT_COMPILE_STRING, 0>' is not a constant expression
           61 |     format_to(it, FMT_STRING("{}{}"), message, SEP);
              |                   ^
        /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/format.h:1905:23: note: expanded from macro 'FMT_STRING'
         1905 | #define FMT_STRING(s) FMT_STRING_IMPL(s, fmt::detail::compile_string, )
              |                       ^
        /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/format.h:1882:3: note: expanded from macro 'FMT_STRING_IMPL'
         1882 |   [] {                                                                        \
              |   ^
        /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/core.h:688:54: note: subexpression not valid in a constant expression
          688 |     format_str_.remove_prefix(detail::to_unsigned(it - begin()));
              |                                                   ~~~^~~~~~~~~
        /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/core.h:2639:5: note: in call to 'this->context_.advance_to(&"{}{}"[1])'
         2639 |     context_.advance_to(begin);
              |     ^~~~~~~~~~~~~~~~~~~~~~~~~~
        /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/core.h:2634:5: note: in call to 'this->on_format_specs(0, &"{}{}"[1], &"{}{}"[1])'
         2634 |     on_format_specs(id, begin, begin);  // Call parse() on empty specs.
              |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/core.h:2459:5: note: in call to 'handler.on_replacement_field(0, &"{}{}"[1])'
         2459 |     handler.on_replacement_field(handler.on_arg_id(), begin);
              |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/core.h:2491:21: note: in call to 'parse_replacement_field<char, ddwaf::fmt::detail::format_string_checker<char, ddwaf::fmt::basic_string_view<char>, char[3]> &>(&"{}{}"[1], &"{}{}"[4], checker(s))'
         2491 |         begin = p = parse_replacement_field(p - 1, end, handler);
              |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/core.h:2742:7: note: in call to 'parse_format_string<true, char, ddwaf::fmt::detail::format_string_checker<char, ddwaf::fmt::basic_string_view<char>, char[3]>>({&"{}{}"[0], 4}, checker(s))'
         2742 |       detail::parse_format_string<true>(str_, checker(s));
              |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/format-inl.h:61:19: note: in call to 'basic_format_string<FMT_COMPILE_STRING, 0>([] {
            struct __attribute__((visibility("hidden")))  FMT_COMPILE_STRING : fmt::detail::compile_string {
                using char_type [[maybe_unused]] = fmt::remove_cvref_t<decltype("{}{}"[0])>;
                [[maybe_unused]] constexpr operator fmt::basic_string_view<char_type>() const {
                    return fmt::detail_exported::compile_string_to_view<char_type>("{}{}");
                }
            };
            return FMT_COMPILE_STRING();
        }())'
           61 |     format_to(it, FMT_STRING("{}{}"), message, SEP);
              |                   ^~~~~~~~~~~~~~~~~~
        /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/format.h:1905:23: note: expanded from macro 'FMT_STRING'
         1905 | #define FMT_STRING(s) FMT_STRING_IMPL(s, fmt::detail::compile_string, )
              |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/format.h:1882:3: note: expanded from macro 'FMT_STRING_IMPL'
         1882 |   [] {                                                                        \
              |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         1883 |     /* Use the hidden visibility as a workaround for a GCC bug (#1973). */    \
              |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         1884 |     /* Use a macro-like name to avoid shadowing warnings. */                  \
              |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         1885 |     struct FMT_VISIBILITY("hidden") FMT_COMPILE_STRING : base {               \
              |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         1886 |       using char_type FMT_MAYBE_UNUSED = fmt::remove_cvref_t<decltype(s[0])>; \
              |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         1887 |       FMT_MAYBE_UNUSED FMT_CONSTEXPR explicit                                 \
              |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         1888 |       operator fmt::basic_string_view<char_type>() const {                    \
              |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         1889 |         return fmt::detail_exported::compile_string_to_view<char_type>(s);    \
              |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         1890 |       }                                                                       \
              |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         1891 |     };                                                                        \
              |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         1892 |     return FMT_COMPILE_STRING();                                              \
              |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         1893 |   }()
              |   ~~~

    This is caused by an outdated vendored version of the fmt library, from
    <https://github.com/fmtlib/fmt>. Upstream libddwaf updated their
    vendored copy in <https://github.com/DataDog/libddwaf/commit/d9dd3eb>,
    which is a bit large due to the vendor update, but the patch applies
    with a minimum of fuzz, and makes libddwaf build with clang 21.

    PR:             293165
    Approved by:    sunpoet (maintainer)
    MFH:            2026Q1

 devel/libddwaf/files/patch-update-fmt (new) | 12986 ++++++++++++++++++++++++++
 1 file changed, 12986 insertions(+)
Comment 4 commit-hook freebsd_committer freebsd_triage 2026-02-15 13:05:44 UTC
A commit in branch 2026Q1 references this bug:

URL: https://cgit.FreeBSD.org/ports/commit/?id=7b3fa26bfa43fd79b4129cf30fe46cc6f21fe9fc

commit 7b3fa26bfa43fd79b4129cf30fe46cc6f21fe9fc
Author:     Dimitry Andric <dim@FreeBSD.org>
AuthorDate: 2026-02-13 19:22:32 +0000
Commit:     Dimitry Andric <dim@FreeBSD.org>
CommitDate: 2026-02-15 13:05:21 +0000

    devel/libddwaf: fix build with clang 21

    With clang 21 devel/libddwaf fails to build, with errors similar to:

        In file included from /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/format.cc:8:
        /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/format-inl.h:61:19: error: call to consteval function 'ddwaf::fmt::basic_format_string<char, ddwaf::fmt::basic_string_view<char> &, const char (&)[3]>::basic_format_string<FMT_COMPILE_STRING, 0>' is not a constant expression
           61 |     format_to(it, FMT_STRING("{}{}"), message, SEP);
              |                   ^
        /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/format.h:1905:23: note: expanded from macro 'FMT_STRING'
         1905 | #define FMT_STRING(s) FMT_STRING_IMPL(s, fmt::detail::compile_string, )
              |                       ^
        /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/format.h:1882:3: note: expanded from macro 'FMT_STRING_IMPL'
         1882 |   [] {                                                                        \
              |   ^
        /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/core.h:688:54: note: subexpression not valid in a constant expression
          688 |     format_str_.remove_prefix(detail::to_unsigned(it - begin()));
              |                                                   ~~~^~~~~~~~~
        /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/core.h:2639:5: note: in call to 'this->context_.advance_to(&"{}{}"[1])'
         2639 |     context_.advance_to(begin);
              |     ^~~~~~~~~~~~~~~~~~~~~~~~~~
        /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/core.h:2634:5: note: in call to 'this->on_format_specs(0, &"{}{}"[1], &"{}{}"[1])'
         2634 |     on_format_specs(id, begin, begin);  // Call parse() on empty specs.
              |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/core.h:2459:5: note: in call to 'handler.on_replacement_field(0, &"{}{}"[1])'
         2459 |     handler.on_replacement_field(handler.on_arg_id(), begin);
              |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/core.h:2491:21: note: in call to 'parse_replacement_field<char, ddwaf::fmt::detail::format_string_checker<char, ddwaf::fmt::basic_string_view<char>, char[3]> &>(&"{}{}"[1], &"{}{}"[4], checker(s))'
         2491 |         begin = p = parse_replacement_field(p - 1, end, handler);
              |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/core.h:2742:7: note: in call to 'parse_format_string<true, char, ddwaf::fmt::detail::format_string_checker<char, ddwaf::fmt::basic_string_view<char>, char[3]>>({&"{}{}"[0], 4}, checker(s))'
         2742 |       detail::parse_format_string<true>(str_, checker(s));
              |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/format-inl.h:61:19: note: in call to 'basic_format_string<FMT_COMPILE_STRING, 0>([] {
            struct __attribute__((visibility("hidden")))  FMT_COMPILE_STRING : fmt::detail::compile_string {
                using char_type [[maybe_unused]] = fmt::remove_cvref_t<decltype("{}{}"[0])>;
                [[maybe_unused]] constexpr operator fmt::basic_string_view<char_type>() const {
                    return fmt::detail_exported::compile_string_to_view<char_type>("{}{}");
                }
            };
            return FMT_COMPILE_STRING();
        }())'
           61 |     format_to(it, FMT_STRING("{}{}"), message, SEP);
              |                   ^~~~~~~~~~~~~~~~~~
        /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/format.h:1905:23: note: expanded from macro 'FMT_STRING'
         1905 | #define FMT_STRING(s) FMT_STRING_IMPL(s, fmt::detail::compile_string, )
              |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        /wrkdirs/usr/ports/devel/libddwaf/work/libddwaf-1.30.1/src/vendor/fmt/format.h:1882:3: note: expanded from macro 'FMT_STRING_IMPL'
         1882 |   [] {                                                                        \
              |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         1883 |     /* Use the hidden visibility as a workaround for a GCC bug (#1973). */    \
              |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         1884 |     /* Use a macro-like name to avoid shadowing warnings. */                  \
              |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         1885 |     struct FMT_VISIBILITY("hidden") FMT_COMPILE_STRING : base {               \
              |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         1886 |       using char_type FMT_MAYBE_UNUSED = fmt::remove_cvref_t<decltype(s[0])>; \
              |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         1887 |       FMT_MAYBE_UNUSED FMT_CONSTEXPR explicit                                 \
              |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         1888 |       operator fmt::basic_string_view<char_type>() const {                    \
              |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         1889 |         return fmt::detail_exported::compile_string_to_view<char_type>(s);    \
              |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         1890 |       }                                                                       \
              |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         1891 |     };                                                                        \
              |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         1892 |     return FMT_COMPILE_STRING();                                              \
              |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         1893 |   }()
              |   ~~~

    This is caused by an outdated vendored version of the fmt library, from
    <https://github.com/fmtlib/fmt>. Upstream libddwaf updated their
    vendored copy in <https://github.com/DataDog/libddwaf/commit/d9dd3eb>,
    which is a bit large due to the vendor update, but the patch applies
    with a minimum of fuzz, and makes libddwaf build with clang 21.

    PR:             293165
    Approved by:    sunpoet (maintainer)
    MFH:            2026Q1

    (cherry picked from commit 76122faa9d1b5e85f9a5f32a5671103d7eef1695)

 devel/libddwaf/files/patch-update-fmt (new) | 12986 ++++++++++++++++++++++++++
 1 file changed, 12986 insertions(+)