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

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

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

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

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

```cpp
[[ 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\.