Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Segfault when compiling with mixed -std options in gcc #2017

@niyue

Description

@niyue

My env:

  1. Debian bullseye 20201012
  2. gcc (Debian 10.2.0-16) 10.2.0
  3. fmt 7.1.2 (installed via vcpkg)

I have a very simple usage like below:

std::string double_to_string(double value) {
  return fmt::format("{}", value);
}

// the test case looks like:
auto string_value = double_to_string(3.14); // 3.14 is a literal, and all my 3 cases with double literal as input causes segfault

The test case for this usage causes a segfault.

  1. it worked fine for fmt 7.0.3 but failed for 7.1.2
  2. it only causes problem under "Release" mode, for "Debug" mode, it works well

Here is the stack trace in the core dump I collected:

#0  0x00005634baa9045b in std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > fmt::v7::detail::write<char, std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, double, 0>(std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, double) ()
(gdb) bt full
#0  0x00005634baa9045b in std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > fmt::v7::detail::write<char, std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, double, 0>(std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, double) ()
No symbol table info available.
#1  0x00005634baa8deb8 in fmt::v7::detail::vformat[abi:cxx11](fmt::v7::basic_string_view<char>, fmt::v7::format_args) ()
No symbol table info available.
#2  0x00005634ba2e12af in ____C_A_T_C_H____T_E_S_T____4() ()
No symbol table info available.
#3  0x00005634ba1c10eb in Catch::RunContext::invokeActiveTestCase() ()
No symbol table info available.
#4  0x00005634ba1d5c08 in Catch::RunContext::runCurrentTest(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) ()
No symbol table info available.
#5  0x00005634ba1e584f in Catch::RunContext::runTest(Catch::TestCase const&) ()
No symbol table info available.
#6  0x00005634ba1eea42 in Catch::Session::runInternal() ()
No symbol table info available.
#7  0x00005634ba1ef01b in Catch::Session::run() ()
No symbol table info available.
#8  0x00005634ba18bb30 in main ()
No symbol table info available.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions