Ошибка сегментации с g ++ (при двойном использовании to_string на NaN) - PullRequest
0 голосов
/ 10 июля 2020

Предположим, у нас есть следующая настройка:

# CMakeLists.txt
project(Scripts CXX)
add_executable(${PROJECT_NAME} script.cpp)
// script.cpp
#include <limits>
#include <string>

void func()
{
    const double x = std::numeric_limits<double>::quiet_NaN();
    std::to_string(x);
    std::to_string(x);
}

int main()
{
    func();
    return 0;
}

Когда мы компилируем и запускаем это в режиме Release на Linux с использованием GNU 7.3.0 мы получаем segfault:

-- The CXX compiler identification is GNU 7.3.0
-- Check for working CXX compiler: .../gcc-7.3.0/bin/g++
-- Check for working CXX compiler: .../gcc-7.3.0/bin/g++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done

====================[ Build | Scripts | Release ]===============================
.../clion-2020.1.1/bin/cmake/linux/bin/cmake --build .../test_scripts/cmake-build-release --target Scripts --
Scanning dependencies of target Scripts
[ 50%] Building CXX object CMakeFiles/Scripts.dir/script.cpp.o
[100%] Linking CXX executable Scripts
[100%] Built target Scripts

.../test_scripts/cmake-build-release/Scripts
Signal: SIGSEGV (Segmentation fault)

При комментировании второй to_string (т.е. //std::to_string(x);) или при изменении x на значение, отличное от nan (например, x = 10;), или при запуске в режиме Debug segfault отсутствует.

Я что-то делаю не так, или это ошибка g ++?

1 Ответ

2 голосов
/ 10 июля 2020

это ошибка g ++?

Да, это ошибка в версиях 7.x:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86274

Исправлено в версии 8 g cc.

...