MSVC и std::experimental::generator
От: _NN_ www.nemerleweb.com
Дата: 23.09.19 18:35
Оценка: 42 (2)
Будьте осторожны с использованием co_yield с исключениями в функции в релизе.
В 16.2 была очень неприятная ошибка, когда компилятор иногда "забывал" сгенерировать один опкод в коде.
При чём проявляется стабильно только при мультипроцессорной сборке на машине с 8-ю и более ядрами и только если компилятору удавлось заинлайнить.
На билд машине их 64, поэтому там проявлялось без проблем, а собранный локально не повторял ошибку.

В 16.3 пока этой проблемы не замечено.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: MSVC и std::experimental::generator продолжение
От: _NN_ www.nemerleweb.com
Дата: 21.10.19 13:19
Оценка:
Здравствуйте, _NN_, Вы писали:

Как оказалось в 16.3 не починили таки.
Флаг /d2CoroOptsWorkaround частично помогает, но как выяснилось через два-три билда компилятор выдаёт неправильный код.
На данный момент обходом этой проблему является выключения оптимизации для кода использующего co_yield.
#ifdef _M_IX86
#pragma optimize ("", off)
#endif
...
#ifdef _M_IX86
#pragma optimize ("", on)
#endif


В 16.4 Preview 2 воспроизвести проблему мне ещё не удалось. Осталось молиться, чтобы не сломали до релиза
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.