Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Missing binary128 support #2810

Closed
alexezeder opened this issue Mar 13, 2022 · 10 comments
Closed

Missing binary128 support #2810

alexezeder opened this issue Mar 13, 2022 · 10 comments

Comments

@alexezeder
Copy link
Contributor

alexezeder commented Mar 13, 2022

I have problems compiling the library on Raspberry (AArch64) after this commit: 1ba69fb.

GCC version: 11.2.0

Compiler output:

/fmt/include/fmt/format-inl.h: In instantiation of 'constexpr fmt::v8::detail::basic_fp<F>::basic_fp(Float) [with Float = long double; F = long long unsigned int]':
/fmt/include/fmt/format-inl.h:2234:30:   required from 'int fmt::v8::detail::format_float(T, int, fmt::v8::detail::float_specs, fmt::v8::detail::buffer<char>&) [with T = long double]'
/fmt/src/format.cc:111:64:   required from here
/fmt/include/fmt/format-inl.h:243:11: error: use of deleted function 'bool fmt::v8::detail::basic_fp<F>::assign(Float) [with Float = long double; typename std::enable_if<(! std::integral_constant<bool, (std::numeric_limits<Float>::is_iec559 && (std::numeric_limits<Float>::digits <= 64))>::value), int>::type <anonymous> = 0; F = long long unsigned int]'
  243 |     assign(n);
      |     ~~~~~~^~~
/fmt/include/fmt/format-inl.h:278:8: note: declared here
  278 |   bool assign(Float) = delete;
      |        ^~~~~~
/fmt/include/fmt/format-inl.h: In instantiation of 'int fmt::v8::detail::format_float(T, int, fmt::v8::detail::float_specs, fmt::v8::detail::buffer<char>&) [with T = long double]':
/fmt/src/format.cc:111:64:   required from here
/fmt/include/fmt/format-inl.h:2253:48: error: use of deleted function 'bool fmt::v8::detail::basic_fp<F>::assign(Float) [with Float = long double; typename std::enable_if<(! std::integral_constant<bool, (std::numeric_limits<Float>::is_iec559 && (std::numeric_limits<Float>::digits <= 64))>::value), int>::type <anonymous> = 0; F = long long unsigned int]'
 2253 |                                      : f.assign(convert_float(value));
      |                                        ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
/fmt/include/fmt/format-inl.h:278:8: note: declared here
  278 |   bool assign(Float) = delete;
      |        ^~~~~~

I was investigating why my benchmark runner didn't show the latest commits when I realized it just cannot compile the library. Furthermore, I allow it to skip faulty commits (expecting that there are only a few of them), which brings us here, 20 days after the faulty commit. 🙂

Entire output
$ git clone https://github.com/fmtlib/fmt.git
Cloning into 'fmt'...
remote: Enumerating objects: 29047, done.
remote: Counting objects: 100% (407/407), done.
remote: Compressing objects: 100% (116/116), done.
remote: Total 29047 (delta 240), reused 368 (delta 230), pack-reused 28640
Receiving objects: 100% (29047/29047), 13.86 MiB | 1.82 MiB/s, done.
Resolving deltas: 100% (19591/19591), done.
$ mkdir build && cd build
$ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=20 -DFMT_DOC=OFF -DFMT_TEST=OFF ../fmt
-- CMake version: 3.18.4
-- The CXX compiler identification is GNU 11.2.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/local/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Module support is disabled.
-- Version: 8.1.2
-- Build type: Release
-- CXX_STANDARD: 20
-- Performing Test has_std_20_flag
-- Performing Test has_std_20_flag - Success
-- Performing Test has_std_2a_flag
-- Performing Test has_std_2a_flag - Success
-- Performing Test SUPPORTS_USER_DEFINED_LITERALS
-- Performing Test SUPPORTS_USER_DEFINED_LITERALS - Success
-- Performing Test FMT_HAS_VARIANT
-- Performing Test FMT_HAS_VARIANT - Success
-- Required features: cxx_variadic_templates
-- Configuring done
-- Generating done
-- Build files have been written to: /fmt/build
$ cmake --build . --target fmt
Scanning dependencies of target fmt
[ 33%] Building CXX object CMakeFiles/fmt.dir/src/format.cc.o
In file included from /fmt/src/format.cc:8:
/fmt/include/fmt/format-inl.h: In instantiation of 'constexpr fmt::v8::detail::basic_fp<F>::basic_fp(Float) [with Float = long double; F = long long unsigned int]':
/fmt/include/fmt/format-inl.h:2234:30:   required from 'int fmt::v8::detail::format_float(T, int, fmt::v8::detail::float_specs, fmt::v8::detail::buffer<char>&) [with T = long double]'
/fmt/src/format.cc:111:64:   required from here
/fmt/include/fmt/format-inl.h:243:11: error: use of deleted function 'bool fmt::v8::detail::basic_fp<F>::assign(Float) [with Float = long double; typename std::enable_if<(! std::integral_constant<bool, (std::numeric_limits<Float>::is_iec559 && (std::numeric_limits<Float>::digits <= 64))>::value), int>::type <anonymous> = 0; F = long long unsigned int]'
  243 |     assign(n);
      |     ~~~~~~^~~
/fmt/include/fmt/format-inl.h:278:8: note: declared here
  278 |   bool assign(Float) = delete;
      |        ^~~~~~
/fmt/include/fmt/format-inl.h: In instantiation of 'int fmt::v8::detail::format_float(T, int, fmt::v8::detail::float_specs, fmt::v8::detail::buffer<char>&) [with T = long double]':
/fmt/src/format.cc:111:64:   required from here
/fmt/include/fmt/format-inl.h:2253:48: error: use of deleted function 'bool fmt::v8::detail::basic_fp<F>::assign(Float) [with Float = long double; typename std::enable_if<(! std::integral_constant<bool, (std::numeric_limits<Float>::is_iec559 && (std::numeric_limits<Float>::digits <= 64))>::value), int>::type <anonymous> = 0; F = long long unsigned int]'
 2253 |                                      : f.assign(convert_float(value));
      |                                        ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
/fmt/include/fmt/format-inl.h:278:8: note: declared here
  278 |   bool assign(Float) = delete;
      |        ^~~~~~
gmake[3]: *** [CMakeFiles/fmt.dir/build.make:82: CMakeFiles/fmt.dir/src/format.cc.o] Error 1
gmake[2]: *** [CMakeFiles/Makefile2:95: CMakeFiles/fmt.dir/all] Error 2
gmake[1]: *** [CMakeFiles/Makefile2:102: CMakeFiles/fmt.dir/rule] Error 2
gmake: *** [Makefile:205: fmt] Error 2
@vitaut
Copy link
Contributor

vitaut commented Mar 14, 2022

Thanks for reporting. {fmt} is being switched to an internal FP formatter and this particular error is likely caused by long double being binary128, support for which is WIP. Do you by any chance have a godbolt repro? I wasn't able to repro this with the default options on ARM64 gcc 11.2: https://godbolt.org/z/nE1an79Ec.

@alexezeder
Copy link
Contributor Author

I was able to reproduce it on Compiler Explorer by simply copying entire {fmt} code there: https://godbolt.org/z/xEnETxb53.

@vitaut
Copy link
Contributor

vitaut commented Mar 15, 2022

The compilation error should be resolved now: https://godbolt.org/z/5xT4PevhP. binary128 support may still not be fully functional but it will be addressed separately.

@vitaut vitaut closed this as completed Mar 15, 2022
@alexezeder
Copy link
Contributor Author

Yep, it works for Raspberry too, thanks!

@alexezeder
Copy link
Contributor Author

Oops, I still have problems actually with bc654fa on Raspberry. My benchmark successfully compiles now, but also it simply segfaults. Even format-test fails to run, it outputs a lot of comparison failures and aborts in Debug config at some point, in Release config it just never finishes. core-test runs fine.

format-test output
[==========] Running 110 tests from 6 test suites.
[----------] Global test environment set-up.
[----------] 3 tests from uint128_test
[ RUN      ] uint128_test.ctor
[       OK ] uint128_test.ctor (0 ms)
[ RUN      ] uint128_test.shift
[       OK ] uint128_test.shift (0 ms)
[ RUN      ] uint128_test.minus
[       OK ] uint128_test.minus (0 ms)
[----------] 3 tests from uint128_test (0 ms total)

[----------] 2 tests from float_test
[ RUN      ] float_test.isfinite
[       OK ] float_test.isfinite (0 ms)
[ RUN      ] float_test.isnan
[       OK ] float_test.isnan (0 ms)
[----------] 2 tests from float_test (0 ms total)

[----------] 9 tests from util_test
[ RUN      ] util_test.bit_cast
[       OK ] util_test.bit_cast (0 ms)
[ RUN      ] util_test.increment
[       OK ] util_test.increment (0 ms)
[ RUN      ] util_test.parse_nonnegative_int
[       OK ] util_test.parse_nonnegative_int (0 ms)
[ RUN      ] util_test.utf8_to_utf16
[       OK ] util_test.utf8_to_utf16 (0 ms)
[ RUN      ] util_test.utf8_to_utf16_empty_string
[       OK ] util_test.utf8_to_utf16_empty_string (0 ms)
[ RUN      ] util_test.allocator_ref
[       OK ] util_test.allocator_ref (0 ms)
[ RUN      ] util_test.format_system_error
[       OK ] util_test.format_system_error (0 ms)
[ RUN      ] util_test.system_error
[       OK ] util_test.system_error (0 ms)
[ RUN      ] util_test.report_system_error
[       OK ] util_test.report_system_error (0 ms)
[----------] 9 tests from util_test (2 ms total)

[----------] 9 tests from memory_buffer_test
[ RUN      ] memory_buffer_test.ctor
[       OK ] memory_buffer_test.ctor (0 ms)
[ RUN      ] memory_buffer_test.move_ctor_inline_buffer
[       OK ] memory_buffer_test.move_ctor_inline_buffer (0 ms)
[ RUN      ] memory_buffer_test.move_ctor_dynamic_buffer
[       OK ] memory_buffer_test.move_ctor_dynamic_buffer (0 ms)
[ RUN      ] memory_buffer_test.move_assignment
[       OK ] memory_buffer_test.move_assignment (0 ms)
[ RUN      ] memory_buffer_test.grow
[       OK ] memory_buffer_test.grow (0 ms)
[ RUN      ] memory_buffer_test.allocator
[       OK ] memory_buffer_test.allocator (0 ms)
[ RUN      ] memory_buffer_test.exception_in_deallocate
[       OK ] memory_buffer_test.exception_in_deallocate (0 ms)
[ RUN      ] memory_buffer_test.max_size_allocator
[       OK ] memory_buffer_test.max_size_allocator (0 ms)
[ RUN      ] memory_buffer_test.max_size_allocator_overflow
[       OK ] memory_buffer_test.max_size_allocator_overflow (0 ms)
[----------] 9 tests from memory_buffer_test (2 ms total)

[----------] 85 tests from format_test
[ RUN      ] format_test.escape
[       OK ] format_test.escape (0 ms)
[ RUN      ] format_test.unmatched_braces
[       OK ] format_test.unmatched_braces (0 ms)
[ RUN      ] format_test.no_args
[       OK ] format_test.no_args (0 ms)
[ RUN      ] format_test.args_in_different_positions
[       OK ] format_test.args_in_different_positions (0 ms)
[ RUN      ] format_test.arg_errors
[       OK ] format_test.arg_errors (0 ms)
[ RUN      ] format_test.many_args
[       OK ] format_test.many_args (0 ms)
[ RUN      ] format_test.named_arg
[       OK ] format_test.named_arg (0 ms)
[ RUN      ] format_test.auto_arg_index
[       OK ] format_test.auto_arg_index (0 ms)
[ RUN      ] format_test.empty_specs
[       OK ] format_test.empty_specs (0 ms)
[ RUN      ] format_test.left_align
/fmt/test/format-test.cc:567: Failure
Expected equality of these values:
  "-42  "
  fmt::format("{0:<5}", -42.0l)
    Which is: "-00  "
[  FAILED  ] format_test.left_align (0 ms)
[ RUN      ] format_test.right_align
/fmt/test/format-test.cc:584: Failure
Expected equality of these values:
  "  -42"
  fmt::format("{0:>5}", -42.0l)
    Which is: "  -00"
[  FAILED  ] format_test.right_align (0 ms)
[ RUN      ] format_test.center_align
/fmt/test/format-test.cc:601: Failure
Expected equality of these values:
  " -42 "
  fmt::format("{0:^5}", -42.0l)
    Which is: " -00 "
[  FAILED  ] format_test.center_align (0 ms)
[ RUN      ] format_test.fill
/fmt/test/format-test.cc:620: Failure
Expected equality of these values:
  "**-42"
  fmt::format("{0:*>5}", -42.0l)
    Which is: "**-00"
[  FAILED  ] format_test.fill (0 ms)
[ RUN      ] format_test.plus_sign
/fmt/test/format-test.cc:649: Failure
Expected equality of these values:
  "+42"
  fmt::format("{0:+}", 42.0l)
    Which is: "+00"
[  FAILED  ] format_test.plus_sign (1 ms)
[ RUN      ] format_test.minus_sign
/fmt/test/format-test.cc:674: Failure
Expected equality of these values:
  "42"
  fmt::format("{0:-}", 42.0l)
    Which is: "00"
[  FAILED  ] format_test.minus_sign (1 ms)
[ RUN      ] format_test.space_sign
/fmt/test/format-test.cc:699: Failure
Expected equality of these values:
  " 42"
  fmt::format("{0: }", 42.0l)
    Which is: " 00"
[  FAILED  ] format_test.space_sign (1 ms)
[ RUN      ] format_test.hash_flag
/fmt/test/format-test.cc:746: Failure
Expected equality of these values:
  "-42.0"
  fmt::format("{0:#}", -42.0l)
    Which is: "-00.0"
[  FAILED  ] format_test.hash_flag (1 ms)
[ RUN      ] format_test.zero_flag
/fmt/test/format-test.cc:771: Failure
Expected equality of these values:
  "-000042"
  fmt::format("{0:07}", -42.0l)
    Which is: "-000000"
[  FAILED  ] format_test.zero_flag (0 ms)
[ RUN      ] format_test.width
/fmt/test/format-test.cc:808: Failure
Expected equality of these values:
  "    -1.23"
  fmt::format("{0:9}", -1.23l)
    Which is: "-0.0000000000000031263880373444408178"
[  FAILED  ] format_test.width (1 ms)
[ RUN      ] format_test.runtime_width
/fmt/test/format-test.cc:874: Failure
Expected equality of these values:
  "    -1.23"
  fmt::format("{0:{1}}", -1.23l, 9)
    Which is: "-0.0000000000000031263880373444408178"
[  FAILED  ] format_test.runtime_width (2 ms)
[ RUN      ] format_test.precision
/fmt/test/format-test.cc:934: Failure
Expected equality of these values:
  "1.2"
  fmt::format("{0:.2}", 1.2345l)
    Which is: "0"
/fmt/include/fmt/core.h:404: assertion failed: negative valueterminate called without an active exception
Aborted (core dumped)
Stacktrace from GDB
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1  0x0000fffff7b96a28 in __GI_abort () at abort.c:79
#2  0x0000fffff7e5883c in __gnu_cxx::__verbose_terminate_handler() () from /lib/aarch64-linux-gnu/libstdc++.so.6
#3  0x0000fffff7e5621c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
#4  0x0000fffff7e56280 in std::terminate() () from /lib/aarch64-linux-gnu/libstdc++.so.6
#5  0x0000aaaaaaba23b8 in fmt::v8::detail::assert_fail (file=0x0, line=-10344, message=0x0)
    at /fmt/include/fmt/format-inl.h:40
#6  0x0000aaaaaab27840 in fmt::v8::detail::to_unsigned<long> (value=0) at /fmt/include/fmt/core.h:404
#7  0x0000aaaaaab2da64 in fmt::v8::detail::buffer<char>::append<char> (this=0xffffffffe290, begin=0xffffffffdda1 "10", 
    end=0xffffffffdda0 "010") at /fmt/include/fmt/format.h:694
#8  0x0000aaaaaab58c60 in fmt::v8::detail::copy_str<char, char const*> (begin=0xffffffffdda1 "10", end=0xffffffffdda0 "010", 
    out=...) at /fmt/include/fmt/core.h:1615
#9  0x0000aaaaaab62dec in fmt::v8::detail::copy_str_noinline<char, char const*, fmt::v8::appender> (begin=0xffffffffdda1 "10", 
    end=0xffffffffdda0 "010", out=...) at /fmt/include/fmt/format.h:522
#10 0x0000aaaaaab66944 in fmt::v8::detail::write_significand<fmt::v8::appender, char> (out=..., 
    significand=0xffffffffdda0 "010", significand_size=0, integral_size=1, decimal_point=46 '.')
    at /fmt/include/fmt/format.h:2012
#11 0x0000aaaaaab59a70 in fmt::v8::detail::do_write_float<fmt::v8::appender, fmt::v8::detail::big_decimal_fp, char, fmt::v8::detail::digit_grouping<char> >(fmt::v8::appender, fmt::v8::detail::big_decimal_fp const&, fmt::v8::basic_format_specs<char> const&, fmt::v8::detail::float_specs, fmt::v8::detail::locale_ref)::{lambda(fmt::v8::appender)#2}::operator()(fmt::v8::appender) const (
    this=0xffffffffdc18, it=...) at /fmt/include/fmt/format.h:2078
#12 0x0000aaaaaab5a208 in fmt::v8::detail::do_write_float<fmt::v8::appender, fmt::v8::detail::big_decimal_fp, char, fmt::v8::detail::digit_grouping<char> > (out=..., fp=..., specs=..., fspecs=..., loc=...)
    at /fmt/include/fmt/format.h:2085
#13 0x0000aaaaaab4ce6c in fmt::v8::detail::write_float<fmt::v8::appender, fmt::v8::detail::big_decimal_fp, char> (out=..., 
    fp=..., specs=..., fspecs=..., loc=...) at /fmt/include/fmt/format.h:2167
#14 0x0000aaaaaab5244c in fmt::v8::detail::write<char, fmt::v8::appender, long double, 0> (out=..., value=1, specs=..., loc=...)
    at /fmt/include/fmt/format.h:2247
#15 0x0000aaaaaab48310 in fmt::v8::detail::arg_formatter<char>::operator()<long double> (value=<optimized out>, 
    this=<optimized out>) at /fmt/include/fmt/format.h:2433
#16 fmt::v8::visit_format_arg<fmt::v8::detail::arg_formatter<char>&, fmt::v8::basic_format_context<fmt::v8::appender, char> > (
    arg=..., vis=...) at /fmt/include/fmt/core.h:1597
#17 fmt::v8::detail::vformat_to<char>(fmt::v8::detail::buffer<char>&, fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt::v8::basic_format_context<std::conditional<std::is_same<fmt::v8::type_identity<char>::type, char>::value, fmt::v8::appender, std::back_insert_iterator<fmt::v8::detail::buffer<fmt::v8::type_identity<char>::type> > >::type, fmt::v8::type_identity<char>::type> >, fmt::v8::detail::locale_ref)::format_handler::on_format_specs(int, char const*, char const*) (this=0xffffffffe1f8, 
    id=-10344, begin=0xaaaaaac19725 "}", end=0xaaaaaac19726 "") at /fmt/include/fmt/format.h:3179
#18 0x0000aaaaaab64750 in fmt::v8::detail::parse_replacement_field<char, fmt::v8::detail::vformat_to<char>(fmt::v8::detail::buffer<char>&, fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt::v8::basic_format_context<std::conditional<std::is_same<fmt::v8::type_identity<char>::type, char>::value, fmt::v8::appender, std::back_insert_iterator<fmt::v8::detail::buffer<fmt::v8::type_identity<char>::type> > >::type, fmt::v8::type_identity<char>::type> >, fmt::v8::detail::locale_ref)::format_handler&>(char const*, char const*, fmt::v8::detail::vformat_to<char>(fmt::v8::detail::buffer<char>&, fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt::v8::basic_format_context<std::conditional<std::is_same<fmt::v8::type_identity<char>::type, char>::value, fmt::v8::appender, std::back_insert_iterator<fmt::v8::detail::buffer<fmt::v8::type_identity<char>::type> > >::type, fmt::v8::type_identity<char>::type> >, fmt::v8::detail::locale_ref)::format_handler&) (begin=0x0, end=0xaaaaaac19726 "", handler=...)
    at /fmt/include/fmt/core.h:2587
#19 0x0000aaaaaab487c8 in fmt::v8::detail::parse_format_string<false, char, fmt::v8::detail::vformat_to<char>(fmt::v8::detail::buffer<char>&, fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt::v8::basic_format_context<std::conditional<std::is_same<fmt::v8::type_identity<char>::type, char>::value, fmt::v8::appender, std::back_insert_iterator<fmt::v8::detail::buffer<fmt::v8::type_identity<char>::type> > >::type, fmt::v8::type_identity<char>::type> >, fmt::v8::detail::locale_ref)::format_handler>(fmt::v8::basic_string_view<char>, fmt::v8::detail::vformat_to<char>(fmt::v8::detail::buffer<char>&, fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt::v8::basic_format_context<std::conditional<std::is_same<fmt::v8::type_identity<char>::type, char>::value, fmt::v8::appender, std::back_insert_iterator<fmt::v8::detail::buffer<fmt::v8::type_identity<char>::type> > >::type, fmt::v8::type_identity<char>::type> >, fmt::v8::detail::locale_ref)::format_handler&&) (handler=..., format_str=...)
    at /fmt/include/fmt/core.h:2612
#20 fmt::v8::detail::vformat_to<char> (buf=..., fmt=..., args=..., loc=...) at /fmt/include/fmt/format.h:3183
#21 0x0000aaaaaaba2ccc in fmt::v8::vformat[abi:cxx11](fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt::v8::basic_format_context<fmt::v8::appender, char> >) (fmt=..., args=...) at /fmt/include/fmt/format-inl.h:2427
#22 0x0000aaaaaaaecd38 in fmt::v8::format<long double> (fmt=...) at /fmt/include/fmt/core.h:3128
#23 format_test_precision_Test::TestBody (this=0xaaaaaacd5a90) at /fmt/test/format-test.cc:937
#24 0x0000aaaaaabf1764 in testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void> (object=0xaaaaaacd5a90, method=&virtual testing::Test::TestBody(), location=0xaaaaaac2eda0 "the test body") at /fmt/test/gtest/gmock-gtest-all.cc:4098
#25 0x0000aaaaaabe75ec in testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void> (object=0xaaaaaacd5a90, method=&virtual testing::Test::TestBody(), location=0xaaaaaac2eda0 "the test body") at /fmt/test/gtest/gmock-gtest-all.cc:4134
#26 0x0000aaaaaabb562c in testing::Test::Run (this=0xaaaaaacd5a90) at /fmt/test/gtest/gmock-gtest-all.cc:4173
#27 0x0000aaaaaabb5f68 in testing::TestInfo::Run (this=0xaaaaaaccd130) at /fmt/test/gtest/gmock-gtest-all.cc:4352
#28 0x0000aaaaaabb67c0 in testing::TestSuite::Run (this=0xaaaaaaccb160) at /fmt/test/gtest/gmock-gtest-all.cc:4506
#29 0x0000aaaaaabc41e0 in testing::internal::UnitTestImpl::RunAllTests (this=0xaaaaaacc80f0) at /fmt/test/gtest/gmock-gtest-all.cc:7346
#30 0x0000aaaaaabf2874 in testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> (object=0xaaaaaacc80f0, method=(bool (testing::internal::UnitTestImpl::*)(class testing::internal::UnitTestImpl * const)) 0xaaaaaabc3e04 <testing::internal::UnitTestImpl::RunAllTests()>, location=0xaaaaaac2f968 "auxiliary test code (environments or event listeners)") at /fmt/test/gtest/gmock-gtest-all.cc:4098
#31 0x0000aaaaaabe88b4 in testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> (object=0xaaaaaacc80f0, method=(bool (testing::internal::UnitTestImpl::*)(class testing::internal::UnitTestImpl * const)) 0xaaaaaabc3e04 <testing::internal::UnitTestImpl::RunAllTests()>, location=0xaaaaaac2f968 "auxiliary test code (environments or event listeners)") at /fmt/test/gtest/gmock-gtest-all.cc:4134
#32 0x0000aaaaaabc2bc8 in testing::UnitTest::Run (this=0xaaaaaacb55e8 <testing::UnitTest::GetInstance()::instance>) at /fmt/test/gtest/gmock-gtest-all.cc:6929
#33 0x0000aaaaaaba1cc8 in RUN_ALL_TESTS () at /fmt/test/gtest/gtest/gtest.h:12393
#34 0x0000aaaaaaba1c20 in main (argc=1, argv=0xfffffffff428) at /fmt/test/test-main.cc:39

@vitaut vitaut reopened this Mar 15, 2022
@vitaut
Copy link
Contributor

vitaut commented Mar 15, 2022

Yeah, that's the missing binary128 support that I was referring to. Anyway let's keep this issue open and track the progress here as it is related.

@alexezeder
Copy link
Contributor Author

Ok, I will disable long double checks for now in my benchmark then. 😉

@alexezeder alexezeder changed the title Compilation error on AArch64 with GCC 11 Missing binary128 support Mar 17, 2022
@vitaut
Copy link
Contributor

vitaut commented Apr 4, 2022

binary128 long double should be supported now.

@alexezeder
Copy link
Contributor Author

binary128 long double should be supported now.

Yes, it definitely works! format-test now passes all checks on Raspberry.

format-test output
[==========] Running 113 tests from 6 test suites.
[----------] Global test environment set-up.
[----------] 5 tests from uint128_test
[ RUN      ] uint128_test.ctor
[       OK ] uint128_test.ctor (0 ms)
[ RUN      ] uint128_test.shift
[       OK ] uint128_test.shift (0 ms)
[ RUN      ] uint128_test.minus
[       OK ] uint128_test.minus (0 ms)
[ RUN      ] uint128_test.plus_assign
[       OK ] uint128_test.plus_assign (0 ms)
[ RUN      ] uint128_test.multiply
[       OK ] uint128_test.multiply (0 ms)
[----------] 5 tests from uint128_test (0 ms total)

[----------] 2 tests from float_test
[ RUN      ] float_test.isfinite
[       OK ] float_test.isfinite (0 ms)
[ RUN      ] float_test.isnan
[       OK ] float_test.isnan (0 ms)
[----------] 2 tests from float_test (0 ms total)

[----------] 9 tests from util_test
[ RUN      ] util_test.bit_cast
[       OK ] util_test.bit_cast (0 ms)
[ RUN      ] util_test.increment
[       OK ] util_test.increment (0 ms)
[ RUN      ] util_test.parse_nonnegative_int
[       OK ] util_test.parse_nonnegative_int (0 ms)
[ RUN      ] util_test.utf8_to_utf16
[       OK ] util_test.utf8_to_utf16 (3 ms)
[ RUN      ] util_test.utf8_to_utf16_empty_string
[       OK ] util_test.utf8_to_utf16_empty_string (0 ms)
[ RUN      ] util_test.allocator_ref
[       OK ] util_test.allocator_ref (0 ms)
[ RUN      ] util_test.format_system_error
[       OK ] util_test.format_system_error (0 ms)
[ RUN      ] util_test.system_error
[       OK ] util_test.system_error (0 ms)
[ RUN      ] util_test.report_system_error
[       OK ] util_test.report_system_error (0 ms)
[----------] 9 tests from util_test (4 ms total)

[----------] 9 tests from memory_buffer_test
[ RUN      ] memory_buffer_test.ctor
[       OK ] memory_buffer_test.ctor (0 ms)
[ RUN      ] memory_buffer_test.move_ctor_inline_buffer
[       OK ] memory_buffer_test.move_ctor_inline_buffer (0 ms)
[ RUN      ] memory_buffer_test.move_ctor_dynamic_buffer
[       OK ] memory_buffer_test.move_ctor_dynamic_buffer (0 ms)
[ RUN      ] memory_buffer_test.move_assignment
[       OK ] memory_buffer_test.move_assignment (0 ms)
[ RUN      ] memory_buffer_test.grow
[       OK ] memory_buffer_test.grow (0 ms)
[ RUN      ] memory_buffer_test.allocator
[       OK ] memory_buffer_test.allocator (0 ms)
[ RUN      ] memory_buffer_test.exception_in_deallocate
[       OK ] memory_buffer_test.exception_in_deallocate (0 ms)
[ RUN      ] memory_buffer_test.max_size_allocator
[       OK ] memory_buffer_test.max_size_allocator (0 ms)
[ RUN      ] memory_buffer_test.max_size_allocator_overflow
[       OK ] memory_buffer_test.max_size_allocator_overflow (0 ms)
[----------] 9 tests from memory_buffer_test (1 ms total)

[----------] 86 tests from format_test
[ RUN      ] format_test.escape
[       OK ] format_test.escape (0 ms)
[ RUN      ] format_test.unmatched_braces
[       OK ] format_test.unmatched_braces (0 ms)
[ RUN      ] format_test.no_args
[       OK ] format_test.no_args (0 ms)
[ RUN      ] format_test.args_in_different_positions
[       OK ] format_test.args_in_different_positions (0 ms)
[ RUN      ] format_test.arg_errors
[       OK ] format_test.arg_errors (0 ms)
[ RUN      ] format_test.many_args
[       OK ] format_test.many_args (0 ms)
[ RUN      ] format_test.named_arg
[       OK ] format_test.named_arg (0 ms)
[ RUN      ] format_test.auto_arg_index
[       OK ] format_test.auto_arg_index (0 ms)
[ RUN      ] format_test.empty_specs
[       OK ] format_test.empty_specs (0 ms)
[ RUN      ] format_test.left_align
[       OK ] format_test.left_align (0 ms)
[ RUN      ] format_test.right_align
[       OK ] format_test.right_align (0 ms)
[ RUN      ] format_test.center_align
[       OK ] format_test.center_align (0 ms)
[ RUN      ] format_test.fill
[       OK ] format_test.fill (0 ms)
[ RUN      ] format_test.plus_sign
[       OK ] format_test.plus_sign (0 ms)
[ RUN      ] format_test.minus_sign
[       OK ] format_test.minus_sign (0 ms)
[ RUN      ] format_test.space_sign
[       OK ] format_test.space_sign (0 ms)
[ RUN      ] format_test.hash_flag
[       OK ] format_test.hash_flag (0 ms)
[ RUN      ] format_test.zero_flag
[       OK ] format_test.zero_flag (0 ms)
[ RUN      ] format_test.width
[       OK ] format_test.width (0 ms)
[ RUN      ] format_test.runtime_width
[       OK ] format_test.runtime_width (1 ms)
[ RUN      ] format_test.precision
[       OK ] format_test.precision (3 ms)
[ RUN      ] format_test.runtime_precision
[       OK ] format_test.runtime_precision (3 ms)
[ RUN      ] format_test.format_bool
[       OK ] format_test.format_bool (0 ms)
[ RUN      ] format_test.format_short
[       OK ] format_test.format_short (0 ms)
[ RUN      ] format_test.format_int
[       OK ] format_test.format_int (15 ms)
[ RUN      ] format_test.format_bin
[       OK ] format_test.format_bin (0 ms)
[ RUN      ] format_test.format_dec
[       OK ] format_test.format_dec (0 ms)
[ RUN      ] format_test.format_hex
[       OK ] format_test.format_hex (0 ms)
[ RUN      ] format_test.format_oct
[       OK ] format_test.format_oct (0 ms)
[ RUN      ] format_test.format_int_locale
[       OK ] format_test.format_int_locale (0 ms)
[ RUN      ] format_test.format_float
[       OK ] format_test.format_float (0 ms)
[ RUN      ] format_test.format_double
[       OK ] format_test.format_double (15 ms)
[ RUN      ] format_test.precision_rounding
[       OK ] format_test.precision_rounding (0 ms)
[ RUN      ] format_test.prettify_float
[       OK ] format_test.prettify_float (0 ms)
[ RUN      ] format_test.format_nan
[       OK ] format_test.format_nan (0 ms)
[ RUN      ] format_test.format_infinity
[       OK ] format_test.format_infinity (0 ms)
[ RUN      ] format_test.format_long_double
[       OK ] format_test.format_long_double (0 ms)
[ RUN      ] format_test.format_char
[       OK ] format_test.format_char (15 ms)
[ RUN      ] format_test.format_volatile_char
[       OK ] format_test.format_volatile_char (0 ms)
[ RUN      ] format_test.format_unsigned_char
[       OK ] format_test.format_unsigned_char (0 ms)
[ RUN      ] format_test.format_cstring
[       OK ] format_test.format_cstring (15 ms)
[ RUN      ] format_test.format_pointer
[       OK ] format_test.format_pointer (15 ms)
[ RUN      ] format_test.write_uintptr_fallback
[       OK ] format_test.write_uintptr_fallback (0 ms)
[ RUN      ] format_test.format_enum_class
[       OK ] format_test.format_enum_class (0 ms)
[ RUN      ] format_test.format_string
[       OK ] format_test.format_string (0 ms)
[ RUN      ] format_test.format_string_view
[       OK ] format_test.format_string_view (0 ms)
[ RUN      ] format_test.format_std_string_view
[       OK ] format_test.format_std_string_view (0 ms)
[ RUN      ] format_test.format_explicitly_convertible_to_std_string_view
[       OK ] format_test.format_explicitly_convertible_to_std_string_view (0 ms)
[ RUN      ] format_test.format_convertible_to_anything
[       OK ] format_test.format_convertible_to_anything (0 ms)
[ RUN      ] format_test.format_custom
[       OK ] format_test.format_custom (0 ms)
[ RUN      ] format_test.format_to_custom
[       OK ] format_test.format_to_custom (0 ms)
[ RUN      ] format_test.format_string_from_speed_test
[       OK ] format_test.format_string_from_speed_test (0 ms)
[ RUN      ] format_test.format_examples
[       OK ] format_test.format_examples (0 ms)
[ RUN      ] format_test.print
[       OK ] format_test.print (0 ms)
[ RUN      ] format_test.variadic
[       OK ] format_test.variadic (0 ms)
[ RUN      ] format_test.dynamic
[       OK ] format_test.dynamic (0 ms)
[ RUN      ] format_test.bytes
[       OK ] format_test.bytes (0 ms)
[ RUN      ] format_test.group_digits_view
[       OK ] format_test.group_digits_view (0 ms)
[ RUN      ] format_test.join
[       OK ] format_test.join (0 ms)
[ RUN      ] format_test.format_byte
[       OK ] format_test.format_byte (0 ms)
[ RUN      ] format_test.join_bytes
[       OK ] format_test.join_bytes (0 ms)
[ RUN      ] format_test.format_message_example
[       OK ] format_test.format_message_example (0 ms)
[ RUN      ] format_test.unpacked_args
[       OK ] format_test.unpacked_args (0 ms)
[ RUN      ] format_test.compile_time_string
[       OK ] format_test.compile_time_string (0 ms)
[ RUN      ] format_test.custom_format_compile_time_string
[       OK ] format_test.custom_format_compile_time_string (0 ms)
[ RUN      ] format_test.format_udl
[       OK ] format_test.format_udl (0 ms)
[ RUN      ] format_test.named_arg_udl
[       OK ] format_test.named_arg_udl (0 ms)
[ RUN      ] format_test.enum
[       OK ] format_test.enum (0 ms)
[ RUN      ] format_test.formatter_not_specialized
[       OK ] format_test.formatter_not_specialized (0 ms)
[ RUN      ] format_test.non_null_terminated_format_string
[       OK ] format_test.non_null_terminated_format_string (0 ms)
[ RUN      ] format_test.dynamic_formatter
[       OK ] format_test.dynamic_formatter (0 ms)
[ RUN      ] format_test.to_string
[       OK ] format_test.to_string (0 ms)
[ RUN      ] format_test.output_iterators
[       OK ] format_test.output_iterators (0 ms)
[ RUN      ] format_test.formatted_size
[       OK ] format_test.formatted_size (0 ms)
[ RUN      ] format_test.format_to_no_args
[       OK ] format_test.format_to_no_args (0 ms)
[ RUN      ] format_test.format_to
[       OK ] format_test.format_to (0 ms)
[ RUN      ] format_test.format_to_memory_buffer
[       OK ] format_test.format_to_memory_buffer (0 ms)
[ RUN      ] format_test.format_to_vector
[       OK ] format_test.format_to_vector (0 ms)
[ RUN      ] format_test.format_to_propagates_exceptions
[       OK ] format_test.format_to_propagates_exceptions (0 ms)
[ RUN      ] format_test.format_to_n
[       OK ] format_test.format_to_n (0 ms)
[ RUN      ] format_test.format_to_n_output_iterator
[       OK ] format_test.format_to_n_output_iterator (0 ms)
[ RUN      ] format_test.format_string_errors
[       OK ] format_test.format_string_errors (0 ms)
[ RUN      ] format_test.vformat_to
[       OK ] format_test.vformat_to (0 ms)
[ RUN      ] format_test.char_traits_is_not_ambiguous
[       OK ] format_test.char_traits_is_not_ambiguous (0 ms)
[ RUN      ] format_test.back_insert_slicing
[       OK ] format_test.back_insert_slicing (0 ms)
[ RUN      ] format_test.test_formatters_enabled
[       OK ] format_test.test_formatters_enabled (0 ms)
[----------] 86 tests from format_test (97 ms total)

[----------] 2 tests from format_int_test
[ RUN      ] format_int_test.data
[       OK ] format_int_test.data (0 ms)
[ RUN      ] format_int_test.format_int
[       OK ] format_int_test.format_int (0 ms)
[----------] 2 tests from format_int_test (0 ms total)

[----------] Global test environment tear-down
[==========] 113 tests from 6 test suites ran. (104 ms total)
[  PASSED  ] 113 tests.

@vitaut
Copy link
Contributor

vitaut commented Apr 4, 2022

Thanks for testing, @alexezeder!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants