| Summary: | Регрессия g++-11: некорректно генерируемый код с -fprofile-use --coverage | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | Andrew Savchenko <bircoph> |
| Component: | gcc11-c++ | Assignee: | Gleb F-Malinovskiy <glebfm> |
| Status: | NEW --- | QA Contact: | qa-sisyphus |
| Severity: | normal | ||
| Priority: | P5 | CC: | glebfm, iv, ldv |
| Version: | unstable | ||
| Hardware: | x86_64 | ||
| OS: | Linux | ||
Проявляется как минимум на на i586 и x86_64. На остальных архитектурах не проверялось. |
Следующая проблема наблюдается на g++-11, но отсутствует в g++-10: $ cat test.cpp include <iostream> using namespace std; int main() { cout << "42" << endl; return 0; } $ g++-11 -g -O1 -fprofile-generate --coverage test.cpp -o test [builder@localhost simpletest-11]$ ./test 42 $ ./test 42 $ g++-11 -g -O1 -fprofile-use --coverage test.cpp -o test $ rm test.gcda $ ./test 42 Aborted $ echo $? 134 Отладка в gdb: Program received signal SIGABRT, Aborted. 0x00007ffff7ba542c in ?? () (gdb) bt #0 0x00007ffff7ba542c in ?? () Backtrace stopped: Cannot access memory at address 0x7fffffffe0f0 (gdb) x/i 0x7fffffffe0f0 0x7fffffffe0f0: Cannot access memory at address 0x7fffffffe0f0 (gdb) x/i 0x00007ffff7ba542c => 0x7ffff7ba542c: Cannot access memory at address 0x7ffff7ba542c (gdb) Опция -g включалась для отладки и её наличие или отсутствие не влияет на проблему. Минимальный уровень оптимизации для проявления бага -O1, проявляется также на -O2 и -O3. Опции -fprofile-use и --coverage обязательны для воспроизведения проблемы. На аналогичной последовательности действий g++-10 генерирует корректно работающий код: $ ./test 42 $ echo $? 0 $ g++-11 --version g++-11 (GCC) 11.2.1 20210911 (ALT Sisyphus 11.2.1-alt1) Copyright (C) 2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ g++-10 --version g++-10 (GCC) 10.3.1 20210703 (ALT Sisyphus 10.3.1-alt6) Copyright (C) 2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. В общем, этот баг и словил simpletest, который не пересобирается сейчас в Сизифе. Мне придётся временно отключить эту проверку, но gcc нужно чинить.