История изменений
Исправление fsb4000, (текущая версия) :
Ядро Linux на Си и UB в нём нет.
Linux разваливается в хлам если не останавливать clang в попытках оптимизировать код.
Именно поэтому Linux собирается с
-fno-strict-aliasing
-fno-delete-null-pointer-checks
-fno-allow-store-data-races
-fno-strict-overflow
https://github.com/torvalds/linux/blob/6098d87eaf31f48153c984e2adadf14762520a87/Makefile#L560
https://github.com/torvalds/linux/blob/6098d87eaf31f48153c984e2adadf14762520a87/Makefile#L809
https://github.com/torvalds/linux/blob/6098d87eaf31f48153c984e2adadf14762520a87/Makefile#L824
https://github.com/torvalds/linux/blob/6098d87eaf31f48153c984e2adadf14762520a87/Makefile#L993z
Как минимум эти 4 флага, это оптимизации, которые отключены, потому что Linux разваливается если их включить и разрабы Linux знают об этом и просто не способны избавиться от UB в их коде.
А с этими флагами и примеры UB из этой ветки работают ожидаемо :)
Исправление fsb4000, :
Ядро Linux на Си и UB в нём нет.
Linux разваливается в хлам если не останавливать clang в попытках оптимизировать код.
Именно поэтому Linux собирается с
-fno-strict-aliasing
-fno-delete-null-pointer-checks
-fno-allow-store-data-races
-fno-strict-overflow
https://github.com/torvalds/linux/blob/6098d87eaf31f48153c984e2adadf14762520a87/Makefile#L560
https://github.com/torvalds/linux/blob/6098d87eaf31f48153c984e2adadf14762520a87/Makefile#L809
https://github.com/torvalds/linux/blob/6098d87eaf31f48153c984e2adadf14762520a87/Makefile#L824
https://github.com/torvalds/linux/blob/6098d87eaf31f48153c984e2adadf14762520a87/Makefile#L993z
Как минимум эти 4 флага, это оптимизации, которые отключены, потому что Linux разваливается если их включить и разрабы Linux знают об этом и просто не способны избавиться от UB в их коде.
Исходная версия fsb4000, :
Ядро Linux на Си и UB в нём нет.
Linux разваливается в хлам если не останавливать clang.
Именно поэтому Linux собирается с
-fno-strict-aliasing
-fno-delete-null-pointer-checks
-fno-allow-store-data-races
-fno-strict-overflow
https://github.com/torvalds/linux/blob/6098d87eaf31f48153c984e2adadf14762520a87/Makefile#L560
https://github.com/torvalds/linux/blob/6098d87eaf31f48153c984e2adadf14762520a87/Makefile#L809
https://github.com/torvalds/linux/blob/6098d87eaf31f48153c984e2adadf14762520a87/Makefile#L824
https://github.com/torvalds/linux/blob/6098d87eaf31f48153c984e2adadf14762520a87/Makefile#L993z
Как минимум эти 4 флага, это оптимизации, которые отключены, потому что Linux разваливается если их включить и разрабы Linux знают об этом и просто не способны избавиться от UB в их коде.