On Tue, Apr 09, 2019 at 09:22:15PM +0400, Sergey Y. Afonin wrote: > On Tuesday 09 April 2019, Mikhail Efremov wrote: > > >> А именно о разнице между спецификацией и конкретной реализацией. > > > Просто нужно осознать, что после того, как в программе случилось > > UB, она может сделать что угодно, на что ей хватит прав > > Э, нет. После того, как в программе случилось UB (в том виде, в котором это > обсуждалось), _компилятор_ может сделать какой угодно код, после чего этот > код может сделать что угодно, на что ему хватит прав. И это уточнение про > компилятор тут ключевое. Если каким-то образом известно (тесты там, код > ассемблерный посмотрели промежуточный - мало ли), что какой-то компилятор > это UB обрабатывает так, как хотелось (пусть так совпало) то скомпилированная > программа будет делать ровно то, что хотелось, без всяких "что угодно", пока > её не соберут другим компилятором. OK, допустим, у нас у всех одинаковое понимание термина UB. Как теперь исправить все пакеты, в исходниках которых есть такое UB, про которые мы не можем утверждать, что нам достоверно известно о том, что скомпилированной код будет делать именно то, что имел в виду автор исходного кода, содержащего UB? gcc -fwrapv при первом подозрении на наличие в пакете переполнений в знаковой арифметике? -- ldv