eliaskosunen / scnlib

scanf for modern C++
https://scnlib.dev
Apache License 2.0
1.05k stars 47 forks source link

Build failure on Big Endian architectures #119

Closed xvitaly closed 3 months ago

xvitaly commented 3 months ago

Version: 3.0.1 Compiler: GCC 14.1.1 OS: Fedora 41

Log:

[3/142] /builddir/build/BUILD/libscn-3.0.1-build/scnlib-3.0.1/benchmark/runtime/integer/single.cpp
FAILED: benchmark/runtime/integer/CMakeFiles/scn_int_bench.dir/single.cpp.o 
/usr/bin/g++  -I/builddir/build/BUILD/libscn-3.0.1-build/scnlib-3.0.1/include -I/builddir/build/BUILD/libscn-3.0.1-build/scnlib-3.0.1/src -I/builddir/build/BUILD/libscn-3.0.1-build/scnlib-3.0.1/benchmark/runtime/common -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -march=z13 -mtune=z14 -fasynchronous-unwind-tables -fstack-clash-protection -DNDEBUG -DSCN_REGEX_BACKEND=0 -Wno-unused -Wno-redundant-decls -MD -MT benchmark/runtime/integer/CMakeFiles/scn_int_bench.dir/single.cpp.o -MF benchmark/runtime/integer/CMakeFiles/scn_int_bench.dir/single.cpp.o.d -o benchmark/runtime/integer/CMakeFiles/scn_int_bench.dir/single.cpp.o -c /builddir/build/BUILD/libscn-3.0.1-build/scnlib-3.0.1/benchmark/runtime/integer/single.cpp
In file included from /builddir/build/BUILD/libscn-3.0.1-build/scnlib-3.0.1/benchmark/runtime/integer/int_bench.h:18,
                 from /builddir/build/BUILD/libscn-3.0.1-build/scnlib-3.0.1/benchmark/runtime/integer/single.cpp:20:
/builddir/build/BUILD/libscn-3.0.1-build/scnlib-3.0.1/include/scn/scan.h: In instantiation of ‘T scn::v3::scan_int_exhaustive_valid(std::string_view) [with T = int; std::enable_if_t<((bool)is_scan_int_type<T>)>* <anonymous> = 0; std::string_view = std::basic_string_view<char>]’:
/builddir/build/BUILD/libscn-3.0.1-build/scnlib-3.0.1/benchmark/runtime/integer/single.cpp:124:55:   required from ‘void scan_int_single_scn_int_exhaustive_valid(benchmark::State&) [with Int = int]’
  124 |         auto val = scn::scan_int_exhaustive_valid<Int>(*s.it);
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
/builddir/build/BUILD/libscn-3.0.1-build/scnlib-3.0.1/benchmark/runtime/integer/single.cpp:129:1:   required from here
  129 | BENCHMARK_TEMPLATE(scan_int_single_scn_int_exhaustive_valid, int);
      | ^~~~~~~~~~~~~~~~~~
/builddir/build/BUILD/libscn-3.0.1-build/scnlib-3.0.1/include/scn/scan.h:9089:17: error: static assertion failed: scan_int_exhaustive_valid requires a little endian environment
 9089 |         detail::dependent_bool<!SCN_IS_BIG_ENDIAN, T>,
      |         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/builddir/build/BUILD/libscn-3.0.1-build/scnlib-3.0.1/include/scn/scan.h:9089:17: note: ‘scn::v3::detail::dependent_bool<false, int>’ evaluates to false
/builddir/build/BUILD/libscn-3.0.1-build/scnlib-3.0.1/include/scn/scan.h: In instantiation of ‘T scn::v3::scan_int_exhaustive_valid(std::string_view) [with T = long long int; std::enable_if_t<((bool)is_scan_int_type<T>)>* <anonymous> = 0; std::string_view = std::basic_string_view<char>]’:
/builddir/build/BUILD/libscn-3.0.1-build/scnlib-3.0.1/benchmark/runtime/integer/single.cpp:124:55:   required from ‘void scan_int_single_scn_int_exhaustive_valid(benchmark::State&) [with Int = long long int]’
  124 |         auto val = scn::scan_int_exhaustive_valid<Int>(*s.it);
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
/builddir/build/BUILD/libscn-3.0.1-build/scnlib-3.0.1/benchmark/runtime/integer/single.cpp:130:1:   required from here
  130 | BENCHMARK_TEMPLATE(scan_int_single_scn_int_exhaustive_valid, long long);
      | ^~~~~~~~~~~~~~~~~~
/builddir/build/BUILD/libscn-3.0.1-build/scnlib-3.0.1/include/scn/scan.h:9089:17: error: static assertion failed: scan_int_exhaustive_valid requires a little endian environment
 9089 |         detail::dependent_bool<!SCN_IS_BIG_ENDIAN, T>,
      |         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/builddir/build/BUILD/libscn-3.0.1-build/scnlib-3.0.1/include/scn/scan.h:9089:17: note: ‘scn::v3::detail::dependent_bool<false, long long int>’ evaluates to false
/builddir/build/BUILD/libscn-3.0.1-build/scnlib-3.0.1/include/scn/scan.h: In instantiation of ‘T scn::v3::scan_int_exhaustive_valid(std::string_view) [with T = unsigned int; std::enable_if_t<((bool)is_scan_int_type<T>)>* <anonymous> = 0; std::string_view = std::basic_string_view<char>]’:
/builddir/build/BUILD/libscn-3.0.1-build/scnlib-3.0.1/benchmark/runtime/integer/single.cpp:124:55:   required from ‘void scan_int_single_scn_int_exhaustive_valid(benchmark::State&) [with Int = unsigned int]’
  124 |         auto val = scn::scan_int_exhaustive_valid<Int>(*s.it);
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
/builddir/build/BUILD/libscn-3.0.1-build/scnlib-3.0.1/benchmark/runtime/integer/single.cpp:131:1:   required from here
  131 | BENCHMARK_TEMPLATE(scan_int_single_scn_int_exhaustive_valid, unsigned);
      | ^~~~~~~~~~~~~~~~~~
/builddir/build/BUILD/libscn-3.0.1-build/scnlib-3.0.1/include/scn/scan.h:9089:17: error: static assertion failed: scan_int_exhaustive_valid requires a little endian environment
 9089 |         detail::dependent_bool<!SCN_IS_BIG_ENDIAN, T>,
      |         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/builddir/build/BUILD/libscn-3.0.1-build/scnlib-3.0.1/include/scn/scan.h:9089:17: note: ‘scn::v3::detail::dependent_bool<false, unsigned int>’ evaluates to false

Code fragment: https://github.com/eliaskosunen/scnlib/blob/bdd6c0923818788a998b4fe66b5cfedaca16a591/include/scn/scan.h#L9085-L9092

Full build log.

eliaskosunen commented 3 months ago

Oh yeah, that's because the CI doesn't cover the benchmarks on non-x86/arm64-architectures. Fixed in f3b00eca89ee923e4b03a950dee0d00da48e7001, thanks!