zeroomega wrote: Hi,
We are seeing build error on fmtlib project after this patch is landed. The error message from the clang is: ``` FAILED: host_x64/obj/third_party/fmtlib/src/src/fmtlib.os.cc.o ../../prebuilt/third_party/clang/custom/bin/clang++ -MD -MF host_x64/obj/third_party/fmtlib/src/src/fmtlib.os.cc.o.d -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -D_LIBCPP_REMOVE_TRANSITIVE_INCLUDES -I../.. -Ihost_x64/gen -I../../third_party/fmtlib/src/include -fcolor-diagnostics -fcrash-diagnostics-dir=clang-crashreports -fcrash-diagnostics=all -gen-reproducer=error -ffp-contract=off --sysroot=../../prebuilt/third_party/sysroot/linux --target=x86_64-unknown-linux-gnu -ffile-compilation-dir=. -no-canonical-prefixes -fomit-frame-pointer -fdata-sections -ffunction-sections -O0 -Xclang -debug-info-kind=constructor -g3 -grecord-gcc-switches -gdwarf-5 -gz=zstd -Wall -Wextra -Wconversion -Wextra-semi -Wimplicit-fallthrough -Wnewline-eof -Wstrict-prototypes -Wwrite-strings -Wno-sign-conversion -Wno-unused-parameter -Wnonportable-system-include-path -Wno-missing-field-initializers -Wno-extra-qualification -Wno-cast-function-type-strict -Wno-cast-function-type-mismatch -Wno-unknown-warning-option -Wno-missing-template-arg-list-after-template-kw -Wno-deprecated-pragma -fvisibility=hidden -Werror -Wa,--fatal-warnings -Wno-error=deprecated-declarations --sysroot=../../prebuilt/third_party/sysroot/linux --target=x86_64-unknown-linux-gnu -fPIE -fvisibility-inlines-hidden -stdlib=libc++ -stdlib=libc++ -std=c++20 -Wno-deprecated-this-capture -fno-exceptions -fno-rtti -ftemplate-backtrace-limit=0 -stdlib=libc++ -c ../../third_party/fmtlib/src/src/os.cc -o host_x64/obj/third_party/fmtlib/src/src/fmtlib.os.cc.o ../../third_party/fmtlib/src/src/os.cc:176:35: error: call to consteval function 'fmt::basic_format_string<char, const char *>::basic_format_string<FMT_COMPILE_STRING, 0>' is not a constant expression 176 | FMT_THROW(system_error(errno, FMT_STRING("cannot open file {}"), | ^ ../../third_party/fmtlib/src/include/fmt/format.h:1842:23: note: expanded from macro 'FMT_STRING' 1842 | #define FMT_STRING(s) FMT_STRING_IMPL(s, fmt::detail::compile_string, ) | ^ ../../third_party/fmtlib/src/include/fmt/format.h:1821:3: note: expanded from macro 'FMT_STRING_IMPL' 1821 | [] { \ | ^ ../../third_party/fmtlib/src/include/fmt/base.h:779:54: note: subexpression not valid in a constant expression 779 | format_str_.remove_prefix(detail::to_unsigned(it - begin())); | ~~~^~~~~~~~~ ../../third_party/fmtlib/src/include/fmt/base.h:2769:5: note: in call to 'this->context_.advance_to(&"cannot open file {}"[18])' 2769 | context_.advance_to(begin); | ^~~~~~~~~~~~~~~~~~~~~~~~~~ ../../third_party/fmtlib/src/include/fmt/base.h:2764:5: note: in call to 'this->on_format_specs(0, &"cannot open file {}"[18], &"cannot open file {}"[18])' 2764 | on_format_specs(id, begin, begin); // Call parse() on empty specs. | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../third_party/fmtlib/src/include/fmt/base.h:2571:5: note: in call to 'handler.on_replacement_field(0, &"cannot open file {}"[18])' 2571 | handler.on_replacement_field(handler.on_arg_id(), begin); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../third_party/fmtlib/src/include/fmt/base.h:2621:21: note: in call to 'parse_replacement_field<char, fmt::detail::format_string_checker<char, const char *> &>(&"cannot open file {}"[18], &"cannot open file {}"[19], checker(s))' 2621 | begin = p = parse_replacement_field(p - 1, end, handler); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../third_party/fmtlib/src/include/fmt/base.h:2892:7: note: in call to 'parse_format_string<true, char, fmt::detail::format_string_checker<char, const char *>>({&"cannot open file {}"[0], 19}, checker(s))' 2892 | detail::parse_format_string<true>(str_, checker(s)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../third_party/fmtlib/src/src/os.cc:176:35: 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("cannot open file {}"[0])>; [[maybe_unused]] constexpr operator fmt::basic_string_view<char_type>() const { return fmt::detail_exported::compile_string_to_view<char_type>("cannot open file {}"); } }; return FMT_COMPILE_STRING(); }())' 176 | FMT_THROW(system_error(errno, FMT_STRING("cannot open file {}"), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 177 | filename.c_str())); | ~~~~~~~~~~~~~~~~~~ ../../third_party/fmtlib/src/include/fmt/format.h:1842:23: note: expanded from macro 'FMT_STRING' 1842 | #define FMT_STRING(s) FMT_STRING_IMPL(s, fmt::detail::compile_string, ) | ^ ../../third_party/fmtlib/src/include/fmt/format.h:1821:3: note: expanded from macro 'FMT_STRING_IMPL' 1821 | [] { \ | ^ ../../third_party/fmtlib/src/include/fmt/format.h:136:55: note: expanded from macro 'FMT_THROW' 136 | ::fmt::detail::assert_fail(__FILE__, __LINE__, (x).what()) | ^ ../../third_party/fmtlib/src/src/os.cc:222:29: error: call to consteval function 'fmt::basic_format_string<char, const char *>::basic_format_string<FMT_COMPILE_STRING, 0>' is not a constant expression 222 | system_error(errno, FMT_STRING("cannot open file {}"), path.c_str())); | ^ ../../third_party/fmtlib/src/include/fmt/format.h:1842:23: note: expanded from macro 'FMT_STRING' 1842 | #define FMT_STRING(s) FMT_STRING_IMPL(s, fmt::detail::compile_string, ) | ^ ../../third_party/fmtlib/src/include/fmt/format.h:1821:3: note: expanded from macro 'FMT_STRING_IMPL' 1821 | [] { \ | ^ ../../third_party/fmtlib/src/include/fmt/base.h:779:54: note: subexpression not valid in a constant expression 779 | format_str_.remove_prefix(detail::to_unsigned(it - begin())); | ~~~^~~~~~~~~ ../../third_party/fmtlib/src/include/fmt/base.h:2769:5: note: in call to 'this->context_.advance_to(&"cannot open file {}"[18])' 2769 | context_.advance_to(begin); | ^~~~~~~~~~~~~~~~~~~~~~~~~~ ../../third_party/fmtlib/src/include/fmt/base.h:2764:5: note: in call to 'this->on_format_specs(0, &"cannot open file {}"[18], &"cannot open file {}"[18])' 2764 | on_format_specs(id, begin, begin); // Call parse() on empty specs. | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../third_party/fmtlib/src/include/fmt/base.h:2571:5: note: in call to 'handler.on_replacement_field(0, &"cannot open file {}"[18])' 2571 | handler.on_replacement_field(handler.on_arg_id(), begin); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../third_party/fmtlib/src/include/fmt/base.h:2621:21: note: in call to 'parse_replacement_field<char, fmt::detail::format_string_checker<char, const char *> &>(&"cannot open file {}"[18], &"cannot open file {}"[19], checker(s))' 2621 | begin = p = parse_replacement_field(p - 1, end, handler); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../third_party/fmtlib/src/include/fmt/base.h:2892:7: note: in call to 'parse_format_string<true, char, fmt::detail::format_string_checker<char, const char *>>({&"cannot open file {}"[0], 19}, checker(s))' 2892 | detail::parse_format_string<true>(str_, checker(s)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../third_party/fmtlib/src/src/os.cc:222:29: 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("cannot open file {}"[0])>; [[maybe_unused]] constexpr operator fmt::basic_string_view<char_type>() const { return fmt::detail_exported::compile_string_to_view<char_type>("cannot open file {}"); } }; return FMT_COMPILE_STRING(); }())' 221 | FMT_THROW( | ~~~~~~~~~~ 222 | system_error(errno, FMT_STRING("cannot open file {}"), path.c_str())); | ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../third_party/fmtlib/src/include/fmt/format.h:1842:23: note: expanded from macro 'FMT_STRING' 1842 | #define FMT_STRING(s) FMT_STRING_IMPL(s, fmt::detail::compile_string, ) | ^ ../../third_party/fmtlib/src/include/fmt/format.h:1821:3: note: expanded from macro 'FMT_STRING_IMPL' 1821 | [] { \ | ^ ../../third_party/fmtlib/src/include/fmt/format.h:136:55: note: expanded from macro 'FMT_THROW' 136 | ::fmt::detail::assert_fail(__FILE__, __LINE__, (x).what()) | ^ ../../third_party/fmtlib/src/src/os.cc:291:16: error: call to consteval function 'fmt::basic_format_string<char, int &>::basic_format_string<FMT_COMPILE_STRING, 0>' is not a constant expression 291 | errno, FMT_STRING("cannot duplicate file descriptor {}"), fd)); | ^ ../../third_party/fmtlib/src/include/fmt/format.h:1842:23: note: expanded from macro 'FMT_STRING' 1842 | #define FMT_STRING(s) FMT_STRING_IMPL(s, fmt::detail::compile_string, ) | ^ ../../third_party/fmtlib/src/include/fmt/format.h:1821:3: note: expanded from macro 'FMT_STRING_IMPL' 1821 | [] { \ | ^ ../../third_party/fmtlib/src/include/fmt/base.h:779:54: note: subexpression not valid in a constant expression 779 | format_str_.remove_prefix(detail::to_unsigned(it - begin())); | ~~~^~~~~~~~~ ../../third_party/fmtlib/src/include/fmt/base.h:2769:5: note: in call to 'this->context_.advance_to(&"cannot duplicate file descriptor {}"[34])' 2769 | context_.advance_to(begin); | ^~~~~~~~~~~~~~~~~~~~~~~~~~ ../../third_party/fmtlib/src/include/fmt/base.h:2764:5: note: in call to 'this->on_format_specs(0, &"cannot duplicate file descriptor {}"[34], &"cannot duplicate file descriptor {}"[34])' 2764 | on_format_specs(id, begin, begin); // Call parse() on empty specs. | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../third_party/fmtlib/src/include/fmt/base.h:2571:5: note: in call to 'handler.on_replacement_field(0, &"cannot duplicate file descriptor {}"[34])' 2571 | handler.on_replacement_field(handler.on_arg_id(), begin); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../third_party/fmtlib/src/include/fmt/base.h:2655:13: note: in call to 'parse_replacement_field<char, fmt::detail::format_string_checker<char, int> &>(&"cannot duplicate file descriptor {}"[34], &"cannot duplicate file descriptor {}"[35], checker(s))' 2655 | begin = parse_replacement_field(p, end, handler); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../third_party/fmtlib/src/include/fmt/base.h:2892:7: note: in call to 'parse_format_string<true, char, fmt::detail::format_string_checker<char, int>>({&"cannot duplicate file descriptor {}"[0], 35}, checker(s))' 2892 | detail::parse_format_string<true>(str_, checker(s)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../third_party/fmtlib/src/src/os.cc:291:16: 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("cannot duplicate file descriptor {}"[0])>; [[maybe_unused]] constexpr operator fmt::basic_string_view<char_type>() const { return fmt::detail_exported::compile_string_to_view<char_type>("cannot duplicate file descriptor {}"); } }; return FMT_COMPILE_STRING(); }())' 290 | FMT_THROW(system_error( | ~~~~~~~~~~~~~~~~~~~~~~~ 291 | errno, FMT_STRING("cannot duplicate file descriptor {}"), fd)); | ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../third_party/fmtlib/src/include/fmt/format.h:1842:23: note: expanded from macro 'FMT_STRING' 1842 | #define FMT_STRING(s) FMT_STRING_IMPL(s, fmt::detail::compile_string, ) | ^ ../../third_party/fmtlib/src/include/fmt/format.h:1821:3: note: expanded from macro 'FMT_STRING_IMPL' 1821 | [] { \ | ^ ../../third_party/fmtlib/src/include/fmt/format.h:136:55: note: expanded from macro 'FMT_THROW' 136 | ::fmt::detail::assert_fail(__FILE__, __LINE__, (x).what()) | ^ ../../third_party/fmtlib/src/src/os.cc:300:16: error: call to consteval function 'fmt::basic_format_string<char, int &, int &>::basic_format_string<FMT_COMPILE_STRING, 0>' is not a constant expression 300 | errno, FMT_STRING("cannot duplicate file descriptor {} to {}"), fd_, | ^ ../../third_party/fmtlib/src/include/fmt/format.h:1842:23: note: expanded from macro 'FMT_STRING' 1842 | #define FMT_STRING(s) FMT_STRING_IMPL(s, fmt::detail::compile_string, ) | ^ ../../third_party/fmtlib/src/include/fmt/format.h:1821:3: note: expanded from macro 'FMT_STRING_IMPL' 1821 | [] { \ | ^ ../../third_party/fmtlib/src/include/fmt/base.h:779:54: note: subexpression not valid in a constant expression 779 | format_str_.remove_prefix(detail::to_unsigned(it - begin())); | ~~~^~~~~~~~~ ../../third_party/fmtlib/src/include/fmt/base.h:2769:5: note: in call to 'this->context_.advance_to(&"cannot duplicate file descriptor {} to {}"[34])' 2769 | context_.advance_to(begin); | ^~~~~~~~~~~~~~~~~~~~~~~~~~ ../../third_party/fmtlib/src/include/fmt/base.h:2764:5: note: in call to 'this->on_format_specs(0, &"cannot duplicate file descriptor {} to {}"[34], &"cannot duplicate file descriptor {} to {}"[34])' 2764 | on_format_specs(id, begin, begin); // Call parse() on empty specs. | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../third_party/fmtlib/src/include/fmt/base.h:2571:5: note: in call to 'handler.on_replacement_field(0, &"cannot duplicate file descriptor {} to {}"[34])' 2571 | handler.on_replacement_field(handler.on_arg_id(), begin); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../third_party/fmtlib/src/include/fmt/base.h:2655:13: note: in call to 'parse_replacement_field<char, fmt::detail::format_string_checker<char, int, int> &>(&"cannot duplicate file descriptor {} to {}"[34], &"cannot duplicate file descriptor {} to {}"[41], checker(s))' 2655 | begin = parse_replacement_field(p, end, handler); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../third_party/fmtlib/src/include/fmt/base.h:2892:7: note: in call to 'parse_format_string<true, char, fmt::detail::format_string_checker<char, int, int>>({&"cannot duplicate file descriptor {} to {}"[0], 41}, checker(s))' 2892 | detail::parse_format_string<true>(str_, checker(s)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../third_party/fmtlib/src/src/os.cc:300:16: 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("cannot duplicate file descriptor {} to {}"[0])>; [[maybe_unused]] constexpr operator fmt::basic_string_view<char_type>() const { return fmt::detail_exported::compile_string_to_view<char_type>("cannot duplicate file descriptor {} to {}"); } }; return FMT_COMPILE_STRING(); }())' 299 | FMT_THROW(system_error( | ~~~~~~~~~~~~~~~~~~~~~~~ 300 | errno, FMT_STRING("cannot duplicate file descriptor {} to {}"), fd_, | ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 301 | fd)); | ~~~~ ../../third_party/fmtlib/src/include/fmt/format.h:1842:23: note: expanded from macro 'FMT_STRING' 1842 | #define FMT_STRING(s) FMT_STRING_IMPL(s, fmt::detail::compile_string, ) | ^ ../../third_party/fmtlib/src/include/fmt/format.h:1821:3: note: expanded from macro 'FMT_STRING_IMPL' 1821 | [] { \ | ^ ../../third_party/fmtlib/src/include/fmt/format.h:136:55: note: expanded from macro 'FMT_THROW' 136 | ::fmt::detail::assert_fail(__FILE__, __LINE__, (x).what()) | ^ 4 errors generated. ``` Full build log can be seen from: https://logs.chromium.org/logs/fuchsia/buildbucket/cr-buildbucket/8735688601552461713/+/u/build/ninja/stdout We are still looking into it to understand if it is a compiler bug or an issue with fmtlib's implementation. https://github.com/llvm/llvm-project/pull/109208 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits