C ++: сбой при компиляции с GCC 9.1, 9.2 с любым уровнем оптимизацииC++

Программы на C++. Форум разработчиков
Anonymous
C ++: сбой при компиляции с GCC 9.1, 9.2 с любым уровнем оптимизации

Сообщение Anonymous »

Следующий код сбивается, если составлен с GCC.9.1 и 9.2. Если составлено с более старым GCC, все в порядке. < /P>

Код: Выделить всё

#include 

struct A
{
A()
{
set( nullptr );
}

std::ptrdiff_t offset_;

void set( void* ptr )
{
offset_ = reinterpret_cast( ptr ) - reinterpret_cast( this );
}

void* get()
{
return reinterpret_cast( this ) + offset_;
}
};

int main()
{
A a;

int *b = static_cast( a.get() );

if( !b )
a.set( b = new int{ 10 } );

return *b;
}
Ссылка на код на Coliru: http://coliru.stacked-crooked.com/a/3f5b4623a98fd0b5

Просматриваю ассемблер. Ссылка на Godbolt: https://godbolt.org/z/hrx3uc

Таким образом, вопрос:
это ошибка в GCC, о которой нужно сообщить или моя программа содержит некоторые Ub?

Подробнее здесь: https://stackoverflow.com/questions/601 ... timization

Вернуться в «C++»