On Mon, Apr 08, 2019 at 11:18:29PM +0400, Sergey Y. Afonin wrote: > On Monday 08 April 2019, Dmitry V. Levin wrote: > > > > И да, я не отрицаю, что UB в Slang - это не хоршо. > > > > Вы не поняли.  UB - это не просто нехорошо, UB - это смертельно. > > > > Компилятор вправе определить результат UB так, как ему будет удобно, > > и применить к результату оптимизацию, которая превратит ваш исходный > > код в бинарный мусор. > > 1. В случае Slang есть тесты, которые, как уже выяснилось, вполне > показывают ситуацию вида "превратилось в бинарный мусор". Хотя допускаю, > что что-то могут и не показать. > > 2. Компилятор, надеюсь, не делает это случайным образом? И без смены > версии компилятора другой код не получается? Нет, компилятор не делает это случайным образом, каждый раз один и тот же компилятор с одним и тем же набором параметров производит один и тот же мусор. Новая версия компилятора производит другой мусор, со стороны это выглядит как псевдослучайный процесс. > > Утверждение "UB работало" звучит довольно странно. > > UB согласно спецификации ещё не означает же UB в рамках конкретной > версии компилятора? Иначе бы все UB вылезали на белый свет быстро и > больно, а такого не происходит. Что значит "UB в рамках конкретной версии компилятора"? UB - это свойство кода, а не компилятора. > > Результат применения следующей версии компилятора к UB - это примерно > > то же самое, что и получение следующего псевдослучайного числа. Не стоит > > полагаться на то, что источник псевдослучайных чисел будет всегда выдавать > > вам подходящие числа. > > Это понятно, но результат, тем не менее, можно так или иначе проверить на > предмет "всё сломалось". Если взять прямо данный конкретный случай, то > я пока не вижу на пакете, например, mc багов, связанных с неправильной > сборкой Slang. Значит, от этого класса UB в slang сломалось не всё. -- ldv