# V1082. Function marked as 'noreturn' may return control. This will result in undefined behavior.

Анализатор обнаружил функцию, обозначенную как невозвращающую управление, которая тем не менее может вернуть управление на какой-либо из веток выполнения.

Рассмотрим в начале корректный пример:

    [[ noreturn ]] void q() {
      throw "error"; // OK
    }

Функция 'q' прервет своё выполнение броском исключения. Дальнейшее выполнение программы перейдет обработчику исключения, а не вызвавшему эту функцию коду. При этом компилятор понимает, что следующий за вызовом функции 'q' код будет недостижим и его можно оптимизировать.

    [[ noreturn ]] void f(int i) { // behavior is undefined
                                   // if called with an argument <= 0
      if (i > 0)
        throw "positive";
    }

То же самое случится при вызове функции 'f' с положительным значением аргумента. Однако если в процессе выполнения программы в функцию 'f' будет передано отрицательное значение или ноль, то согласно стандарту C++ возникнет неопределенное поведение:

> 9.12.9 Noreturn attribute [dcl.attr.noreturn]

> 2. If a function f is called where f was previously declared with the noreturn attribute and f eventually returns, the behavior is undefined.

Данная диагностика классифицируется как:

CERT-MSC53-CPP