O>как выяснилось компилятор просто не генерит инструкцию ретурна O>...ну я понимаю конечно что undefined behaviour, но зачем прям сразу начисто ногу отстреливать то
Когда компилятор выкидывает ветки с UB, то всякие поборники "портабельного ассемблера" начинают вопить что компилятор не должен заниматься такой самодеятельнотью, а должен напрямую транслировать программу в ассемблер так, как велел программист.
В данном случае компилятор так и поступил: нет return — не генерируется инструкция. Что, интересно, теперь вопить будут?
Здравствуйте, ononim, Вы писали:
O>.. а если поменять bool foobar на void foobar, или добавить return false, то не падает. Ну подумаешь забыл вернуть bool
Так оно же предупреждение генерит. А далее уж "шо выросло — то выросло".
O>>.. а если поменять bool foobar на void foobar, или добавить return false, то не падает. Ну подумаешь забыл вернуть bool MD>Так оно же предупреждение генерит. А далее уж "шо выросло — то выросло".
Предупреждение дело хорошее, но не оправдание. Впрочем по стандарту это UB, а это уже оправдание. Я не то чтоб прошу переделать компиляторы, просто предупреждаю других о новой интересной формы грабле, присущей самым современным трафикам gcc.
А что касается пожеланий, то очевидно компилятор считает что раз нету ретурна — то значит функция — noreturn. Ну положим считает, но в таком случае во-первых можно было в варнинге конкретнее написать о таком умозаключении компилятора, во-вторых хотелось бы чтоб в дебажной версии поведение было аналогичным (сейчас без -O2 — не падает) и в идеале чтоб исполнение не проваливалось в следующую функцию вызывая тонны радости у девелопера, а брякалось на излете — ведь там куча места под нопы отвели, могли бы забить их брекпоинтами.
Как много веселых ребят, и все делают велосипед...
Здравствуйте, ononim, Вы писали:
O>хотелось бы чтоб в дебажной версии поведение было аналогичным (сейчас без -O2 — не падает) и в идеале чтоб исполнение не проваливалось в следующую функцию вызывая тонны радости у девелопера, а брякалось на излете — ведь там куча места под нопы отвели, могли бы забить их брекпоинтами.
Думаю, достаточно дельное пожелание, чтобы репортить фичареквест, если такового ещё нет.
Здравствуйте, σ, Вы писали:
σ>В данном случае компилятор так и поступил: нет return — не генерируется инструкция. Что, интересно, теперь вопить будут?
return — это вернуть значение. Инструкция для возврата управления в любом случае генерируется. Но, видимо, компилятор решил просто оставить стек в кривом состоянии. Но по уму тогда бы надо ошибку сгенерировать, а не просто варнинг. Варнинг годится, если компилятор всё корректно генерит для возврата значения, но само значение будет неопределённым