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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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