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

Reply via email to