Bug 41451 - Регрессия g++-11: некорректно генерируемый код с -fprofile-use --coverage
Summary: Регрессия g++-11: некорректно генерируемый код с -fprofile-use --coverage
Status: NEW
Alias: None
Product: Sisyphus
Classification: Development
Component: gcc11-c++ (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: Gleb F-Malinovskiy
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-11-27 20:00 MSK by Andrew Savchenko
Modified: 2021-11-28 15:59 MSK (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Andrew Savchenko 2021-11-27 20:00:12 MSK
Следующая проблема наблюдается на 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 нужно чинить.
Comment 1 Andrew Savchenko 2021-11-27 20:01:26 MSK
Проявляется как минимум на на i586 и x86_64. На остальных архитектурах не проверялось.