Сообщение Re[4]: C++ illegal instruction от 31.07.2025 13:52
Изменено 31.07.2025 13:53 ·
Re[4]: C++ illegal instruction
Здравствуйте, Chorkov, Вы писали:
C>·>Любопытно, а почему это не является ошибкой компиляции? В чём смысл генерировать невалидный бинарик, падающий во время исполнения, если уже известно, что в исходнике ошибка?
C>Если эта функция нигде не вызывается, то это не ошибка. Ваш Кэп.
Ну даже формально оно всё равно же может падать. UB же. Например, загружается код в exec-секцию какого-то умного процессора и инвалидные инструкции вызовут падение, даже без их выполнения.
C>Возможно, адрес функции как-то используется, даже без вызовов, например, как уникальный идентификатор, или как блокировщик выбрасывания не используемых единиц трансляции.
Если так, то это либо всё равно UB (и потенциальное падение), либо тело функции вообще не компилируется, а создаётся только адрес. Ну тогда ладно, пусть такое не будет ошибкой компиляции, но тогда и сабжа не будет.
C>Или как static_assert, что содержащейся в ней код — компилируемый.
По-моему "компилируемый" должно означать — порождающий некий код, а не сабж.
C>·>Любопытно, а почему это не является ошибкой компиляции? В чём смысл генерировать невалидный бинарик, падающий во время исполнения, если уже известно, что в исходнике ошибка?
C>Если эта функция нигде не вызывается, то это не ошибка. Ваш Кэп.
Ну даже формально оно всё равно же может падать. UB же. Например, загружается код в exec-секцию какого-то умного процессора и инвалидные инструкции вызовут падение, даже без их выполнения.
C>Возможно, адрес функции как-то используется, даже без вызовов, например, как уникальный идентификатор, или как блокировщик выбрасывания не используемых единиц трансляции.
Если так, то это либо всё равно UB (и потенциальное падение), либо тело функции вообще не компилируется, а создаётся только адрес. Ну тогда ладно, пусть такое не будет ошибкой компиляции, но тогда и сабжа не будет.
C>Или как static_assert, что содержащейся в ней код — компилируемый.
По-моему "компилируемый" должно означать — порождающий некий код, а не сабж.
Re[4]: C++ illegal instruction
Здравствуйте, Chorkov, Вы писали:
C>·>Любопытно, а почему это не является ошибкой компиляции? В чём смысл генерировать невалидный бинарик, падающий во время исполнения, если уже известно, что в исходнике ошибка?
C>Если эта функция нигде не вызывается, то это не ошибка. Ваш Кэп.
Ну даже формально оно всё равно же может падать. UB же. Например, загружается код в exec-секцию какого-то умного процессора и инвалидные инструкции вызовут падение, даже без их выполнения.
C>Возможно, адрес функции как-то используется, даже без вызовов, например, как уникальный идентификатор, или как блокировщик выбрасывания не используемых единиц трансляции.
Если так, то это либо всё равно UB (и потенциальное падение), либо тело функции вообще не компилируется, а создаётся только адрес. Ну тогда ладно, пусть такое не будет ошибкой компиляции, но тогда и сабжа не будет.
C>Или как static_assert, что содержащейся в ней код — компилируемый.
По-моему "компилируемый" должно означать — порождающий некий машкод, а не сабж.
C>·>Любопытно, а почему это не является ошибкой компиляции? В чём смысл генерировать невалидный бинарик, падающий во время исполнения, если уже известно, что в исходнике ошибка?
C>Если эта функция нигде не вызывается, то это не ошибка. Ваш Кэп.
Ну даже формально оно всё равно же может падать. UB же. Например, загружается код в exec-секцию какого-то умного процессора и инвалидные инструкции вызовут падение, даже без их выполнения.
C>Возможно, адрес функции как-то используется, даже без вызовов, например, как уникальный идентификатор, или как блокировщик выбрасывания не используемых единиц трансляции.
Если так, то это либо всё равно UB (и потенциальное падение), либо тело функции вообще не компилируется, а создаётся только адрес. Ну тогда ладно, пусть такое не будет ошибкой компиляции, но тогда и сабжа не будет.
C>Или как static_assert, что содержащейся в ней код — компилируемый.
По-моему "компилируемый" должно означать — порождающий некий машкод, а не сабж.